Witam
Na lekcje programowania miałem za zadanie napisać program który będzie rozwiązywał układ równań metodą wyznaczników. Mieliśmy to zrobić dla 3 niewiadomych, ale na piątkę mieliśmy to zrobić na tablicach i ograniczyć się do 8 niewiadomych. Napisałem prawie cały kod, ale nie do końca działa. Dla danych:
5a+2b+1c=1
3a+4b+5c=1
9a+8b+1c=1 W oblicza dobrze czyli -108. Jednak Wa, Wb i Wc jest źle. W innych przykładach niekiedy W wychodzi niekiedy nie. Nad kodem siedzę już dobrze 3h i nie potrafię znaleźć błędów. Może ktoś pomoże:
program uklady_rownan;
{Grzegorz Zajac kl 2i}
uses crt;
var kl:char;
tablica:array [1..17,1..17] of integer;
kopia_tablicy:array [1..17,1..17] of integer;
wod:array [1..17] of integer;
pomocnicza:array [1..17] of integer;
w,n,i,j,k,l,licznik,pomoc:integer;
begin
repeat
clrscr;
licznik:=0;
repeat
writeln('Podaj ilosc rownan <2,8>');
readln(n);
until (n>1) and (n<9);
for i:=1 to n do pomocnicza[i]:=1;
for i:=1 to n do wod[i]:=0;
for i:=1 to n do
for j:=1 to n+1 do
begin
writeln('Wpisz liczbe ',i,' w kolumnie ',j);
readln(tablica[i,j]);
writeln;
end;
for i:=1 to n do
for j:=1 to n+1 do kopia_tablicy[i,j]:=tablica[i,j];
writeln('Tablica:');
writeln;
for i:=1 to n do
begin
for j:=1 to n+1 do
begin
if (j=n) then write(tablica[i,j]:3,chr(96+j),'=')
else if (j=n+1) then write(tablica[i,j]:3)
else write(tablica[i,j]:3,chr(96+j),'+');
end;
writeln;
end;
writeln;
writeln('Tablica po przesunieciu:');
writeln;
for i:=1 to n do
begin
tablica[i,n*2]:=tablica[i,n+1];
end;
for i:=1 to n do
for j:=1 to n-1 do
begin
tablica[i,j+n]:=tablica[i,j];
end;
for i:=1 to n do
begin
for j:=1 to n*2 do
begin
if (j=n*2-1) then write(tablica[i,j]:3,chr(96+j),'=')
else if (j=n*2) then write(tablica[i,j]:3)
else write(tablica[i,j]:3,chr(96+j),'+');
end;
writeln;
end;
writeln;
for k:=1 to n do
begin
i:=0; j:=k-1; pomoc:=1;
repeat
inc(i); inc(j);
pomoc:=pomoc*tablica[i,j];
until (i=n);
pomocnicza[k]:=pomoc;
end;
licznik:=n+1;
for k:=1 to n do
begin
i:=1; j:=1+licznik; pomoc:=1;
dec(licznik);
repeat
pomoc:=pomoc*tablica[i,j];
inc(i); dec(j);
until (i=n+1);
pomocnicza[k+n]:=pomoc;
end;
w:=0;
for i:=1 to n do
begin
w:=w+pomocnicza[i];
end;
for i:=n+1 to n*2 do
begin
w:=w-pomocnicza[i];
end;
for l:=1 to n do
begin
for i:=1 to n do for j:=1 to n+1 do tablica[i,j]:=0;
for i:=1 to n do for j:=1 to n+1 do tablica[i,j]:=kopia_tablicy[i,j];
for i:=1 to n do tablica[i,l]:=tablica[i,n+1];
for i:=1 to n do
begin
tablica[i,n*2]:=tablica[i,n+1];
end;
for i:=1 to n do
for j:=1 to n-1 do
begin
tablica[i,j+n]:=tablica[i,j];
end;
for k:=1 to n do
begin
i:=0; j:=k-1; pomoc:=1;
repeat
inc(i); inc(j);
pomoc:=pomoc*tablica[i,j];
until (i=n);
pomocnicza[k]:=pomoc;
write(pomocnicza[k],' ');
end;
licznik:=n+1;
for k:=1 to n do
begin
i:=1; j:=1+licznik; pomoc:=1;
dec(licznik);
repeat
pomoc:=pomoc*tablica[i,j];
inc(i); dec(j);
until (i=n+1);
write(pomocnicza[k],' ');
pomocnicza[k+n]:=pomoc;
end;
for i:=1 to n do
begin
wod[i]:=wod[i]+pomocnicza[i];
end;
for i:=n+1 to n*2 do
begin
wod[i]:=wod[i]-pomocnicza[i];
end;
end;
{_______WYSWIETLANIE_WYNIKOW_______}
writeln('W= ',w);
for i:=1 to n do
begin
writeln('W',chr(96+i),'= ',wod[i]);
end;
if w<>0 then
for i:=1 to n do writeln(chr(96+i),'= ',wod[i] div w)
else if w<>0 then writeln('Brak rozwiazan');
writeln;
writeln('Jesli chcesz wyjsc nacisnij ESC, jesli nie nacisnij dowlony klawisz...');
kl:=readkey;
until (kl=#27);
end.
P.s. Program nie jest dokończony :P Chciałbym tylko wiedzieć gdzie są błędy :/