|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Pascal | c++ |
|
C/C++ - Pascal | c++
|
Старожил Сообщения: 175 |
Профиль | Отправить PM | Цитировать Это снова я.все ошибки исправил,но прога работает не правильно.гляньте "свежым взлядом" что я не так сделал.работает почему то только половина программы.
выкладываю исходную версию на паскале и мою на с++.переделывал в среде microsoft visual studio 2008 #include "stdafx.h" #include <iostream> #include <string.h> #include <stdlib.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 Na,Nb,i,k,j; long int f,f0,x_min,Sp; unsigned char Nt,x_p,r,r_min,ki,kj,h,l; 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 div_mod(char c, char a, char b) { b=(c%Nb); a=(c/Nb)+1; if (b==false) {b=Nb; a--; } } void Rek(unsigned char Xi,unsigned char Yi,bool z, unsigned char c) { int i,j; z=false; switch (c) {case 1:{for (i=1;i<=Na;i++) if (i!=Xi) if (p[i][Yi]>-1) { if (u[(i-1)*Nb+Yi]==0) { u[(Xi-1)*Nb+Yi]=(i-1)*Nb+Yi; c=2; Rek(i,Yi,z,c); if (z==true) exit; } } else if ((i==ki) && (Yi==kj)) {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=c%2+1; }break;}} void kontur() {int i,j,k,mi,mj,l; bool z; long int p_m; for (i=1;i<=N*N;i++) 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; do {l++; k=u[(i-1)*Nb+j]; div_mod(k,i,j); if (l%2==1) if (p[i][j]<p[mi][mj]) { mi=i; mj=j; }} while ((i==ki) && (j==kj)); i=ki; j=kj; l=0; p_m=p[mi][mj]; do { if (l%2==0) { p[i][j]=p[i][j]+p_m; } else { p[i][j]=p[i][j]-p_m; } if (l==0) p[i][j]++; k=u[(i-1)*Nb+j]; div_mod(k,i,j); l++;} while ((i==ki) && (j==kj)); p[mi][mj]=-1; } long int FF() {int i,j; long int f; f=0; for (i=1;i<=Na;i++) for (j=1;j<=Nb;j++) if (p[i][j]>0) {f=f+c[i][j]*p[i][j]; } //i++; //j++; gotoxy(65,Nt+2); std::cout<<"F"<<"="<<f; return f; } void Pauza() {char ad; //d=KeyPressed; d=getch(); gotoxy(40,1); system("cls"); } int kkk(unsigned char ki,unsigned char kj) {int i,j; int k,k_min; bool b; b=true; for (i=1;i<=Na;i++) for (j=1;j<=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=j; kj=j; }} return k_min; } void PrintS(int x,int y, char s[30]) {gotoxy(x,y); cout<<s; } void Print(int x,int y,long int a ) {gotoxy(x,y); cout<<" "<<a; } void Nul(predpr a) {int i; for (i=1;i<=N;i++) {a[i]=0;} } 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); std::cout<<"A"<<i; } for (i=1;i<=Nb;i++) {gotoxy(i*(n1+1)+n2-2,3); std::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"); } bool a_b() {int k,i,j; predpr Z_a,Z_b; bool d; Nul(Z_a); Nul(Z_b); alfa[1]=0; Z_a[1]=1; k=1; do {d=true; for (i=1;i<=Na;i++) if (Z_a[i]==1) for (j=1;j<=Nb;j++) if ((p[i][j]>-1)&&(Z_b[j]==0)) { Z_b[j]=1; betta[j]=c[i][j]-alfa[i]; k++; d=false; } for (i=1;i<=Nb;i++) if (Z_b[i]==1) for (j=1;j<=Na;j++) if ((p[i][j]>-1)&&(Z_a[j]==0)) {Z_a[j]=1; alfa[j]=c[i][j]-betta[i]; k++; d=false; }} while ((k==Na+Nb) || d); if (d==true) {i=1; while (Z_a[i]==1) { i++; } j=1; while (Z_b[j]==0) { j++; } p[i][j]=0; Print((j+1)*(n1+1)+n2-8,i*3+4,p[i][j]); } return d; } 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); std::cout<<std::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"); std::cout<<c<<i<<"= "; cin>>a[i]; 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;} } std::cout<<a[i]; } } int _tmain(int argc, _TCHAR* argv[]) { Nul(alfa); Nul(betta); Nt=1; system("cls"); std::cout<<"Postavshiki:"; std::cin>>Na; std::cout<<"Potrebiteli:"; std::cin>>Nb; Tabl(); //////////////////////////////////////// PrintS(1,1,"Kol-vo tovara:"); W_W(A,Na,'A'); W_W(B,Nb,'B'); gotoxy(1,1); cout<<"Stoimost peremozki:"; for (i=1;i<=Na;i++) for (j=1;j<=Nb;j++) { gotoxy(29,1); cout<<"A"<<i<<" - B"<<j<<" \t "; cin>>c[i][j]; Print((n1+1)*j+n2-4,i*3+3,c[i][j]); } ////////////////////////////////////// gotoxy(1,1); //ClrEOL; 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; //d=getch(); 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]]); Sp=Sp+p[i][x[j]]; //dec(B_d[x[j]],p[i,x[j]]); B_d[x[j]]-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); W_P(); f0=f; f=FF(); if (a_b()==true) goto l1; 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; } ///////////////////////////////////////////// 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); std::cout<<std::setw(n1)<<" "; } gotoxy(40,1); l1:d=getch(); 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. |
|
Отправлено: 23:31, 04-04-2009 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Snake750:
1. Как работает программа? (Считать с клавиатуры такие-то значения, посчитать, вывести на экран.) 2. Где эта половина, на которой заканчивается нормальная работа программы? Участок кода. Я её откомпилировал, вроде отработала до конца, без вылетов. Разве что нечитабельное представление данных на экране. |
|
------- Отправлено: 11:47, 06-04-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать в программу необходимо ввести исходные данные
количество поставщиков 2 количество потребителей 3 запасы 1-2 поставщиков 150,90 запросы 1-3 потребителя 60,70,110 стоимость перевозки составляет 6,10,4,12,2,8. Это транспортная задача.Результат ее работу можно посмотреть в исходном коде на паскале который я выложил выше. Программа должна выводить оптимальный план распределения и стоимость перевозки F. Моя программа на си начинает работать не так с того момента когда она вычислила оценки для нижней стоки,А оценки для столбцов она не вычесляет |
Отправлено: 21:59, 06-04-2009 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) | Loading | Программирование и базы данных | 41 | 20-05-2015 15:28 | |
Разное - Pascal | ManHack | Программирование и базы данных | 2 | 01-09-2009 22:50 | |
Delphi - pascal))) | keep21 | Программирование и базы данных | 2 | 14-05-2008 09:46 | |
Pascal | Guest | Программирование и базы данных | 6 | 26-10-2004 17:56 | |
Pascal | BeerMan | Программирование и базы данных | 18 | 02-03-2002 01:55 |
|