Wątek przeniesiony 2018-10-25 19:21 z Delphi i Pascal przez furious programming.

Obliczanie wyznacznika macierzy – program wyświetla liczby z kosmosu

0

Cześć,
napisałam program wyliczający wyznacznik macierzy. Problem w tym, że nie oblicza on rzeczywistego wyznacznika tylko wyświetla liczby z kosmosu . Czy mogę prosić o pomoc w znalezieniu błędu? Z góry dziękuję.

program wyznacznik;
uses crt;
type tab=array[0..10] of array[0..10] of integer;
var
a,b:tab;
i,j:integer;

procedure wyswietl(d:tab);
var
i,j:integer;
BEGIN
  for i:=0 to 2 do
  BEGIN
    for j:=0 to 2 do
    BEGIN
      if d[i,j]>=10 then
      write(d[i,j],' ')
      else
      write(d[i,j],'  ');
    END;
    writeln;
  END;
END;

BEGIN
  clrscr;
  randomize;
  for i:=0 to 2 do
  BEGIN
    for j:=0 to 2 do
    BEGIN
      a[i,j]:=random(10);
      b[i,j]:=random(10);
    END;
  END;
  writeln('Tablica A :');
  wyswietl(a);
  writeln;
  writeln('Tablica B :');
  wyswietl(b);
  writeln;

  BEGIN
    writeln('Wyznacznik Macierzy A:  ');
    writeln(((a[0,0]*a[1,1]*a[2,2])+(a[1,0]*a[2,1]*a[0,2])+(a[2,0]*a[0,1]*a[1,2]))-((a[0,2]*a[1,1]*a[2,0])-(a[1,2]*a[2,1]*a[0,0])-(a[2,2]*a[0,1]*a[1,0])));
    writeln('Wyznacznik Macierzy B:  ');
    writeln(((b[0,0]*b[1,1]*b[2,2])+(b[1,0]*b[2,1]*b[0,2])+(b[2,0]*b[0,1]*b[1,2]))-((b[0,2]*b[1,1]*b[2,0])-(b[1,2]*b[2,1]*b[0,0])-(b[2,2]*b[0,1]*b[1,0])));
    readln();
    end;

END.
0

Brzydki ten kod i nieczytelny – bardzo źle go formatujesz… Nie pisz słów kluczowych dużymi literami, bo to strasznie razi w oczy i za bardzo przyciąga uwagę. Wszystkie keywordy pisz wyłącznie małymi literami, a identyfikatory – np. WriteLn – pisz w stylu PascalCase. I nie stroń od wcięć i białych znaków do otaczania operatorów.

procedure Wyswietl(d: tab);
var
  i, j: Integer;
begin
  for i := 0 to 2 do
  begin
    for j := 0 to 2 do
      Write(d[i, j]:3);
      
    WriteLn;
  end;
end;

Prawda, że czytelniej? Zwróć też uwagę na brak warunku – zamieniłem go na frazę :3, która służy do określania szerokości pola. Wartości węższe niż określona szerokość pola wyrównywane są do prawej jego strony.

Co do głównej części programu – wydziel to do osobnej funkcji, która w parametrze przyjmie macierz, obliczy co ma obliczyć i zwróci wynik w rezultacie. Dzięki temu będziesz mogła z tej funkcji skorzystać dwa razy, do obliczenia wyznacznika macierz a i b. Tylko użyj do tego pętli.

Nie rozumiem też dlaczego zadeklarowałaś tab jako macierz macierzy i dlaczego posiada ona wymiary 11x11 pól, skoro w pętlach iterujesz od 0 do 2. Macierz dwuwymiarową można zadeklarować w sposób krótszy:

type
  Tab = array [0 ..10, 0 .. 10] of Integer;

1 użytkowników online, w tym zalogowanych: 0, gości: 1