|
Компьютерный форум 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 |
Забанен Сообщения: 463
|
|
Отправлено: 15:41, 29-03-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать 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); //Write(' ':n1); //cout<<setw(7)<<" "; if (p[i][j]>0) { k++; Print(l-trunc(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"); } в чем проблема??? typedef long int rasp[N][N]; rasp c,p; это описание массива p |
Последний раз редактировалось Drongo, 29-03-2009 в 19:49. Причина: Неужели тяжело оформлять код тегом [code]...[/code] на панели набора текста знак - # Отправлено: 19:05, 29-03-2009 | #12 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 19:54, 29-03-2009 | #13 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать библеотека math.h у меня подключена.может что с типами не так
|
Отправлено: 19:56, 29-03-2009 | #14 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
Цитата Snake750:
|
||
------- Отправлено: 21:18, 29-03-2009 | #15 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать вот мой код на си.ниже будет выложен исходный код на паскале
// transport.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> 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; 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); } int trunc(int x) //Аналог функции trunc() в паскале {float a; if (x%x==0) {x=x;} else {a=x%x; x=x-a;} return x; } 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); //Write(' ':n1); //cout<<setw(7)<<" "; if (p[i][j]>0) { k++; Print(l-trunc(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"); cout<<trunc(-14); getch(); return 0; } Program transportnaj_zadatsha; Uses Crt; Label l1; Const N=6; n1=7; n2=7; Sa:longint=0; Sb:longint=0; Type predpr=Array [1..N] of longint; rasp=Array [1..N,1..N] of longint; Var A,B,alfa,betta,B_d,x:predpr; c,p:rasp; f,f0,x_min,Sp:longint; Nt,x_p,r,r_min,ki,kj,Na,Nb,h,l,i,j:byte; d:char; u:Array[1..N*N] of byte; Procedure Nul (var a:predpr); var i:byte; Begin for i:=1 to N do a[i]:=0; End; Procedure PrintS (x,y:byte; s:string); Begin GotoXY(x,y); Write(s); End; Procedure Print (x,y:byte;a:longint); Begin GotoXY(x,y); Write(a); End; Procedure Tabl; Begin ClrScr; h:=6+Na*3; l:=14+Nb*7; GotoXY(1,3); for i:=1 to Na+1 do begin GotoXY(1,i*3+2); end; for i:=1 to Na do begin GotoXY(5,i*3+3); Write('A',i); end; for i:=1 to Nb do begin GotoXY(i*(n1+1)+n2-2,3); Write('B',i); end; 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'); End; Function FF:longint; var i,j:integer; f:longint; Begin f:=0; for i:=1 to Na do for j:=1 to Nb do if p[i,j]>0 then // inc(f,c[i,j]*p[i,j]); f:=f+c[i,j]*p[i,j]; i:=i+1; j:=j+1; GotoXY(65,Nt+2); Write('F',Nt,'=',f); FF:=f; End; Function a_b:boolean; var k,i,j:byte; Z_a,Z_b:predpr; d:boolean; Begin Nul(Z_a); Nul(Z_b); alfa[1]:=0; Z_a[1]:=1; k:=1; Repeat d:=1=1; for i:=1 to Na do if Z_a[i]=1 then for j:=1 to Nb do if (p[i,j]>-1) and (Z_b[j]=0) then begin Z_b[j]:=1; betta[j]:=c[i,j]-alfa[i]; inc(k); d:=1=2; end; for i:=1 to Nb do if Z_b[i]=1 then for j:=1 to Na do if (p[j,i]>-1) and (Z_a[j]=0) then begin Z_a[j]:=1; alfa[j]:=c[j,i]-betta[i]; inc(k); d:=1=2; end; Until (k=Na+Nb) or d; if d then begin i:=1; While Z_a[i]=1 do inc(i); j:=1; While Z_b[j]=0 do inc(j); p[i,j]:=0; Print((j+1)*(n1+1)+n2-8,i*3+4,p[i,j]); end; a_b:=d; End; 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; Procedure Rid (var x:longint; y:byte); {????????? ????? ????? x} var i:integer; s:string; c:char; j,k:byte; Begin s:=''; i:=1; Repeat c:=ReadKey; Case ord(c) of 48..57: begin s:=s+c; Write(c); inc(i); end; 8:if i>1 then begin dec(i); Delete(s,i,1); Write(chr(8),' ',chr(8)); end; end; j:=WhereX; GotoXY(60,1); ClrEOL; GotoXY(j,1); Until (ord(c)=13) and (i<y+1); val(s,x,i); End; Procedure W_W (var a:predpr; b:byte; c:char); var i,l,m:byte; Begin for i:=1 to b do begin GotoXY(32,1); ClrEOL; Write(c,i,'= '); Rid(a[i],n1); Case c of 'A': GotoXY(n2-trunc(ln(a[i])/ln(10)),i*3+4); 'B': GotoXY(n2+i*(n1+1)-trunc(ln(a[i])/ln(10)),4); end; Write(a[i]); end; End; Procedure W_p; var i,j,h,l,k:byte; c_max:longint; Begin k:=0; for i:=1 to Na do begin h:=i*3+4; for j:=1 to Nb do begin l:=j*(n1+1)+n2-5; GotoXY(l,h); Write(' ':n1); if p[i,j]>0 then begin inc(k); Print(l-trunc(ln(p[i,j])/ln(10))+5,h,p[i,j]); end else if p[i,j]=0 then begin Print(l+n1-2,h,p[i,j]); inc(k); end; end; end; While a_b do inc(k); if k>Na+Nb-1 then PrintS(40,1,'k > n+m-1'); End; Procedure div_mod(c:byte; var a,b:byte); Begin b:=c mod Nb; a:=c div Nb +1; if b=0 then begin b:=Nb; dec(a); end; End; Procedure Rek(Xi,Yi:byte; var z:boolean; var c:byte); var i,j:byte; Begin z:=1=2; Case c of 1: for i:=1 to Na do if i<>Xi then if p[i,Yi]>-1 then begin if u[(i-1)*Nb+Yi]=0 then begin u[(Xi-1)*Nb+Yi]:=(i-1)*Nb+Yi; c:=2; Rek(i,Yi,z,c); if z then exit; end; end else if (i=ki) and (Yi=kj) then begin u[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj; z:=not z; exit; end; 2: for i:=1 to Nb do if i<>Yi then if p[Xi,i]>-1 then begin if u[(Xi-1)*Nb+i]=0 then begin u[(Xi-1)*Nb+Yi]:=(Xi-1)*Nb+i; c:=1; Rek(Xi,i,z,c); if z then exit; end; end else if (Xi=ki) and (i=kj) then begin u[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj; z:=not z; exit; end; end; u[(Xi-1)*Nb+Yi]:=0; c:=c mod 2 +1; End; Procedure kontur; var i,j,k,mi,mj,l:byte; z:boolean; p_m:longint; Begin for i:=1 to N*N do 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; Repeat inc(l); k:=u[(i-1)*Nb+j]; div_mod(k,i,j); if l mod 2=1 then if p[i,j]<p[mi,mj] then begin mi:=i; mj:=j; end; Until (i=ki) and (j=kj); i:=ki; j:=kj; l:=0; p_m:=p[mi,mj]; Repeat if l mod 2=0 then begin inc(p[i,j],p_m); end else begin dec(p[i,j],p_m); end; if l=0 then inc(p[i,j]); k:=u[(i-1)*Nb+j]; div_mod(k,i,j); inc(l); Until (i=ki) and (j=kj); p[mi,mj]:=-1; End; Procedure Pauza; var d:char; Begin d:=ReadKey; GotoXY(40,1); ClrEOL; End; BEGIN Nul(alfa); Nul(betta); Nt:=1; ClrScr; Repeat Write('Postavshiki: '); ReadLn(Na); Write('Potrebiteli: '); ReadLn(Nb); Until (Na>1) and (Na<=N-1) and (Nb>1) and (Nb<=N-1); Tabl; (******************* ???? ????????? ?????? ******************) PrintS(1,1,'Kol-vo tovara:'); W_W(A,Na,'A'); W_W(B,Nb,'B'); GotoXY(1,1); ClrEOL; Write('Stoimost peremozki:'); for i:=1 to Na do for j:=1 to Nb do begin GotoXY(29,1); ClrEOL; Write('A',i,' - B',j,' '); Rid(c[i,j],5); Print((n1+1)*j+n2-4,i*3+3,c[i,j]); end; (**********************************************************) GotoXY(1,1); ClrEOL; for i:=1 to Na do Sa:=Sa+A[i]; for i:=1 to Nb do Sb:=Sb+B[i]; if Sa<>Sb then begin {???? ?????? ???????? ????????} d:=ReadKey; if Sa>Sb then begin inc(Nb); B[Nb]:=Sa-Sb; for i:=1 to Na do c[i,Nb]:=0; end else begin inc(Na); A[Na]:=Sb-Sa; for i:=1 to Nb do c[Na,i]:=0; end; Tabl; for i:=1 to Na do for j:=1 to Nb do Print((n1+1)*j+n2-4,i*3+3,c[i,j]); for i:=1 to Na do Print(n2-trunc(ln(A[i])/ln(10)),i*3+4,A[i]); for i:=1 to Nb do Print(n2+i*(n1+1)-trunc(ln(B[i])/ln(10)),4,B[i]); end; (************** c?????????? ???????? ????? ****************) for i:=1 to Nb do B_d[i]:=B[i]; for i:=1 to Na do begin for j:=1 to Nb do x[j]:=j; for j:=1 to Nb-1 do begin x_min:=c[i,x[j]]; r_min:=j; for r:= j+1 to Nb do if (x_min>c[i,x[r]]) or ((x_min=c[i,x[r]]) and (B[x[r]]>b[x[r_min]])) then begin x_min :=c[i,x[r]]; r_min:=r; end; x_p:=x[r_min]; x[r_min]:=x[j]; x[j]:=x_p; end; Sp:=0; for j:=1 to Nb do begin p[i,x[j]]:=B_d[x[j]]; if p[i,x[j]]>A[i]-Sp then p[i,x[j]]:=A[i]-Sp; inc(Sp,p[i,x[j]]); dec(B_d[x[j]],p[i,x[j]]); end; end; (***********************************************************) for i:=1 to Na do for j:=1 to Nb do if p[i,j]=0 then p[i,j]:=-1; W_p; f:=FF; f0:=F; While a_b do; for i:=1 to Na do Print(l+1,i*3+3,alfa[i]); for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,betta[i]); Pauza; (******* ??????????? ??????????? ????? ? ???????????? ******) While kkk(ki,kj)<0 do begin kontur; pauza; for i:=1 to Na do for j:=1 to Nb do PrintS((n1+1)*j+n2-1,i*3+3,' '); inc(Nt); GotoXY(1,1); //Write('??????? N',Nt); W_p; f0:=f; f:=FF; if a_b then Goto l1; for i:=1 to Na do Print(l+1,i*3+3,alfa[i]); for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,betta[i]); Pauza; end; (***********************************************************) for i:=1 to Na do for j:=1 to Nb do if p[i,j]=-1 then begin h:=i*3+4; l:=j*(n1+1)+n2-5; GotoXY(l,h); Write(' ':n1); end; GotoXY(40,1); l1: d:=ReadKey; END. |
Последний раз редактировалось Drongo, 29-03-2009 в 21:40. Причина: Всё нормально. ;) Отправлено: 21:26, 29-03-2009 | #16 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
#include <iostream> #include <string.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <windows.h> #include <math.h> using namespace std; int trunc(int x) //Аналог функции trunc() в паскале { float a; if(x % x == 0) x = x; else{ a = x % x; x = x - a; } return x; } int _tmain(int argc, _TCHAR* argv[]) { system("cls"); cout<<trunc(-14); getch(); return 0; } //------------------------------------------------------ ... cout<<trunc(-14); // Параметр передан функции ... // Выполнение, когда мы знаем, что х = -14. int trunc(int x) //Аналог функции trunc() в паскале { if( -14 % -14 == 0) // Результат остатка, всегда будет равен нулю! x = x; // если х = -14, и не изменялся, то переприсваивание не имеет смысла else{ // оператор 'else' никогда не будет выполнен! ... } return x; // По сути не изменив 'х' идёт возврат того же самого значения, которое и передавалось. } ... |
|
------- Отправлено: 10:56, 30-03-2009 | #17 |
Забанен Сообщения: 463
|
Цитата Snake750:
function Trunc ( const Number : Extended ) : Integer; Описание: Функция Trunc возвращает целочисленную часть числа с плавающей запятой. А у тебя Snake750, аргумент функции почему то целое число - изначально не верно. |
|
Отправлено: 11:11, 30-03-2009 | #18 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Alan85:
|
|
------- Отправлено: 11:42, 30-03-2009 | #19 |
Забанен Сообщения: 463
|
Цитата с просторов инета: "Функция floor находит наибольшее целое число не превышающее значение x." - значит верно.
|
Отправлено: 11:58, 30-03-2009 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|