Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод процедуры с Pascal на C++

Ответить
Настройки темы
C/C++ - Перевод процедуры с Pascal на C++

Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 29-03-2009
Описание: Тег [code]...[/code]
помогите пожалуйста с переводом вот этой процедурки
Код: Выделить весь код
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.Перевести процедуру нужно на с++

Отправлено: 13:28, 29-03-2009

 

Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:22, 30-03-2009 | #22


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить 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


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:45, 30-03-2009 | #24


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Snake750:
вот весь код »
Не знаю, не знаю, на этом этапе всё компилируется без ошибок. Возможно потому, что функции ни откуда не вызываются и не используются.
Код: Выделить весь код
...
int _tmain(int argc, _TCHAR* argv[])
{
   // Где-то здесь должны вызываться ваши функции
   system("cls");
   getch();

  return 0;
}
..

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:54, 30-03-2009 | #25


Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


Код: Выделить весь код
floor(log(p[i][j]) / log(10))
замени на :
Код: Выделить весь код
floor(log((double)p[i][j]) / log(10.0))
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:37, 30-03-2009 | #26


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить 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


Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


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

Отправлено: 20:57, 30-03-2009 | #28


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


microsoft visual studio 2008

Отправлено: 21:02, 30-03-2009 | #29


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата 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, Там не от среды, там просто ошибки синтаксиса. Сишный вперемешку с Паскалем.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 21:14, 30-03-2009 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод процедуры с Pascal на C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход