Pozdrav,
ovako : dobio sam zadatak da uradim program koji računa n jednačina sa n nepoznatih u Pascalu. Problem dolazi kod računanja determinante kada je format veći od 3. To ne bi bio problem da je Turbo Pascal kakav razvijen programski jezik (ne pričam o Delphi-u). Ovako ne znam gdje mi je greška u programu. Free Pascal mi izbacuje grešku "exitcode:201" a Lazarus mi izbacuje Error:External : SIGSEGv.
Bilo bi lijepo kad bi ko bacio oko na ovaj zadatak i pokušao naći grešku. Meni je više pukao film koliko ga radim.
program NjednacinaNnepoznatih(input, output);
uses crt;
const MAX = 10; //Maksimalan broj jednacina
type Vektor = array [1 .. MAX] of real;
Matrica = array [1 .. MAX , 1 .. MAX] of real;
var A : Matrica;
B : Vektor;
i,j,n : integer;
procedure UnesiVektor(Ime : Char ; _n : integer ; var _vektor : Vektor);
begin
for i:= 1 to _n do
begin
write(Ime,'[',i,']= ');
read(_vektor[i]);
end;
end;
procedure UnesiMatricu(Ime : char ; _n : integer ; var _matrica : Matrica);
begin
for i:= 1 to _n do
for j:= 1 to _n do
begin
write(Ime,'[',i,',',j,']= ');
read(_matrica[i,j]);
end;
end;
procedure IspisiMatricu(_matrica : Matrica ; _n : integer);
begin
for i:=1 to _n do
begin
writeln;
for j:=1 to _n do
begin
if (j=1) then write('| ');
write(_matrica[i,j]:7:2,' ');
if (j=n) then write(' |');
end;
end;
end;
function Zamijeni(k,_n : integer ; _vektor : Vektor ; _matrica : Matrica) : Matrica;
var PRV : real;
X : Matrica;
begin
for i:=1 to n do
for j:=1 to n do
begin
X[i,j]:= _matrica[i,j];
PRV:= _vektor[i];
_vektor[i]:= X[i,k];
X[i,k]:= PRV;
end;
Zamijeni:=X;
end;
function Minor(_n : integer ; _matrica : Matrica ; ix,jx : integer) : Matrica;
var X : Matrica;
p,q : integer;
begin
p:=0;
q:=0;
for i:=1 to _n do
begin
if i<>ix then p:=p+1;
q:=0;
for j:=1 to _n do
begin
if j<>jx then q:=q+1;
if (i<>ix) and (j<>jx) then
begin
X[p,q]:=_matrica[i,j];
end;
end;
end;
Minor:=X;
end;
function power(xx,yx : integer) : real;
var rez : real;
begin
rez:= 1;
for i:=1 to yx do
begin
rez :=rez * xx;
end;
power:=rez;
end;
function Determinanta(_matrica : Matrica ;_n : integer) : real;
var rezultat : real;
min : Matrica;
begin //Lazarus prijavljuje grešku u ovoj liniji ako je n>3
rezultat:=0;
for i:= 1 to _n do
for j:= 1 to _n do
begin
min[i,j]:=_matrica[i,j];
end;
if (n= 1) then
begin
rezultat:= min[1,1]
end
else if (n= 2) then
begin
rezultat:= (min[1,1]*min[2,2])-(min[2,1]*min[1,2])
end
else if (n= 3) then
begin
rezultat:= (min[1,1]*min[2,2]*min[3,3])+(min[1,2]*min[2,3]*min[3,1])+(min[1,3]*min[2,1]*min[3,2])-(min[1,3]*min[2,2]*min[3,1])-(min[1,2]*min[2,1]*min[3,3])-(min[1,1]*min[2,3]*min[3,2]);
end
else if (n>3) then
begin
for i:=1 to _n do
begin
rezultat:=rezultat*power(-1,i)*_matrica[i,1]*Determinanta(Minor(n,_matrica,i,1),n-1);
end;
end;
determinanta:=rezultat;
end;
var test : Matrica;
begin
clrscr;
writeln('Unesi n: ');read(n);
UnesiMatricu('A',n,A);
IspisiMatricu(A,n);writeln;writeln;
test:=minor(n,A,1,1); //Testiranje minora
IspisiMatricu(test,n-1);
writeln('Determinanta matrice je',Determinanta(A,n):7:2);
readkey
end.
Hvala.