Problem u radu sa matricama u Pascalu


#1

Pitanje ili opis problema

[koristite ovaj template za postavljanje tema u kategoriji Pitanja i problemi]

Imam problem oko ucitavanja matrice u Pascalu. Napisao sam kod za ovaj zadatak: https://petlja.org/biblioteka/r/problemi/takmicenja-srednje-skole/02_transformacija_matrice . Iz nekog razloga mi uvek kaze “Illegal qualifier” za svaku naredbu koja sadrzi a[i,j] na primer.
Kod:

Program yerna;
var n,i,j:longint;
a,b:array of longint;
function jednako(p,l:array of longint):longint;  _//ova funkcija sluzi za brojanje razlicitih elemenata od matriceA od B u koju treba matrica A da se transformise._
    begin
        jednako:=0;
        for i:=1 to n do
            for j:=1 to n do
                if p[i,j] <> l[i,j] then 
                    jednako:=jednako+1;
    end;
procedure rotate90(a:array of longint);
    var c:array of longint;
        begin
            setlength(c, n);
            for i:=1 to n do 
                setlength(c[i], n);
            for i:=1 to n do
            for j:=1 to n do
                a[i,j]:=c[i,j];
            for i:=1 to n do
            for j:=n downto 1 do
                a[i,j]:=c[(n+1-j),i];
        end;
begin
    read(n);
    if n>0 then
        begin
            setlength(a, n);
            for i:=1 to n do 
                begin
                    setlength(a[i], n);
                    setlength(b[i], n);
                end;
        end;
    for i:=1 to n do
    for j:=1 to n do
        read(a[i,j]);
    for i:=1 to n do
    for j:=1 to n do
        read(b[i,j]);
    if jednako(a,b)=0 then 
        write(0)
    else
        begin
        for i:=1 to 5 do
            if jednako(a,b) < (n*n/4) then
                begin
                    write(jednako(a,b));
                    break;
                end
            else
                rotate90(a);
        end;
end.

Compile log:
Free Pascal Compiler version 3.0.4 [2018/04/10] for x86_64
Copyright © 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling jdoodle.pas
jdoodle.pas(10,24) Error: Illegal qualifier
jdoodle.pas(10,34) Error: Illegal qualifier
jdoodle.pas(19,17) Error: Type mismatch
jdoodle.pas(22,21) Error: Illegal qualifier
jdoodle.pas(22,29) Error: Illegal qualifier
jdoodle.pas(25,21) Error: Illegal qualifier
jdoodle.pas(25,35) Error: Illegal qualifier
jdoodle.pas(35,21) Error: Type mismatch
jdoodle.pas(36,31) Warning: Variable “b” of a managed type does not seem to be initialized
jdoodle.pas(36,21) Error: Type mismatch
jdoodle.pas(41,18) Error: Illegal qualifier
jdoodle.pas(44,18) Error: Illegal qualifier
jdoodle.pas(58,4) Fatal: There were 11 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

https://petlja.org/biblioteka/r/problemi/takmicenja-srednje-skole/02_transformacija_matrice


#2

Dugo nisam radio sa Pascal-om, ali na prvi pogled mi

a,b:array of longint;

izgleda kao da se promenljive a i b deklarišu kao (jednodimenzioni) nizovi longint-ova. Koliko sam razumeo tvoj program (iz poziva setlength(a[i], n)), koristiš ih kao nizove nizova (predstavljaju matrice, gde je a[i] niz koji sadrži i-ti red matrice a), tako da bi ispravan tip verovatno bio

a,b: array of array of longint;

Napomena: nisam siguran da li u tom slučaju elementu na (i,j) možeš da pristupaš kao a[i,j] ili a[i][j] – možda neko ko bolje zna Pascal može da pomogne ovde.