program harmadik_hf; {Ismert hibak: 1. A kimenet matrix elemei nullak; 2. A felso3szog-re "Runtime error 201 at 0C44:058D"-hibauzenettel leall; 3. Nem biztos, hogy a harmadik eljaras hianyik, azaz lehet, hogy a negyedikkel felcsereltem} uses crt; const n=3; m=3; nm=(n*m); { Csak amiatt kell, hogy lejjebb megertse } type matrixelem=integer; matrix=array[1..n,1..m] of matrixelem; { Ezt akar ki is szedhetnem } ujmatrix=array[1..nm] of integer; { Ez lesz a "suritett matrix" } var i,j:integer; { A matrix koordinatai } mx:ujmatrix; { Valojaban ezzel vegzi a muveleteket } valaszt:integer; { A menu lehetosegei } function also3szog(i,j:integer):integer; { A derekszog bal lent van } begin also3szog:=((i-1)*(i-1) mod 2)+(i mod 2)+j; end; function felso3szog(i,j:integer):integer; { A derekszog jobb fent van } begin felso3szog:=(n*(n+1))-( (n-i)*(n-i+1) mod 2 )+(n-j); end; function szimmetrikus(i,j:integer):integer; { Ha m(a,b)-bol => m(b,a) } begin szimmetrikus:=((3*(i-1))+2)+(j-i+2); end; function Jacopini(i,j:integer):integer; { Bal-fent, jobb-lent csikos } begin Jacopini:=j-i+n; end; function Henkel(i,j:integer):integer; { Bal-lent, jobb-fent csikos } begin Henkel:=j+i-1 end; procedure kiszall; begin asm int 19; end; { Visszadja gepi kodban a vezerlest az op.rendszernek } { Itt gyakorlatilag semmit nem csinal, de jol nez ki :-) } end; procedure menu; var v:string; ok:integer; begin writeln('A lehetosegek:'); writeln; writeln('1 - also3szog'); writeln; writeln('2 - felso3szog'); writeln; writeln('3 - ----------'); writeln; writeln('4 - szimmetrikus'); writeln; writeln('5 - Jacopini'); writeln; writeln('6 - Henkel'); writeln; writeln('7 - kilepes'); repeat write('Irja be a matrix tipusat: '); readln(v); val(v,valaszt,ok); until (valaszt in [1..7]) and (ok=0); end; function index(i,j:integer):integer; { Ettol fugg, milyen matrix-kent kezeli a beolvasottat } begin case valaszt of 1:begin index:=also3szog(i,j); end; 2:begin index:=felso3szog(i,j); end; { Mint mar irtam, a 3. nem mukodik } 4:begin index:=szimmetrikus(i,j); end; 5:begin index:=Jacopini(i,j); end; 6:begin index:=Henkel(i,j); end; { A 7.-re kiszallna, tehat felesleges barmit is ideirni } end; end; Procedure beolvas(bematrix:ujmatrix); begin if valaszt=3 then begin clrscr; writeln('A ',valaszt,'. lehetoseg nem mukodik, valasszon masikat:'); writeln; menu end else if valaszt<>7 then begin for i:=1 to n do begin for j:=1 to m do begin write('bematrix[',i,',',j,']'); readln(bematrix[index(i,j)]); end; end; end; end; procedure kiiras(kimatrix:ujmatrix); begin if valaszt<>7 then begin for i:=1 to n*m do begin if trunc(i mod n)=(i mod n) then writeln; { Ennek pl. "n"-enkent kellene uj sort kezedenie, de ehelyett minden "i"-nel uj sort kezd } writeln(kimatrix[i]); end; end; writeln; writeln('ENTER-re vege'); readln; end; begin menu; beolvas(mx); kiiras(mx); end.