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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2015, 00:06   #1
Gxxx28
 
Регистрация: 18.10.2013
Сообщений: 8
Вопрос Перевод программы " Метод главных элементов для решения системы уравнений" Pascal на Си++

Паскаль:
Код:
Program elem_princ;

Type masiv=array[1..5,1..5] of real;
var a,b,a1,a2:masiv;
    ka,x:array[1..10] of real;
nu:array[1..10] of byte;
    i,j,n,m,cod:integer;max,s,d:real;
  c,ex,k1:string;
  mu:set of byte;
  ind,i1,j1,m1,n1,z,k,p,q,z1,num:byte;
  
procedure vivod_mas(x:masiv;n,m:integer);
var i,j:byte;
begin
writeln('Массив:');
for i:=1 to n do
begin
  write('|');
  for j:=1 to m do
  write(x[i,j]:5:2,' ');
  writeln(' |');
end;

end;
BEGIN
    
    write('Число строк n=');
    readln(n); n1:=n;
    write('Число столбцов m=');

    readln(m); m1:=m;c:='';ex:='';

    for i:=1 to n do begin
    str(i,k1); 
c:=c+k1;
end; 
mu:=[];

    writeln('Введите матрицу:');
    for i:=1 to n do
    for j:=1 to m do
    begin
        write('A[',i,',',j,']=');
        readln(A[i,j]);
    end;

    vivod_mas(a,n,m); b:=a;
while n>1 do
  begin
    max:=abs(a[1,1]); p:=1;q:=1;
    for i:=1 to n do
    for j:=1 to m-1 do
    if abs(a[i,j])>max then
    begin
        max:=abs(a[i,j]);
        p:=i;
        q:=j;
    end;
    writeln('главный элемент a[',p,',',q,']=',a[p,q]:2:2);


  inc(ind);
  ex:=ex+c[q];
  for z1:=1 to m do ka[z1]:=a[p,z1];z1:=1;
  for j1:=1 to m1 do
  if j1 in mu then a1[ind,j1]:=0 else begin
  a1[ind,j1]:=ka[z1];inc(z1);end;
  val(c[q],num,cod);delete(c,q,1);
  mu:=mu+[num];

    for i:=1 to n do
    for j:=1 to m do
    b[i,j]:=a[i,j]-(a[i,q]*a[p,j])/a[p,q];
    vivod_mas(b,n,m);
    for i:=p to n-1 do
    for j:=1 to m do
    begin
        s:=b[i,j];
        b[i,j]:=b[i+1,j];
        b[i+1,j]:=s;
    end;
    n:=n-1;
    if m>2 then
    begin
        for i:=1 to n do
        for j:=q to m-1 do
        begin
          d:=b[i,j];
          b[i,j]:=b[i,j+1];
          b[i,j+1]:=d;
        end;
        m:=m-1;
    end;
    vivod_mas(b,n,m);
    for i:=1 to n do
    for j:=1 to m do
    a[i,j]:=b[i,j];
  end;
writeln;

  z1:=1;
  for j1:=1 to m1 do
  if j1 in mu then a1[n1,j1]:=0 else begin
  a1[n1,j1]:=a[1,z1];inc(z1);end;

ex:=ex+c[1];
writeln;
writeln('Массив из главных строк:');
vivod_mas(a1,n1,m1);
writeln;


for i:=1 to n1 do
  begin
    val(ex[i],nu[i],cod);
  
  end;

for i:=1 to n1 do
for j:=1 to m1 do
b[i,j]:=a1[i,j]/a1[i,nu[i]];


  a2:=b;
writeln;
writeln('Массив ответов:');
for k:=n1 downto 2 do begin
    for i:=1 to k-1 do
    for j:=1 to m1 do
    a2[i,j]:=b[i,j]-b[k,j]*b[i,nu[k]];
    b:=a2;end;
    vivod_mas(a2,n1,m1);
writeln;
writeln('Решение:');
    for j:=1 to n1 do
      for i:=1 to n1 do
      if a2[i,j]<>0 then x[j]:=a2[i,m1];

    for i:=1 to n1 do
    writeln('x[',i,']=',x[i]:6:2);

END.
Пример:
n=3; m=4;
A[1,1]=2
A[1,2]=-1
A[1,3]=-1
A[1,4]=2
A[2,1]=1
A[2,2]=4
A[2,3]=-2
A[2,4]=10
A[3,1]=1
A[3,2]=-2
A[3,3]=2
A[3,4]=10

Решение:
x[1]= 6.00
x[2]= 4.00
x[3]= 6.00
Gxxx28 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибки в Паскале, по теме: " Методы решения алгебраических и трансцендентных уравнений" Anton94.by Помощь студентам 0 04.12.2011 15:31
Исправить ошибки в Паскале, по теме: " Методы решения алгебраических и трансцендентных уравнений" Anton94.by Помощь студентам 1 02.12.2011 17:26
Метод перебора для нахождения решения "Судоку" ДЖО Помощь студентам 23 04.06.2008 22:29
помогите с задачей "методы решения уравнений" kano Паскаль, Turbo Pascal, PascalABC.NET 3 22.02.2008 20:52