Macierz odwrotna do kwadratowej 2x2[pascal]

Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz odwrotna do kwadratowej 2x2[pascal]

Post autor: Natasha »

Napisałam program w pascalu, jak w temacie, ale nie liczy poprawnie macierzy odwrotnej:

Kod: Zaznacz cały

program macierz_odwrotna_2x2;
var
i,j:integer;
A,B,C:array[1..2,1..2] of real;

begin
for i:=1 to 2 do
for j:=1 to 2 do
begin
writeln('A[',i,',',j,']: ');
readln(A[i,j]);
end;

begin
writeln('nasza pierwotna macierz 2x2');
for i:=1 to 2 do
begin
  for j:=1 to 2 do
   write(A[i,j]:0:0,' ');
writeln;
end;
writeln;
for i:=1 to 2 do
  for j:=1 to 2 do

  begin
B[1,1]:=A[2,2];
B[1,2]:=-A[1,2];
B[2,1]:=-A[2,1];
B[2,2]:=A[1,1];
end;
writeln;

for i:=1 to 2 do
for j:=1 to 2 do
begin
C[i,j]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[i,j];
if (A[1,1]*A[2,2]-A[1,2]*A[2,1])=0 then writeln(' macierz A nie jest odwracalna')
else
writeln('macierz odwrotna');
for i:=1 to 2 do
begin
  for j:=1 to 2 do
   write(C[i,j]:0:0,' ');
   writeln;
end;
   end;
   readln;
    end;
end.
Chodzi mi glownie o poprawne zadeklarowanie tych wszystkich zmiennych, działań itp. czyli o linijki 26-39. Proszę o pomoc. Macierz odwrotną do kwadratowej 2x2 liczyłam z
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Macierz odwrotna do kwadratowej 2x2[pascal]

Post autor: kadiii »

Pierwsza rzecz to czytam podpowiedzi kompilator(chwil, chwila gdzieś juz o tym wspominałem ). Druga rzecz - wcięcia! Może i robisz jakieś wciecia, ale są one nieadekwatne i zamiast ci pomagać, utrudniają sprawę. NIe widzisz gdzie kończy sie jedna pętla i gdzie zaczyna druga - to kluczowy błąd w twoim kodzie. Ponadto jakbyś to juz widziała to odrazu zrozumiałabyś co od ciebie chce kompilator - zmienianie zmiennej sterującej wewnątrz pętli(mówiąc prościej pętla wewnętrzna ma takie same nazwy zmiennych co petla zewnętrzna).
Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz odwrotna do kwadratowej 2x2[pascal]

Post autor: Natasha »

Jak mam czytać podpowiedzi kompilatora jak tam nie wyskakują żadne błędy??? No dlatego się pytam, jak napisać ten program żeby bylo wszystko ok. :)

-- 3 maja 2010, 09:08 --

Teraz chodzi mi o ten fragment

Kod: Zaznacz cały

begin
C[i,j]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[i,j];
if (A[1,1]*A[2,2]-A[1,2]*A[2,1])=0 then writeln(' macierz A nie jest odwracalna')
else
bo tu coś jest nie tak.

Jeśli zapisze tak:

Kod: Zaznacz cały

begin
C[1,1]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[1,1];
C[1,2]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[1,2];
C[2,1]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[2,1];
C[2,2]:=(1/(A[1,1]*A[2,2]-A[1,2]*A[2,1]))*B[2,2];
to dla wyznaczników roznych od zera liczy się poprawnie, ale dla det=0 nei reaguje.
miodzio1988

Macierz odwrotna do kwadratowej 2x2[pascal]

Post autor: miodzio1988 »

A nie widzisz tutaj dzielenia? Gdy wyznacznik jest równy zero to przez co dzielisz? No i instrukcje warunkową to warto dać zanim program będzie wykonywał niektóre operacje (np dzielenie)
ODPOWIEDZ