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

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

Valkyrie123 06-05-2017 16:57 2734607

Перевод программы c Pascal ABC на С++
 
Программа на паскале рабочая. Есть как на С++ будут вводиться и выводится матрицы и вектора, но как всё это объеденить я не знаю. С с++ не знакома. Или подскажите какой программой можно перевести самой. Буду очень благодарна
Прога на паскале
Код:

const n=2;
  type TAr2=array[1..n,1..n] of real;
        TAr1=array[1..n] of real;
const           

//
 A:TAr2=  (
            (1/4,1/8),
            (1/5,2/5)
          );

 C:TAr1= (1,2);

 Abis:TAr2 =    (
                  (1/4,1/3),
                  (1/4,1/3)
                );


 l:TAr2 =      (
                (1,0),
                (0,1)
                );{еденичная матрица}

var i,j:integer;
    X,AX,Xbis:TAr1;
    Y,Y2,MM,MAD,TMAD,B,B2:TAr2;
    opred:real;
    kol:integer;
procedure VivodVektora(ar:TAr1);

var i:integer;
begin
  for i := 1 to n do begin
      write (ar[i]:4:1,' ');
      end;
      writeln; 
end;//VivodVektora
procedure VivodMatricy(ar:TAr2);
  var i,j:integer;
  begin
    for i := 1 to n do begin
      for j := 1 to n do begin
          write (ar[i,j]:4:1,' ');
  end;
  writeln;
 end;
 end;//VivodMatricy
Function determ(ar:TAr2):real;
 var i,j:integer;
begin
Result:=(Ar[1,1]*Ar[2,2])-(Ar[1,2]*Ar[2,1]);
 end;
Function ObrMatrica(ar:TAr2):TAr2;
var i,j:integer;
 begin
  opred:=determ(ar);
    if opred=0 then begin
      writeLn('определитель = 0:');
      writeLn('обратной матрицы НЕ существует');
      writeLn('решение отсутствует'); 
    Exit;
  end else begin 
    writeLn('определитель:');
    writeLn (opred:4:4,' ');
  end;
 MM[1,1]:= ar[2,2];
 MM[2,2]:= ar[1,1];
 MM[1,2]:= ar[2,1];
 MM[2,1]:= ar[1,2];
  writeLn('Матрица MM:');
  VivodMatricy(MM);
MAD[1,1]:=MM[1,1];
MAD[2,2]:=MM[2,2];
MAD[1,2]:= - MM[1,2];
MAD[2,1]:= - MM[2,1];
writeLn('Матрица MAD:');
VivodMatricy(mad);

for i := 1 to n do begin
 for j := 1 to n do begin
    tmad[j,i]:=mad[i,j];
 end;
end;
writeLn('Матрица TMAD:');
VivodMatricy(Tmad);

for i := 1 to n do begin
  for j := 1 to n do begin
      Result[i,j]:=(1/abs(opred))*Tmad[i,j];
  end;
end;
end;//ObrMatrica
begin

writeLn('Исходные данные:');
writeLn('Матрица A:');
VivodMatricy(a);
writeLn('Матрица l:');
VivodMatricy(l);
writeLn('Матрица A":');
VivodMatricy(Abis);
writeLn('Вектор С:');
VivodVektora(C);

for i := 1 to n do begin
  for j := 1 to n do begin
    Y[i,j]:=l[i,j]-A[i,j];
  end;
end;
writeLn('Матрица Y:');
VivodMatricy(Y);
B:=ObrMatrica(Y);
writeLn('Матрица B, обратная для Y:');
VivodMatricy(B);

for i := 1 to n do begin
    X[i]:=0;
for j := 1 to n do begin
    X[i]:=X[i]+(B[i,j]*C[j]);
  end;
end;
writeLn('вектор X:');
VivodVektora(X);

for i := 1 to n do begin
    AX[i]:=0;
for j := 1 to n do begin
    AX[i]:=AX[i]+(A[i,j]*X[j]);
  end;
end;
kol:=0;
for i := 1 to n do begin
  if AX[i]<=C[i] then begin
  kol:=kol+1; 
  end;
end;
if kol=n then begin
  writeLn('Экономика, характеризуемая матрицей A и векторами  X и C - высокоэффективная');
end else begin
 writeLn('Экономика, характеризуемая матрицей A и векторами  X и C - НЕ является высокоэффективной'); 
 end;
for i := 1 to n do begin
    for j := 1 to n do begin
        Y2[i,j]:=l[i,j]-Abis[i,j];
    end;
end;
writeLn('Матрица Y2:');
VivodMatricy(Y2);
B2:=ObrMatrica(Y2);
writeLn('Матрица B2, обратная для Y2:');
VivodMatricy(B2);
for i := 1 to n do begin
    Xbis[i]:=0;
      for j := 1 to n do begin
          Xbis[i]:=Xbis[i]+(B2[i,j]*C[j]);
          end;
end;
writeLn('вектор X":');
VivodVektora(Xbis); 
end.

Вот что есть на С++. Но я не уверена на сколько это правильно

Код:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

//функция для ввода матрицы
double ** inputm(int n, int m)
{int i,j;
double **a;
a=new double *[n];
  if(a==NULL){cout<< "\n Не хватает оперативной памяти под строки";
          exit(1);
        }
for(i=0;i< n;i++)
 {a[i]=new double [m];
  if(a[i]==NULL){cout<< "\n Не хватает оперативной памяти под столбцы";
                exit(1);
                }
}
for(i=0;i< n;i++)
 {cout<< "\n Вввести "<< i<<" строку \n";
  for(j=0;j< m;j++)
 cin>>a[i][j];
  }
return a;
}

//функция для ввывода матрицы
void outputm(double **a, int n, int m)
{int i,j;
  for(i=0;i<=n;i++)
    {cout<< endl;
      for(j=0;j<=m;j++)
        cout<< setw(10)<< a[i][j];
      }
 }

//функция для ввода вектора
double * inputv(int n)
{int i;
  double * a;
  a=new double[n];
  if(a==NULL){cout<<"\n Не хватает оперативной памяти под вектор";
          exit(1);
              }
 for(i=0;i< n;i++)
  cin>>a[i];
  return a;
}

//функция для вывода вектора
 void outputv(double *a,int n)
  {int i;
    for(i=0;i< n;i++)
      {if(i%7==0) cout<< endl;
        cout<< setw(10)<< a[i];
      }
  }

//транспонирование матриц
double** transp(double** a,int n, int m)
  {int i,j;
    double **b;
    b=new double *[n];
    if(b==NULL){cout<< "Нет ОП \n";
          exit(1);
                }
      for (i=0;i< n;i++)
          {b[i]=new double[m];
          if(b[i]==NULL){cout<< "Нет ОП \n";
                  exit(1);
        }
  }
 for (i=0;i< n;i++)
  for (j=0;j< m;j++)
      b[j][i]=a[i][j];
    return b;
  }



Время: 22:44.

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