|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод процедуры с Pascal на C++ |
|
C/C++ - Перевод процедуры с Pascal на C++
|
Старожил Сообщения: 175 |
Профиль | Отправить PM | Цитировать
помогите пожалуйста с переводом вот этой процедурки
Function kkk(var ki,kj:byte):integer; var i,j:byte; k,k_min:integer; b:boolean; Begin b:=1=1; for i:=1 to Na do for j:=1 to Nb do if p[i,j]=-1 then begin k:=c[i,j]-alfa[i]-betta[j]; if b then begin b:=1=2; ki:=i; kj:=j; k_min:=k; end else if k<k_min then begin k_min:=k; ki:=i; kj:=j; end; end; kkk:=k_min; End; |
|
Отправлено: 13:28, 29-03-2009 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Получается я могу использовать процедуру floor() в виде замены trunc() ????/
void w_p() {int i,j,h,l,k; long int c_max; k=0; for (i=1;i<=Na;i++) { h=i*3+4; for (j=1;j<=Nb;j++) { l=j*(n1+1)+n2-5; gotoxy(l,h); cout<<setw(n1)<<" "; if (p[i][j]>0) { k++; Print(l-floor(log(p[i][j])/log(10))+5,h,p[i][j]); } else if (p[i][j]==0) { Print(l+n1-2,h,p[i][j]); k++; }}} //while (a_b=true) {k++;} if (k>Na+Nb-1) PrintS(40,1,"k > n+m-1"); } Error 1 error C2668: 'log' : ambiguous call to overloaded function Error 2 error C2668: 'log' : ambiguous call to overloaded function |
Отправлено: 17:03, 30-03-2009 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
Цитата Snake750:
По второму коду ничего не могу сказать, так как не пойму, что эта функция делает? Можно ли рядом с кодом писать краткое назначение функции и делать код читабельнее ставя отступы между блоками? Хотя бы вот так. void w_p() { int i, j, h, l, k; long int c_max; k = 0; for(i = 1; i <= Na; i++){ h = i * 3 + 4; for(j = 1; j <= Nb; j++){ l = j * (n1 + 1) + n2 - 5; gotoxy(l, h); cout<<setw(n1)<<" "; if(p[i][j] > 0){ k++; Print(l - floor(log(p[i][j]) / log(10)) + 5, h, p[i][j]); } else if(p[i][j] == 0){ Print(l + n1 - 2, h, p[i][j]); k++; } } } while (a_b=true){ k++; } if(k > Na + Nb - 1) PrintS(40, 1, "k > n + m - 1"); } //----------------- |
||
------- Отправлено: 18:22, 30-03-2009 | #22 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать #include "stdafx.h" #include <iostream> #include <string.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <windows.h> #include <math.h> #include <iomanip> using namespace std; const int N=6; int n1=7; int n2=7; long int Sa=0; long int Sb=0; typedef long int predpr[N]; typedef long int rasp[N][N]; predpr A,B,alfa,betta,B_d,x; rasp c,p; int ik; long int f,f0,x_min; unsigned char Nt,x_p,r,r_min,ki,kj,Na,Nb,h,l,i,j; char d; unsigned char u[N*N]; void gotoxy(int x, int y)// Аналог функции gotoxy в Паскале { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } void Nul(predpr a) {unsigned char i; {for (i=1;i<=N;i++) a[i]=0; }} void PrintS(int x,int y, char s[30]) {gotoxy(x,y); printf("%s",s); } void Print(int x,int y,int a ) {gotoxy(x,y); printf("%d",a); } void Tabl() {system("cls"); h=6+Na*3; l=14+Nb*7; gotoxy(1,3); for (i=1;i<=Na+1;i++) {gotoxy(1,i*3+2); } for (i=1;i<=Na;i++) {gotoxy(5,i*3+3); cout<<"A"<<i; } for (i=1;i<=Nb;i++) {gotoxy(i*(n1+1)+n2-2,3); cout<<"B"<<i; } l=Nb*(n1+1)+n2+3; h=Na*3+6; PrintS(4,3,"\\Bj"); PrintS(4,4,"Ai\\"); PrintS(l,4,"Ui"); PrintS(3,h," Vj"); } long int FF() {int i,j; long int f; f=0; for (i=1;i<=Na;i++) for (j=1;i<=Nb;j++) if (p[i][j]>0) f=f+c[i][j]*p[i][j]; i++; j++; gotoxy(65,Nt+2); cout<<"F"<<Nt<<"="<<f; return f; } int kkk(unsigned char ki,unsigned char kj) {int i,j; int k,k_min; bool b; b=1; for (i=1;i<=Na;i++) for (j=1;i<=Nb;j++) if (p[i][j]==-1) {k=(c[i][j]-alfa[i]-betta[j]); if (b==true) {b=false; ki=i; kj=j; k_min=k; } else if (k<k_min) {k_min=k; ki=k; kj=j; }} return k_min; } void w_p() {int i,j,h,l,k; long int c_max; k=0; for (i=1;i<=Na;i++) { h=i*3+4; for (j=1;j<=Nb;j++) { l=j*(n1+1)+n2-5; gotoxy(l,h); cout<<setw(n1)<<" "; if (p[i][j]>0) { k++; Print(l-floor(log(p[i][j])/log(10))+5,h,p[i][j]); } else if (p[i][j]==0) { Print(l+n1-2,h,p[i][j]); k++; }}} //while (a_b=true) {k++;} if (k>Na+Nb-1) PrintS(40,1,"k > n+m-1"); } int _tmain(int argc, _TCHAR* argv[]) { system("cls"); getch(); return 0; } на счет функции w_p то она выводит план распределения транспортной задачи |
Отправлено: 18:27, 30-03-2009 | #23 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать эту же функцию можно посмотреть в исходном коде на паскале который я выкладывал выше
|
Отправлено: 18:45, 30-03-2009 | #24 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
|
|
------- Отправлено: 18:54, 30-03-2009 | #25 |
Забанен Сообщения: 463
|
|
Отправлено: 19:37, 30-03-2009 | #26 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать // tzmp.cpp : Defines the entry point for the console application. // // transportnaya.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <string.h> #include <stdlib.h> //#include <dos.h> #include <conio.h> #include <windows.h> #include <math.h> #include <iomanip> using namespace std; const int N=6; int n1=7; int n2=7; long int Sa=0; long int Sb=0; typedef long int predpr[N]; typedef long int rasp[N][N]; predpr A,B,alfa,betta,B_d,x; rasp c,p; int ik; long int f,f0,x_min,Sp; unsigned char Nt,x_p,r,r_min,ki,kj,Na,Nb,h,l,i,j; char d; unsigned char u[N*N]; void gotoxy(int x, int y)// Аналог функции gotoxy в Паскале { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } void Nul(predpr a) {unsigned char i; {for (i=1;i<=N;i++) a[i]=0; }} void PrintS(int x,int y, char s[30]) {gotoxy(x,y); printf("%s",s); } void Print(int x,int y,int a ) {gotoxy(x,y); printf("%d",a); } void Tabl() {system("cls"); h=6+Na*3; l=14+Nb*7; gotoxy(1,3); for (i=1;i<=Na+1;i++) {gotoxy(1,i*3+2); } for (i=1;i<=Na;i++) {gotoxy(5,i*3+3); cout<<"A"<<i; } for (i=1;i<=Nb;i++) {gotoxy(i*(n1+1)+n2-2,3); cout<<"B"<<i; } l=Nb*(n1+1)+n2+3; h=Na*3+6; PrintS(4,3,"\\Bj"); PrintS(4,4,"Ai\\"); PrintS(l,4,"Ui"); PrintS(3,h," Vj"); } long int FF() {int i,j; long int f; f=0; for (i=1;i<=Na;i++) for (j=1;i<=Nb;j++) if (p[i][j]>0) f=f+c[i][j]*p[i][j]; i++; j++; gotoxy(65,Nt+2); cout<<"F"<<Nt<<"="<<f; return f; } int kkk(unsigned char ki,unsigned char kj) {int i,j; int k,k_min; bool b; b=1; for (i=1;i<=Na;i++) for (j=1;i<=Nb;j++) if (p[i][j]==-1) {k=(c[i][j]-alfa[i]-betta[j]); if (b==true) {b=false; ki=i; kj=j; k_min=k; } else if (k<k_min) {k_min=k; ki=k; kj=j; }} return k_min; } void w_p() {int i,j,h,l,k; long int c_max; k=0; for (i=1;i<=Na;i++) { h=i*3+4; for (j=1;j<=Nb;j++) { l=j*(n1+1)+n2-5; gotoxy(l,h); cout<<setw(n1)<<" "; if (p[i][j]>0) { k++; Print(l-floor(log((double)p[i][j])/log(10.0))+5,h,p[i][j]); } else if (p[i][j]==0) { Print(l+n1-2,h,p[i][j]); k++; }}} //while (a_b=true) {k++;} if (k>Na+Nb-1) PrintS(40,1,"k > n+m-1"); } void W_W(predpr a,unsigned char b,char c) {int i,l,m; for (i=1;i<=b;i++) {gotoxy(32,1); system("cls"); cout<<c<<i<<'= '; //Rid(a[i],n1); switch (c) {case 'A':{gotoxy(n2-floor(log((double)a[i])/log(10.0)),i*3+4);break;} case 'B': {gotoxy(n2+i*(n1+1)-floor(log((double)a[i])/log(10.0)),4);break;} } cout<<a[i]; }} /*void div_mod(unsigned char c,unsigned char a,b) { b=fmod(c,Nb); a=div(c,Nb+1); if (b==0) { b=Nb; a--; }}*/ void Rek(unsigned char Xi,unsigned char Yi,bool z, unsigned char c) { unsigned char i,j; z=false; switch (c) {case 1:{for (i=1;i<=Na;i++) if (i!=Xi) if (p[i][Yi]>-1) {u[(Xi-1)*Nb+Yi]=(ki-1)*Nb+kj; z=!z; exit; }break;} case 2:{ for (i=1;i<=Nb;i++) if (i!=Yi) if (p[Xi][i]>-1) {if (u[(Xi-1)*Nb+i]==0) {u[(Xi-1)*Nb+Yi]=(Xi-1)*Nb+i; c=1; //Rek(Xi,i,z,c); if (z=true) exit; }else if ((Xi==ki) && (i=kj)) {u[(Xi-1)*Nb+Yi]=(ki-1)*Nb+kj; z=!z; exit; }}u[(Xi-1)*Nb+Yi]=0; c=fmod(c,2)+1;} break;}} void kontur() {unsigned char i,j,k,mi,mj,l; bool z; long int p_m; for (i=1;i<=N*N) u[i]=0; l=1; //Rek(ki,kj,z,l); i=ki; j=kj; k=u[(i-1)*Nb+j]; //div_mod(k,i,j); mi=i; mj=j; l=1; while {l++; k=u[(i-1)*Nb+j]; //div_mod(k,i,j); if (fmod(l,2)==1) if (p[i][j]<p[mi][mj]) { mi=i; mj=j; }} do ((i==ki) && (j==kj)); i=ki; j=kj; l=0; p_m=p[mi][mj]; while { if (fmod(l,2)==0) { //inc(p[i,j],p_m); } else { //dec(p[i,j],p_m); } if (l==0) p[i][j]++; k=u[(i-1)*Nb+j]; //div_mod(k,i,j); l++;} do ((i==ki) && (j==kj)); p[mi][mj]=-1; } /*void Pauza() {char d; //d:=ReadKey; gotoxy(40,1); system("cls"); }*/ int _tmain(int argc, _TCHAR* argv[]) {Nul(alfa); Nul(betta); Nt=1; system("cls"); while { cout<<"Postavshiki:"; scanf("%c",&Na); cout<<"Potrebiteli: "; scanf("%c",&Nb);} do ((Na>1) && (Na<=N-1) && (Nb>1) && (Nb<=N-1)); Tabl(); PrintS(1,1,"Kol-vo tovara:"); W_W(A,Na,'A'); W_W(B,Nb,'B'); gotoxy(1,1); system("cls"); cout<<"Stoimost peremozki:"; for (i=1;i<=Na;i++) for (j=1;j<=Nb;j++) { gotoxy(29,1); system("cls"); cout<<"A"<<i<<" - B"<<j<," "; //Rid(c[i][j],5); Print((n1+1)*j+n2-4,i*3+3,c[i][j]); } gotoxy(1,1); system("cls"); for (i=1;i<=Na;i++) Sa=Sa+A[i]; for (i=1;i<=Nb;i++) Sb=Sb+B[i]; if (Sa!=Sb){ //d:=ReadKey; if (Sa>Sb) { Nb++; B[Nb]=Sa-Sb; for (i=1;i<=Na;i++) c[i][Nb]=0; } else { Na++; A[Na]=Sb-Sa; for (i=1;i<=Nb;i++) c[Na][i]=0; } Tabl; for (i=1;i<=Na;i++) for (j=1;j<=Nb;j++) Print((n1+1)*j+n2-4,i*3+3,c[i][j]); for (i=1;i<=Na;i++) Print(n2-floor(log((double)A[i])/log(10.0)),i*3+4,A[i]); for (i=1;i<=Nb;i++) Print(n2+i*(n1+1)-floor(log((double)B[i])/log(10.0)),4,B[i]); } for (i=1;i<=Nb;i++) B_d[i]=B[i]; for (i=1;i<=Na;i++) { for (j=1;j<=Nb;j++) x[j]=j; for (j=1;j<=Nb-1;j++) { x_min=c[i][x[j]]; r_min=j; for (r=j+1;r<=Nb;r++) if ((x_min>c[i][x[r]]) || ( (x_min=c[i][x[r]]) && (B[x[r]]>b[x[r_min]]) )) } x_min=c[i][x[r]]; r_min=r; } x_p=x[r_min]; x[r_min]=x[j]; x[j]=x_p; } Sp=0; for (j=1;j<=Nb;j++) p[i][x[j]]=B_d[x[j]]; if p[i][x[j]]>A[i]-Sp p[i][x[j]]=A[i]-Sp; //inc(Sp,p[i,x[j]]); //dec(B_d[x[j]],p[i,x[j]]); } for (i=1;i<=Na;i++) for (j=1;j<=Nb;j++) if (p[i][j]==0) p[i][j]=-1; W_p; f=FF; f0=F; while (a_b==true) for (i=1;i<=Na;i++) Print(l+1,i*3+3,alfa[i]); for (i=1;i<=Nb;i++) Print(i*(n1+1)+n2-4,h,betta[i]); Pauza; while kkk(ki,kj)<0 { kontur; pauza; for (i:=1;i<=Na;i++) for (j:=1;j<=Nb;j++) PrintS((n1+1)*j+n2-1,i*3+3,' '); Nt++; gotoxy(1,1); //Write('??????? N',Nt); W_p; f0=f; f=FF; if (a_b==true) goto l1; for (i:=1;i<=Na;i++) db Print(l+1,i*3+3,alfa[i]); for (i:=1;i<=Nb;i++) Print(i*(n1+1)+n2-4,h,betta[i]); Pauza; } for (i:=1;i<=Na;i++) for (j:=1;j<=Nb;j++) if (p[i][j]==-1) { h=i*3+4; l=j*(n1+1)+n2-5; gotoxy(l,h); cout<<setw(n1)<<' '; gotoxy(40,1); //l1:d:=ReadKey; } getch(); return 0; } |
Отправлено: 20:50, 30-03-2009 | #27 |
Забанен Сообщения: 463
|
А можно вывод ошибки, где что... И какая среда разработки?
|
Отправлено: 20:57, 30-03-2009 | #28 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать microsoft visual studio 2008
|
Отправлено: 21:02, 30-03-2009 | #29 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
// Функция делает то-то и то-то., расставьте отступы. Значит, красным я исправил на готовый вариант, зелёным непонятные моменты. В общем ошибок много, я не все исправил. Alan85, Там не от среды, там просто ошибки синтаксиса. Сишный вперемешку с Паскалем. |
|
------- Отправлено: 21:14, 30-03-2009 | #30 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Перевод с Pascal на C++ | Snake750 | Программирование и базы данных | 14 | 14-09-2015 04:48 | |
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) | Loading | Программирование и базы данных | 41 | 20-05-2015 15:28 | |
Использование - Возврат процедуры активации Windows XP | Craager | Лицензирование продуктов Microsoft | 6 | 06-03-2009 15:22 | |
Вызов процедуры | ToX | Программирование и базы данных | 10 | 24-07-2004 00:11 | |
Delphi - Delphi,Описание процедуры | Roman Go | Программирование и базы данных | 14 | 09-03-2003 00:04 |
|