Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
вичисление определителя матрици максимального порядка
програма вичисляє детермінант , як випадково заданої матриці ,так і введену користувачем  . максимально можна ввести матрицю 1000 на 1000 але навіть при 250 на 250 детермінант стає більшим за всі межі при рандомному заданні 10 , а при 100 - 200 максимум . був поставлений слабенький "захист від дурня" . детермінант обчислюе без помилок , - практично не знищенна , але при вводі  прорядку  більше 250 - зазвичай вилітає - детермінінт перевищує всі межі (такщо навіть якщо силино захотіти - неможлово знайти детермінант матриці порядку білошого 250).

Добавлено (18.03.13, 21:31)
---------------------------------------------
program pz2;

{афтор програми - Verhovny Menko

 дата создания и тестирования - 18:35  18.03.2013

 если кому понадоблюсь - звонить в рельсу ну а если рельси далеко -

 можна в колокол ))) skype - makc999ify }

uses crt;

const q=1000;

var por,a,b,c,d ,i,n: integer;

    g:array[1..q,1..q] of real;

    h:text;

    l,p:string; x,z,det :real;

{===========================================}

procedure if_aa_0;

begin

 b:=0;

 for c:=a+1 to por do if g[c,a] <>0 then

 begin

  for d:=1 to por do

  begin

   z:=g[a,d];

   g[a,d]:=g[c,d];

   g[c,d]:=z;

  end;

  det:=-det;

  exit;

 end

 else b:=1;

end;

{===========================================}

procedure vvod_file;

begin

 assign(h,'d:\lol.txt');

 rewrite(h);

 L:='stroka ';

 for i:=1 to por do

 begin

  writeln(h,l,i);

  for n:=1 to por do write(h,g[i,n]:2:0,' ');

  writeln(h,'');

 end;

close(h);

end;

{===========================================}

procedure pk;

begin

 {заполнение матрици и текстового файлa}

 

 randomize;

 for a:=1 to por do

 begin

  for b:=1 to por do g[a,b]:=random(100);

 end;

 

end;

{===========================================}

procedure vr;

begin

 for a:=1 to por do

 begin

  for b:=1 to por do

  begin

   writeln('введите елемент [',a,',',b,']');

   readln(g[a,b]);

  end;

 end;

end;

{===========================================}

procedure opredel;

begin

a:=1;det:=1;

while a <  por do

begin

 

  for i:=a+1 to por do

  begin

 

   if g[a,a]=0 then if_aa_0;  //поскольку на 0 делить нельзя - меняем с 1-ой оставшиеся строки нужний елемент которой <> 1

   if b=1 then x:=0 else     //если нужний нам елемент нижних строк = 0 то Х:=0 - всеравно определитель бyдeт = 0;

   x:=g[i,a]/g[a,a];

   for n:=a to por do g[i,n]:=g[i,n]-x*g[a,n];

 

  end;

 

a:=a+1;

end;

 

//конечний подщот епределителя

for i:=1 to por do det:=det*g[i,i];

end;

{===========================================}

begin

clrscr;

writeln('1 - ввести елементи в ручну (порядок до 6) 2 - задать компютером');

readln(b);

if (b <>1) and (b <> 2) then

begin

writeln('ошибка ввода !!!');

readln;

halt;

end;

writeln('введите порядок матрици');

readln(por);

if b=1 then vr else

if b=2 then pk;

 

 

vvod_file;  {запись матрици у файл}

 

opredel; // нахождение детерминанта

 

append(h);

writeln(h,'DETERMINANT = ',det:15:15);

close(h);

 

writeln('определитель= ');

writeln(det:15:15);readln;

writeln('созданая матрица и определитель находятся по пути  d:\lol.txt');

readln;

end.


Verhovny Menko
1 | Автор: Verhovny_Menko | 2013-03-18, 21:31   |  Репутация: [ + 7 ]
Спасибо
2 | Автор: Артем54 | 2017-04-13, 18:53   |  Репутация: [ + 0 ]
  • Страница 1 из 1
  • 1
Поиск: