{$N+} (* Program pro vypocet reseni trojuhelnikove matice *) (* Program nacte trojuhelnikovou matici ze souboru 'trojmatice.txt' *) (* nacte sloupcovy vektor ze souboru trojrhs.txt *) (* Program vypise reseni *) program TrojuhelnikovaMatice; const RozmerMatice = 10; type Matice = array [1..RozmerMatice,1..RozmerMatice] of double; Vektor = array [1..RozmerMatice] of double; var a:Matice; (* ctvercova matice *) y:Vektor; (* vektor na prave strane *) x:Vektor; (* hledany vektor, resime A*x=y *) soucet:double; k,j:integer; (* napiseme funkci pro nacteni matice ze souboru *) procedure nactiMatici(jmenoSouboru:string;var vystup:Matice); var i,j:integer; soubor:Text; begin assign(soubor,jmenoSouboru); reset(soubor); for i := 1 to RozmerMatice do begin for j := 1 to RozmerMatice do begin read(soubor,vystup[i,j]); end; readln(soubor); end; close(soubor); end; (* napiseme funkci pro nacteni sloupcoveho vektoru ze souboru *) procedure nactiVektor(jmenoSouboru:string;var vystup:Vektor); var i:integer; soubor:Text; begin assign(soubor,jmenoSouboru); reset(soubor); for i := 1 to RozmerMatice do begin readln(soubor,vystup[i]); end; close(soubor); end; begin nactiMatici('trojmatice.txt',a); nactiVektor('trojrhs.txt',y); for k := RozmerMatice downto 1 do begin soucet := 0.0; for j := k + 1 to RozmerMatice do begin soucet := soucet + a[k,j]*x[j]; end; x[k] := (y[k] - soucet) / a[k,k]; end; writeln('Vysledek je:'); for k:=1 to RozmerMatice do begin writeln(x[k]); end; readln; end.