program matrix;{MINDENT SZUPERUL ELVEGEZ!!!!} uses crt,lista; const MaxN=20; type Telem=real; Sorindex=integer; Oszlopindex=integer; Mutato=integer; type MatElem=record ertek:Telem; sor:Sorindex; oszlop:Oszlopindex; sorkov:Mutato; oszlopkov:Mutato; end; var l,flo,fla,vl2,vl,hm:tlista; k:integer; procedure beolvas; { Ez teszi "sorba" a matrix-ot } var i,j,t:integer; e,f:real; m:TlistaElem; begin clrscr; repeat gotoxy(20,5); writeln('Adja meg a matrix mereteit:'); repeat write('A matrix sorainak a szama:'); readln(k); until k<=MaxN; repeat write('Amatrix oszlopainak a szama:'); readln(t); until t<=MaxN; until k=t ; l.ures; i:=1; while i<=k do repeat f:=0; for j:=1 to k do begin repeat write('Adja meg a matrix',i,'.soranak ',j,'.elemet:'); readln(e); until (e<=1) and (e>=0); m.ertek.ertek:=e; f:=f+e; if m.ertek.ertek<>0 then begin m.ertek.oszlop:=j; m.ertek.sor:=i; if j>1 then begin m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=1; end else begin m.ertek.sorkov:=i; m.ertek.oszlopkov:=i+1; end; end; if m.ertek.ertek<>0 then l.beszurmoge(m); end; i:=i+1; until f=1; end; { A beolvasas vege } procedure fixlista; var i:integer; begin flo.ures; fla.ures; l.elejere; while not(l.vege_e) do begin i:=l.akt^.ertek.oszlop; if i=1 then flo.beszurmoge(l.akt^) else fla.beszurmoge(l.akt^); l.kovetkezore; end; flo.beszurmoge(l.akt^); end; procedure kiold; var m:TlistaElem; begin l.elejere; while not(l.vege_e) do begin if l.akt^.ertek.oszlop=k then begin l.kihagy; l.elozore; m.ertek.ertek:=l.akt^.ertek.ertek; m.ertek.sor:=l.akt^.ertek.sor; m.ertek.oszlop:=l.akt^.ertek.oszlop; m.ertek.sorkov:=l.akt^.ertek.sorkov+1; m.ertek.oszlopkov:=1; l.elemmodosit(m); end; l.kovetkezore; end; if l.akt^.ertek.oszlop=k then begin l.kihagy; l.elozore; m.ertek.ertek:=l.akt^.ertek.ertek; m.ertek.sor:=l.akt^.ertek.sor; m.ertek.oszlop:=l.akt^.ertek.oszlop; m.ertek.sorkov:=l.akt^.ertek.sorkov+1; m.ertek.oszlopkov:=1; l.elemmodosit(m); end; end; procedure atloszor; var i:integer; e:real; m:TlistaElem; begin kiold; vl2.ures; l.elejere; for i:=1 to k do begin fla.elejere; while (l.akt^.ertek.sor=i) and not(l.vege_e) do begin if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); if not(fla.vege_e) then fla.kovetkezore else fla.elejere; l.kovetkezore; end else begin if fla.akt^.ertek.oszlop>l.akt^.ertek.oszlop+1 then l.kihagy; if fla.akt^.ertek.oszlop<=l.akt^.ertek.oszlop then while (l.akt^.ertek.oszlop+1<>fla.akt^.ertek.oszlop) and (not(fla.vege_e)) do fla.kovetkezore; if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); if not(fla.vege_e) then fla.kovetkezore else fla.elejere; l.kovetkezore; end else begin if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); l.kovetkezore; end else begin l.kihagy; end; end; end; end; if (l.vege_e) then if l.akt^.ertek.sor=i then if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); end else begin while (l.akt^.ertek.oszlop+1<>fla.akt^.ertek.oszlop) and (not(flo.vege_e)) do fla.kovetkezore; if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); end else begin if l.akt^.ertek.oszlop+1=fla.akt^.ertek.oszlop then begin e:=l.akt^.ertek.ertek*fla.akt^.ertek.ertek; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=fla.akt^.ertek.oszlop; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=fla.akt^.ertek.oszlop; vl2.beszurmoge(m); end else l.kihagy; end; end; end; end; procedure oszlopszor; var m:TlistaElem; i,d,n:integer; e:real; begin vl.ures; l.elejere; flo.elejere; for i:=1 to k do begin flo.elejere; e:=0; while (l.akt^.ertek.sor=i) and (not (l.vege_e)) do if l.akt^.ertek.oszlop=flo.akt^.ertek.sor then begin e:=l.akt^.ertek.ertek*flo.akt^.ertek.ertek+e; if flo.akt^.ertek.sor<>k then flo.kovetkezore else flo.elejere; l.kovetkezore; end else begin while (l.akt^.ertek.oszlop<>flo.akt^.ertek.sor) and (not(flo.vege_e))do flo.kovetkezore; if l.akt^.ertek.oszlop=flo.akt^.ertek.sor then e:=e+l.akt^.ertek.ertek*flo.akt^.ertek.ertek; l.kovetkezore; if flo.akt^.ertek.sor<>k then flo.kovetkezore else flo.elejere end; if l.akt^.ertek.sor<>i then begin m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=1; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=1; if m.ertek.ertek<>0 then vl.beszurmoge(m) end else begin if l.akt^.ertek.oszlop=flo.akt^.ertek.sor then e:=l.akt^.ertek.ertek*flo.akt^.ertek.ertek+e else begin while l.akt^.ertek.oszlop<>flo.akt^.ertek.sor do flo.kovetkezore; e:=e+l.akt^.ertek.ertek*flo.akt^.ertek.ertek; end; m.ertek.ertek:=e; m.ertek.sor:=i; m.ertek.oszlop:=1; m.ertek.sorkov:=i+1; m.ertek.oszlopkov:=1; if m.ertek.ertek<>0 then vl.beszurmoge(m); end; end; end; procedure osszefuz; var i:integer; begin vl.elejere; vl2.elejere; i:=1; repeat if (vl.akt^.ertek.sor<= vl2.akt^.ertek.sor) and (vl.akt^.ertek.oszlop2 then begin oszlopszor; kiold; atloszor; osszefuz; i:=2; while i