Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Перевод процедуры с Pascal на C++ (http://forum.oszone.net/showthread.php?t=136178)

Snake750 29-03-2009 13:28 1077874

Перевод процедуры с Pascal на C++
 
помогите пожалуйста с переводом вот этой процедурки
Код:

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;

У меня вопрос возник на счет двойного присваивания значения переменной b.Перевести процедуру нужно на с++

DedAlex 29-03-2009 13:40 1077883

Snake750,
b:=1=1; то же, что и b:=true;
b:=1=2; => b:=false;
это boolean переменная, и такое присваивание синтаксически вполне корректно.

Snake750 29-03-2009 13:47 1077891

я вот перевел эту процедуру,но у меня она не работает из за вот этих ошибок:
1.Error 1 error C2109: subscript requires array or pointer type
2.Error 2 error C2061: syntax error : identifier 'b'
3.Error 4 error C2181: illegal else without matching if
4.Error 5 error C2659: '=' : function as left operand
вот мой код.подскажите что не так
Код:

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]-b[j];
if b
{b=0;
ki=i;
kj=j;
k_min=k;
} else if (k<k_min)
{k_min=k;
ki=k;
kj=j;
}}
kkk=k_min;
}


Drongo 29-03-2009 14:11 1077933

А что должна программа делать?
Цитата:

Цитата Snake750
вот мой код.подскажите что не так »

Код:

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++) // Переменные 'Na' не объявлены
    for(j = 1; i <= Nb; j++)  // Переменные 'Na' не объявлены
      if(p[i,j] == -1){ // Запись массива должна быть такой 'p[i][j]', необъявлены.
          k = c[i,j] - alfa[i] - b[j]; // Запись массива должна быть такой 'c[i][j]', необъявлены.
          if b{  // // Что с чем сравнивается? Должно быть правильное условие.
            b = 0;
            ki = i;
            kj = j;
            k_min = k;
          }
          else if (k < k_min){
            k_min = k;
            ki = k;
            kj = j;
          }
        }
  kkk = k_min;  // Непонятное присваивание
  // Функция должна вернуть какое-то значение, результат работы. 'return _Возвращаемое_Значение'
}


Snake750 29-03-2009 14:26 1077963

if b{ // // Что с чем сравнивается? Должно быть правильное условие. а почему на паскале такое условие катит???

Drongo 29-03-2009 14:37 1077972

Цитата:

Цитата Snake750
а почему на паскале такое условие катит??? »

Я ж не создатель языка? ;) Синтаксис такой.
Подождите, может знатоки языка подтянутся, подскажут, как правильно перевести эту строчку.

Snake750 29-03-2009 15:00 1077992

а ты можешь полностью перевести эту процедуру???

Drongo 29-03-2009 15:07 1077998

Цитата:

Цитата Snake750
а ты можешь полностью перевести эту процедуру??? »

К сожалению нет, рад был бы помощь, но не знаю Pascal. :dont-know

ganselo 29-03-2009 15:09 1078000

Цитата:

Цитата Snake750
if b{ // // Что с чем сравнивается? Должно быть правильное условие. а почему на паскале такое условие катит??? »

b булевский тип.
записи
Код:

...
if(b)
{
}...

и
Код:

...
if(b == true)
{
}
...

одинаковы.

Snake750 29-03-2009 15:12 1078003

СПАСИБО ОГРОМНОЕ ТОВАРИЩИ.ПРОЦЕДУРКА РАБОТАЕТ.ВЫЛОЖУ КОД МОЖЕТ КОМУ НАДА.ТЕМУ ПОКА НЕ ЗАКРЫВАЙТЕ ПЛЗ
Код:

nt 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;
}

есть ли аналог вот этой функции на си
Код:

inc(f,c[i,j]*p[i,j]);
эта же функция используется с одним аргументом inc(i);
как такое написать на си???

Alan85 29-03-2009 15:41 1078036

Код:

f+=c[i][j]*p[i][j];
c одним аргументом аналог:
Код:

i++;

Snake750 29-03-2009 19:05 1078196

Код:

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");
}

выдает ошибку Error 4 error C2668: 'log' : ambiguous call to overloaded function
в чем проблема???

typedef long int rasp[N][N];
rasp c,p;
это описание массива p

Drongo 29-03-2009 19:54 1078243

Snake750, Добавьте заголовочный файл
Код:

#include <math.h>

Snake750 29-03-2009 19:56 1078247

библеотека math.h у меня подключена.может что с типами не так

Drongo 29-03-2009 21:18 1078311

Цитата:

Цитата Snake750
библеотека math.h у меня подключена »

В приведённом коде этого не видно. :dont-know
Цитата:

Цитата Snake750
может что с типами не так »

Так, надеюсь весь код программы, не секрет? Давайте его целиком, посмотрим, а то по частям смотреть... Всё равно что в притык рассматривать картину. ;) И оформите код тегом код. Выделив текст и нажав на знак - #

Snake750 29-03-2009 21:26 1078322

вот мой код на си.ниже будет выложен исходный код на паскале
Код:

// 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 30-03-2009 10:56 1078726

Цитата:

Цитата Snake750
вот мой код на си. »

По сути, у вас работает только одна функця trunc(int x). Тоесть в принципе учитывая ваш код, можно остальную часть кода удалить\закоментировать, как неиспользуемый.

Код:

#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;
}
//------------------------------------------------------

И сама функция trunc(int x), по всей видимости не работает как надо. :dont-know Смотрите:

Код:

...
  cout<<trunc(-14); // Параметр передан функции

...
// Выполнение, когда мы знаем, что х = -14.
int trunc(int  x) //Аналог функции trunc() в паскале
{
  if( -14 % -14 == 0) // Результат остатка, всегда будет равен нулю!
      x = x; // если х = -14, и не изменялся, то переприсваивание не имеет смысла
  else{  // оператор 'else' никогда не будет выполнен!
      ...
    }
  return x; // По сути  не изменив 'х' идёт возврат того же самого значения, которое и передавалось.
}
...


Alan85 30-03-2009 11:11 1078742

Цитата:

Цитата Snake750
int trunc(int x) //Аналог функции trunc() в паскале »

в pascal :
function Trunc ( const Number : Extended ) : Integer; Описание: Функция Trunc возвращает целочисленную часть числа с плавающей запятой. А у тебя Snake750, аргумент функции почему то целое число - изначально не верно.

Drongo 30-03-2009 11:42 1078775

Цитата:

Цитата Alan85
Функция Trunc возвращает целочисленную часть числа с плавающей запятой »

Я правильно понял, что аналог функции trunc(), в С++ это - floor(double);, вроде бы округляет число с запятой в меньшую сторону. Округлит число 4.78 = 4

Alan85 30-03-2009 11:58 1078791

Цитата с просторов инета: "Функция floor находит наибольшее целое число не превышающее значение x." - значит верно.

Snake750 30-03-2009 17:03 1079158

Получается я могу использовать процедуру 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

Drongo 30-03-2009 18:22 1079218

Цитата:

Цитата Snake750
Получается я могу использовать процедуру floor() в виде замены trunc() ????/ »

Конечно


Код:

#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

#include <iomanip.h>
using std::setprecision;
using std::setiosflags;

int _tmain(int argc, _TCHAR* argv[])
{
  double num = 15.748;
  cout<<setiosflags(ios::fixed)
      <<setprecision(0);

  system("cls");
  cout<<floor(num);
  getch();

  return 0;
}
//---------------------------------------------------------



Цитата:

Цитата 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");
}
//-----------------


Snake750 30-03-2009 18:27 1079225

Код:

#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 то она выводит план распределения транспортной задачи

Snake750 30-03-2009 18:45 1079245

эту же функцию можно посмотреть в исходном коде на паскале который я выкладывал выше

Drongo 30-03-2009 18:54 1079253

Цитата:

Цитата Snake750
вот весь код »

Не знаю, не знаю, на этом этапе всё компилируется без ошибок. Возможно потому, что функции ни откуда не вызываются и не используются.
Код:

...
int _tmain(int argc, _TCHAR* argv[])
{
  // Где-то здесь должны вызываться ваши функции
  system("cls");
  getch();

  return 0;
}
..


Alan85 30-03-2009 19:37 1079297

Код:

floor(log(p[i][j]) / log(10))
замени на :
Код:

floor(log((double)p[i][j]) / log(10.0))

Snake750 30-03-2009 20:50 1079361

Код:

// 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;
}

посмотрите код.у меня выдает ошибку на каждую скобочку.может у меня что со средой не так

Alan85 30-03-2009 20:57 1079371

А можно вывод ошибки, где что... И какая среда разработки?

Snake750 30-03-2009 21:02 1079376

microsoft visual studio 2008

Drongo 30-03-2009 21:14 1079397

Цитата:

Цитата Snake750
может у меня что со средой не так »

Всё нормально со средой, у меня не меньше ошибок. "Причешите код", разделите функции комментариями:
// Функция делает то-то и то-то., расставьте отступы.

Значит, красным я исправил на готовый вариант, зелёным непонятные моменты. В общем ошибок много, я не все исправил.
Ошибки


Код:

..
long int p_m;
for (i = 1; i<= N*N; i++) u[i]=0;
l=1;
...

Код:

...
while // Нет условия в цикле
{l++;
...

Код:

...
pauza;
for (i:=1;i<=Na;i++) // неправильное объявление в С++. 'i = 1'
for (j:=1;j<=Nb;j++) // неправильное объявление в С++. 'j = 1'
// последующие объявления с такой же ошибкой, заменить на  'i = 1' и 'j = 1'
...

Код:

...
if ((x_min>c[i][x[r]]) || ( (x_min=c[i][x[r]]) && (B[x[r]]>b[x[r_min]]) ))
} // Почему закрыта скобка, когда есть 'if'
...


Alan85, Там не от среды, там просто ошибки синтаксиса. Сишный вперемешку с Паскалем.

Alan85 30-03-2009 21:29 1079418

Эх какое знакомое чувство дискомфорта и автоматом набирающий i:= вместо i= , if (i=5) вместо if (i==5) и так далее. Конфортнее в делфях все же так и осталось

Snake750 30-03-2009 22:40 1079487

Код:

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;

Переведите плз на с++.у меня че то не получаеться

Alan85 31-03-2009 10:11 1079802

Пишу в слепую без компилятора если что поправте:
Код:

void div_mod(char c, char& a, char& b);
{
 b=c % Nb;
 a=c / Nb +1;
 if (!b) { b=Nb; a--; }
}


Drongo 31-03-2009 13:41 1079988

Цитата:

Цитата Snake750
if b=0 then begin »

Цитата:

Цитата Alan85
if (!b) { b=Nb; a--; } »

Оператор '!' - вроде бы оператор отрицания. А нужно оператор сравнения. Мне кажется, что должно быть так:
Код:

...
if(b == 0)
...

P.S. На истине не настаиваю, так как Pascal не владею.

Alan85 31-03-2009 13:50 1079997

Код:

if (!b) ... \\если b>0 то даст отрицание "истины" - то есть "лож", а если b=0 то даст отрицание "лжи" - истину. значит это        \\эквивалентно
if (b==0) \\ так как 0 есть лож в c и с++


Snake750 31-03-2009 17:43 1080249

Код:

#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;
unsigned char Nt,x_p,r,r_min,ki,kj,Na,Nb,h,l,i,j;
......
int _tmain(int argc, _TCHAR* argv[])
{Nul(alfa);
Nul(betta);
Nt=1;
system("cls");

do

std::cout << "Postavshiki:";
std::cin  >> Na;
std::cout << "Potrebiteli:";
std::cin  >> Nb;
while ((Na>1) && (Na<=N-1) && (Nb>1) && (Nb<=N-1));
Tabl;
getch();
return 0;
}

Error 13 error C2061: syntax error : identifier 'cin'
что это за ошибка.библиотеки вроде все подключены.ошибка вылазит только в цикле??

Alan85 31-03-2009 19:06 1080328

Цитата:

Цитата Snake750
Error 13 error C2061: syntax error : identifier 'cin' »

убери // в строчке:
Код:

//using namespace std;

Snake750 31-03-2009 19:09 1080332

пробовал,не катит.а если убрать цикл то все работает

Alan85 31-03-2009 21:02 1080420

а ну тогда убери std:: , если не поможет то убери std:: и #include <iostream> замени на #include <iostream.h>

Snake750 31-03-2009 21:32 1080454

Вы меня не так поняли.библиотеки <iostream.h> у меня вообще нет.а сами процедуры ввода(cin>> и scanf) у меня работают=> библиотеки впорядке.компилятор выдает ошибку только при попытке использовать данные операторы в цикле do..while

Snake750 31-03-2009 21:50 1080480

я все понял.(честно,даже стыдно признаваться в такой глупости) забыл внутри цикла do..while поставить операторные скобки

Snake750 31-03-2009 22:51 1080549

это снова я)))
Код:

#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 ik;
long int f,f0,x_min,Sp;
unsigned char Nt,x_p,r,r_min,ki,kj,Na,Nb,i,j,h,l;
char d;
unsigned char u[N*N];


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 gotoxy(int x, int y)// Аналог функции gotoxy в Паскале
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);       
}


void PrintS(unsigned char x,unsigned char y, char  s[30])
{gotoxy(x,y);
cout<<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);
std::cout<<"A"<<i;
}
for (i=1;i<=Nb;i++)
{gotoxy(i*(n1+1)+n1-2,3);
std::cout<<"B"<<i;
}
l=Nb*(n1+1)+n1+3;
h=Na*3+6;
PrintS(4,3,"\\Bj");
PrintS(4,4,"Ai\\");
PrintS(l,4,"Ui");
PrintS(3,h," Vj");

}
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<<'= ';
//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;}
}
std::cout<<a[i];
}}
void div_mod(char c, char& a, char& b)
{
 b=c % Nb;
 a=c / Nb +1;
 if (!b) { 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=c%2+1;}
break;}}

void kontur()
{char 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;
}
void Nul(predpr a)
{int i;
for (i=1;i<=N;i++)
a[i]=0;
}
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);
std::cout<<"F"<<Nt<<"="<<f;
return f;
}
/*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++;}
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 Pauza()
{char ad;
//d=KeyPressed;
getch();
gotoxy(40,1);
system("cls");
}



int _tmain(int argc, _TCHAR* argv[])
{
Nul(alfa);
Nul(betta);
Nt=1;
system("cls");
Na=1;
Nb=1;
do
{
std::cout<<"Postavshiki:";
std::cin>>Na;
std::cout<<"Potrebiteli:";
std::cin>>Nb;}
while (((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 perevozki:";
for (i=1;i<=Na;i++)
for (i=j;j<=Nb;j++)
{gotoxy(29,1);
system("cls");
cout<<"A"<<i<<"->B"<<j<<"";
cin>>c[i][j];
//Rid(c[i][j],5);
Print((n1+1)*j+n2-4,i*3+3,c[i][j]);
}*/
getch();

        return 0;
}

Дело такое.вместо того чтобы вывести A[от 1 до 2] и B[ от 1 до 3] процеДУРА tabl() выводит A[i] где i сначала символы потом цифры.если значениям Na и Nb изначально присвоить какие то значения( например 2 и 3) то вывод нормальный.я думаю что чтото с типами не так

since12 03-11-2010 14:24 1533883

ребята )привет
из той же серии
Код:

Function a_b:boolean;      {Расчет потенциалов}
var k,i,j:byte;            {alfa и betta}
    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,1,p[i,j],7);
    end;

    a_b:=d;
End;

надо перевести на СИ.или хотя бы объяснить что он делает на паскале)а на Си сам напишу.
Спасибо.

since12 04-11-2010 22:00 1534941

ну что? никто не знает?

lxa85 05-11-2010 12:32 1535267

since12, ты хоть про область расскажи. Какие потенциалы? Расчет цепи переменного тока, и законы Кирхгофа?
что за тип predpr ?

Любезный 05-11-2010 13:25 1535305

Что тебе в этом коде непонятно?

На С перевести тебе не могу, так как этот язык вызывает у мя неприятные ощущения.
А Паскаль тут великолепно читается. Непонятно только про predpr. Смотри источник, откуда ты этот код скомуниздил.

since12 06-11-2010 11:12 1536011

2lxa85
Транспортная задача.
Я как раз и спрашиваю,потому что плохо помню ПАСКАЛЬ.
Вот сам код
Код:

  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; c:byte);
Begin                    {вывод строки s}
    TextColor(c);
    GotoXY(x,y);
    Write(s);
End;

Procedure Print (x,y:byte; n:byte; a:longint; c:byte);
Begin                    {вывод числа a}
    TextColor(c);
    GotoXY(x,y); Write(' ':n);
    GotoXY(x,y); Write(a);
End;

Procedure Rid (var x:longint; y:byte); {проседура ввода числа x}
var i:integer;
    s:string;
    c:char;
    j,k:byte;
Begin
    s:=''; i:=1;
    TextColor(11);
    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;
          if i>y then begin
              TextColor(4);
              Write('Не более ');
              for k:=1 to y-1 do Write('9');
              TextColor(11);
          end;
          GotoXY(j,1);
    Until (ord(c)=13) and (i<y+1);
    val(s,x,i);
End;

Procedure goriz (a,b,c,d,e:char);        {Процедуры goriz, wertic}
var i,j:byte;                            {и Tabl выводят таблицу}
Begin
    Write(a);
    for i:=1 to n2 do Write(b);
    Write(c);
    for i:=1 to Nb do begin
        for j:=1 to n1 do Write(b);
        if i<>Nb then Write(d) else Write(c);
    end;
    for i:=1 to 4 do Write(b);
    Write(e);
End;

Procedure wertic;
var i:byte;
Begin
    Write('│',' ':n2,'║');
    for i:=1 to Nb-1 do Write(' ':n1,'│');
    WriteLn(' ':n1,'║',' ' :4,'│');
End;

Procedure Tabl;
Begin
    ClrScr;
    TextColor(1);
    h:=6+Na*3;
    l:=14+Nb*7;
    GotoXY(1,3);
    for i:=3 to h do wertic;
    GotoXY(1,2);
    goriz('┌','─','╥','┬','┐');
    for i:=1 to Na+1 do begin
        GotoXY(1,i*3+2);
        if (i=1) or (i=Na+1)
          then goriz('╞','═','╬','╪','╡')
          else goriz('├','─','╫','┼','┤');
    end;
    GotoXY(1,h+1);
    goriz('└','─','╨','┴','┘');
    TextColor(9);
    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',9);
    PrintS(4,4,'Ai\',9);
    PrintS(1,1,'Таблица N1',14);
    PrintS(l,4,'alfa',9);
    PrintS(3,h,'betta',9);
End;

Procedure W_W (var a:predpr; b:byte; c:char); {Ввод в таблицу}
var i,l,m:byte;                              {кол-ва продукции}
Begin                                        {поставщ. и потреб.}
    for i:=1 to b do begin
        TextColor(3);
        GotoXY(32,1);
        ClrEOL;
        Write(c,i,'=  ');
        Rid(a[i],n1);
        TextColor(14);
        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;

Function FF:longint;        {Вычисление стоимости плана}
var i,j:byte;
    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]);
    GotoXY(65,Nt+2);
    TextColor(10);
    Write('F',Nt,'=',f);
    FF:=f;
End;

Function a_b:boolean;      {Расчет потенциалов}
var k,i,j:byte;            {alfa и betta}
    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,1,p[i,j],7);
    end;

    a_b:=d;
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,1,p[i,j],14);
            end
            else if p[i,j]=0 then begin
                    Print(l+n1-2,h,1,p[i,j],14);
                    inc(k);
            end;
        end;
    end;

    While a_b do inc(k);

    if k>Na+Nb-1 then PrintS(40,1,'k > n+m-1',12);
End;

Function kkk(var ki,kj:byte):integer; {Расчет коэф. k}
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;
                TextColor(6);
                GotoXY(j*(n1+1)+n2-5,i*3+4);
                Write('(',k,')');
            end;
    if k_min<0 then PrintS(kj*(n1+1)+n2,ki*3+4,'X',12);
    kkk:=k_min;
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);
              PrintS((n1+1)*j+n2-1,i*3+3,'(+)',12);
          end else begin
              dec(p[i,j],p_m);
              PrintS((n1+1)*j+n2-1,i*3+3,'(-)',12);
          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
    TextColor(6);
    GotoXY(40,1);
    Write('Нажмите любую клавишу');
    d:=ReadKey;
    GotoXY(40,1);
    ClrEOL;
End;

BEGIN
    Nul(alfa); Nul(betta);
    Nt:=1;
    ClrScr;
    TextColor(10);
    Repeat
          Write('Введите количество поставщиков (2<=Na<=',N-1,')  ');
          ReadLn(Na);
          Write('Введите количество потребителей (2<=Nb<=',N-1,')  ');
          ReadLn(Nb);
    Until (Na>1) and (Na<=N-1) and (Nb>1) and (Nb<=N-1);
    Tabl;

(******************* ввод начальных данных ******************)
    PrintS(1,1,'Введите количество продукции:',3);
    W_W(A,Na,'A');
    W_W(B,Nb,'B');
    TextColor(3);
    GotoXY(1,1); ClrEOL;
    Write('Введите стоимость перевозки');
    for i:=1 to Na do
        for j:=1 to Nb do begin
            TextColor(3);
            GotoXY(29,1); ClrEOL;
            Write('A',i,' - B',j,'  ');
            Rid(c[i,j],5);
            Print((n1+1)*j+n2-4,i*3+3,1,c[i,j],11);
        end;
(**********************************************************)

    GotoXY(1,1);
    ClrEOL;
    TextColor(14);
    Write('Таблица N1');

    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    {если задача является открытой}
      PrintS(20,1,'Открытая задача (Нажмите любую клавишу)',7);
      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,1,c[i,j],11);
      for i:=1 to Na do
          Print(n2-trunc(ln(A[i])/ln(10)),i*3+4,1,A[i],14);
      for i:=1 to Nb do
          Print(n2+i*(n1+1)-trunc(ln(B[i])/ln(10)),4,1,B[i],14);
      PrintS(20,1,'Открытая задача',7);
    end
      else PrintS(20,1,'Закрытая задача',7);

(************** 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,3,alfa[i],11);
    for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,6,betta[i],11);
    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,'  ',14);
          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,3,alfa[i],11);
          for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,6,betta[i],11);
          Pauza;
    end;
(***********************************************************)

    PrintS(40,1,'Решение оптимально',12);
    PrintS(60,1,'(any key)',6);
    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.


Любезный 06-11-2010 18:30 1536295

Какие строки тебе непонятны?

since12 06-11-2010 20:13 1536358

Цитата:

Цитата since12
Z_a,Z_b:predpr; »

Цитата:

Цитата since12
d:=1=1; »

Цитата:

Цитата since12
inc(k); »

Цитата:

Цитата since12
d:=1=2; »


Любезный 06-11-2010 20:37 1536383

Цитата:

Z_a,Z_b:predpr;
Это объявления переменных. В исходнике чётко сказано:
Type predpr=Array [1..N] of longint;

Значит, это два массива этого типа.
Цитата:

d:=1=1;
d - это булевая переменная. Как известно, 1 всегда равен 1, поэтому результатом такого сравнения является true. Следовательно, это то же самое, что и d:=true

Цитата:

inc(k);
Увеличение переменной на единицу.

Цитата:

d:=1=2;
См. выше. Только с иным результатом.

since12 06-11-2010 22:47 1536485

Цитата:

Цитата since12
Z_a,Z_b:predpr »

получается это массив?

Любезный 06-11-2010 23:20 1536504

Z_a и Z_b - это два однотипных массива.

since12 06-11-2010 23:38 1536511

Цитата:

Цитата since12
Nul(Z_a); Nul(Z_b);
alfa[1]:=0; Z_a[1]:=1; k:=1;
Repeat »

репит действует как?

a_b:=d;

и что делает вот это?

Любезный 07-11-2010 00:08 1536541

Цитата:

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;
Repeat сначала выполняет действия до Until. Затем проверяется условие после Until. Если оно равно false, эти действия повторяются вновь - до тех пор, пока условие после Until не получит true.

Цитата:

a_b:=d;
и что делает вот это?
Смотри исходник.
Цитата:

Function a_b:boolean;
Это выражение находится внутри этой функции. Значит, её результат (промежуточный или окончательный) в этой строке становится равным значению переменной d.

since12 07-11-2010 00:45 1536577

Спасибо большое)пока все понятно)если что напишу еще)

Jenea_oo 04-04-2011 22:49 1651124

Ребят, помогите пожалусто.... Задача такая: нужна в СИ++ написать программу(элементарную), чтобы переводила программку с паскаля на си... т.е у меня есть программа на паскале, я должен запустить программу на СИ, откомпилировать и у меня должна выйти программа уже не на Паскале, а на СИ... Программа на паскале простая... Вывод текста на экран допустим... "Привет всем!".... помогите пожалусто написать эту программку на СИ++.... буду очень благодарен. Зараннее спасибо.

Любезный 05-04-2011 09:39 1651330

Цитата:

Цитата Jenea_oo
я должен запустить программу на СИ, откомпилировать и у меня должна выйти программа уже не на Паскале, а на СИ... »

Сразу видно, что ты не в курсе, что такое "компиляция". А браться за такие вещи, не зная этой элементарщины, имхо, глупо. Тем более за "пожалусто".


Время: 15:22.

Время: 15:22.
© OSzone.net 2001-