програма вичисляє детермінант , як випадково заданої матриці ,так і введену користувачем . максимально можна ввести матрицю 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.