Unit ritkam; {Ritkamatrix} INTERFACE Const max=100; {max ertekes elemek szama} Type Tmatrixelem=integer; {A matrix elemeinek tipusa} Tritkaelem=Record ertek:Tmatrixelem; sor,oszlop:integer; end; Tritkamatrix=Record db,sordb,oszlopdb:integer; rmatrix:array [0..max] of Tritkaelem; end; Procedure bematrix (var r:Tritkamatrix); Procedure beelem (var r:Tritkamatrix; elem:Tritkaelem); Procedure kisuru (r:Tritkamatrix); {A suru alakot irja ki - ellenorzesre!} Procedure kimatrix (r:Tritkamatrix); Procedure osszead (r1, r2: Tritkamatrix; var r:Tritkamatrix); Procedure kivonas (r1, r2: Tritkamatrix; var r:Tritkamatrix); {Procedure szorzas (r1, r2: Tritkamatrix; var r:Tritkamatrix);} Procedure inic (var s:Tritkamatrix; elem:Tmatrixelem); {Inicializalja a matrixot - azaz mit??} IMPLEMENTATION Function Index(s:Tritkamatrix; sor,oszlop:integer):integer; var k:integer; Begin k:=1; While (k<=s.db) and not ((s.rmatrix[k].sor=sor) and (s.rmatrix[k].oszlop=oszlop)) do k:=k+1; If k<=s.db then Index:=k else Index:=0; End; {vagy Procedure inic (var s:Tritkamatrix); var ertek:Tmatrixelem; Begin s.db:=0; Write('Kerdes - elem erteket'); Readln(ertek); s.rmatrix[0].ertek:=ertek; End;} Procedure inic (var s:Tritkamatrix; elem:Tmatrixelem); Begin s.db:=0; s.rmatrix[0].ertek:=elem; End; Procedure beelem (var r:Tritkamatrix; elem:Tritkaelem); var hova:integer; Begin hova:=Index(r,elem.sor,elem.oszlop); {vagy volt ilyen elem - folul akarom irni, ha ott 0-a --> ...} If hova=0 then Begin r.db:=r.db+1; hova:=r.db; end; r.rmatrix[hova]:=elem; End; Procedure bematrix (var r:Tritkamatrix); var elem:Tritkaelem; sor,oszlop:integer; Begin Repeat Write('Be erteket: '); Readln(elem.ertek); If elem.ertek<>r.rmatrix[0].ertek then Begin Write('Sor'); Readln(sor); elem.sor:=sor; Write('Oszlop'); Readln(oszlop); elem.oszlop:=oszlop; Beelem(r,elem); End; Until elem.ertek=r.rmatrix[0].ertek; End; Procedure kimatrix(r:Tritkamatrix); var i,j:integer; Begin For i:=1 to r.sordb do Begin For j:=1 to r.oszlopdb do Write(r.rmatrix[index(r,i,j)].ertek); Writeln(''); End; End; Procedure kisuru(r:Tritkamatrix); Var i:integer; Begin Writeln('Ismetlodo elem: ',r.rmatrix[0].ertek); For i:=1 to r.db do Writeln(r.rmatrix[i].ertek,r.rmatrix[i].sor,r.rmatrix[i].oszlop); End; Procedure osszead(r1,r2:Tritkamatrix; var r:Tritkamatrix); var i,j:integer; {Index tipusa} Begin If (r1.sordb=r2.sordb) and (r1.oszlopdb=r2.oszlopdb) {and (r1.rmatrix[0]=r2.rmatrix[0])} then Begin r.sordb:=r1.sordb; r.oszlopdb:=r2.oszlopdb; inic(r,r1.rmatrix[0].ertek+r2.rmatrix[0].ertek); For i:=1 to r1.sordb do For j:=1 to r1.oszlopdb do Begin r.rmatrix[Index(r,i,j)].ertek:=r1.rmatrix[Index(r1,i,j)].ertek+r2.rmatrix[Index(r2,i,j)].ertek End; End else Writeln('Hiba'); End; Procedure kivonas(r1,r2:Tritkamatrix; var r:Tritkamatrix); var i,j:integer; {Index tipusa} Begin If (r1.sordb=r2.sordb) and (r1.oszlopdb=r2.oszlopdb) {and (r1.rmatrix[0]=r2.rmatrix[0])} then Begin r.sordb:=r1.sordb; r.oszlopdb:=r2.oszlopdb; inic(r,r1.rmatrix[0].ertek-r2.rmatrix[0].ertek); For i:=1 to r1.sordb do For j:=1 to r1.oszlopdb do Begin r.rmatrix[Index(r,i,j)].ertek:=r1.rmatrix[Index(r1,i,j)].ertek-r2.rmatrix[Index(r2,i,j)].ertek End; End else Writeln('Hiba'); End; end.