Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2017, 17:31   #1
Valkyrie123
Новичок
Джуниор
 
Регистрация: 03.05.2017
Сообщений: 2
По умолчанию Перевод кода с PascalABC на С++

Помогите пожалуйста перевести код, сам код рабочий. Есть части кода на C++, но я не знаю точно ли они подойдут к коду на паскале.
В паскале расчитывается вычитание матриц и перевод их в обратную матрицу, вычитание вектора из матрицы, умножение матрицы на вектор.
Код:
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;
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;
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;
  }
Valkyrie123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод кода q123ser87 Помощь студентам 3 05.06.2012 15:35
перевод кода на С PhysX Помощь студентам 0 02.12.2011 17:46
ПЕРЕВОД КОДА 2008kedr2008 Помощь студентам 0 25.11.2010 17:33
Перевод кода zmey31313 Фриланс 1 01.01.2010 21:49