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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.05.2017, 15:04   #1
Riggar
Новичок
Джуниор
 
Регистрация: 03.05.2017
Сообщений: 2
По умолчанию Нужна помощь с переводом в С++

Помогите перевести программу из Pascal, хотя бы часть её, что бы было на что упираться, или же конвертор из Pascal в C++, не могу никак найти.

Код:
const n=2;

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

const
{
// это из примера-образца
     A:TAr2=  (
                (1/2,1/3),
                (1/6,1/3)
              );

     C:TAr1= (1,1/2);

     Abis:TAr2 =    (
                      (1/3,1/4),
                      (1/3,1/4)
                    );
     }               
     
// это из контрольного примера №6
     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);
// вывод матрицы типа TAr1
 var i:integer;
begin
  for i := 1 to n do begin
      write (ar[i]:4:4,' ');
  end;
  writeln;  
end;//VivodVektora

procedure VivodMatricy(ar:TAr2);
// вывод матрицы типа 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:4,' ');
      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;
// нахождение обратной матрицы для ar
 var i,j:integer;
 
begin

// вычисляем обратную матрицу для Y
// с помощью алгебраических дополнений
// теория по ссылке:
//http://mathprofi.ru/kak_naiti_obratnuyu_matricu.html
// для этого
//1)находим определитель матрицы Y в переменную opred
//2) Находим матрицу миноров MM
//3) Находим матрицу алгебраических дополнений MAD
//4) Находим транспонированную матрицу алгебраических дополнений. TMAD
//5) и наконец находим обратную для Y матрицу B = (1/|opred|)*TMAD
 
//1)
opred:=determ(ar);
if opred=0 then begin
   writeLn('определитель = 0:');
   writeLn('обратной матрицы НЕ существует');
   writeLn('решение отсутствует');   
   Exit;
end else begin   
   writeLn('определитель:');
   writeLn (opred:4:4,' ');
end;

//2) получение 2-мерной матрицы миноров 
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);

//3) матрица алгебраических дополнений
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);

//4) Находим транспонированную матрицу алгебраических дополнений. TMAD
// то есть строки делаем столбцами
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);

//5) Находим матрицу B
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);

//readln;// останов

// вычисляем Y=I-A

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); // вычисляем обратную матрицу для Y
writeLn('Матрица B, обратная для Y:');
VivodMatricy(B);


// умножаем матрицу B на вектор C и получаем вектор X
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);

// определяем эффективность экономики
//Экономика, характеризуемая матрицей A и векторами  X и C , называется высокоэффективной, если A*X<=C . 
// Определяем A*X
// умножаем матрицу A на вектор X и получаем вектор AX
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;
//////////////////
// вычисляем Y2=I-Abis

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); // вычисляем обратную матрицу для Y2
writeLn('Матрица B2, обратная для Y2:');
VivodMatricy(B2);

// умножаем матрицу B2 на вектор C и получаем вектор Xbis
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.
Riggar вне форума
Старый 08.05.2017, 15:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

http://www.programmersforum.ru/showthread.php?t=307928
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь tango1988 HTML и CSS 1 17.11.2014 17:46
Обедающие философы в windows forms. Очень нужна помощь с переводом с Delphi в C#. SholpanB C# (си шарп) 1 03.12.2013 19:18
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12