Matice je v Pascalu reprezentována dvourozměrným polem (ARRAY[1..m,1..n] of typ). K jednotlivým prvkům matice lze přistupovat pomocí dvojice indexů - řádkového a sloupcového.
Ve všech algoritmech značím řádkový index písmenem 'i' a sloupcový index 'j'. Při průchodu maticí vždy procházím matici po řádcích. Je vhodné, aby si každý zvolil jeden způsob procházení matic (po sloupcích nebo po řádcích) a ten vždy dodržoval. Snižuje tak riziko popletení řádkových a sloupcových indexů při vlastním programování.
CONST MAX=10; {Maximální rozměr matice.}
TYPE tMatice=ARRAY[1..Max,1..Max] of real; {Typ matice.}
tIndex=1..Max; {Typ indexu.}
Algoritmy:
Načtení matice ze souboru
Vypsání matice
Nulování hlavní diagonály
Nulování vedlejší diagonály
Nulování prvků nad hlavní diagonálou
Nulování prvků pod hlavní diagonálou
Součet matic
Násobení matic
Transponování matice
Určení maxima řádkových minim
Určení minima řádkových maxim
Přehození diagonál matice
Zadání:
Procedure NactiMatici(JmenoSouboru:string;var Matice:tMatice);
{Procedura nacte matici ze souboru s nasledujici strukturou:
m - pocet radku, n - pocet sloupcu
hodnoty matice po radcich oddelene mezerou.
napr. matice 1 x 1 obsahujici prvek 1:
1 1
1 }
var f:text;
i,j:tIndex;
m,n:integer;
begin {NactiMatici}
assign(f,JmenoSouboru);
reset(f);
read(f,m,n);
i:=1;j:=1;
while (i<=m)and(i<=Max) do
begin
while (j<=n)and(j<=Max) do
begin
read(f,matice[i,j]);
j:=succ(j);
end;
j:=1;
i:=succ(i);
readln(f);
end;
close(f);
end; {NactiMatici}
Seznam algoritmů
Zadání:
Procedure PisMatici(var Matice:tMatice;M,N:tIndex);
{Procedura vypise matici o M sloupcich a N radcich.}
var i,j:tIndex;
begin {PisMatici}
for i:=1 to m do
begin
for j:=1 to n do
write(matice[i,j]:3:0,' ');
writeln;
end;
end; {PisMatici}
Seznam algoritmů
Zadání:
Procedure NulujDiagonalu(var Vstupni,Vystupni:tMatice;N:tIndex);
{Procedura vynuluje hlavni diagonalu.}
var i:tIndex;
begin {NulujDiagonalu}
Vystupni:=Vstupni;
for i:=1 to n do Vystupni[i,i]:=0;
end; {NulujDiagonalu}
Seznam algoritmů
Zadání:
Procedure NulujVDiagonalu(var Vstupni,Vystupni:tMatice;N:tIndex);
{Procedura vynuluje vedlejsi diagonalu.}
var i:tIndex;
begin {NulujVDiagonalu}
Vystupni:=Vstupni;
for i:=1 to n do Vystupni[i,n-i+1]:=0;
end; {NulujVDiagonalu}
Seznam algoritmů
Zadání:
Procedure NulujNadDiagonalou(var Vstupni,Vystupni:tMatice;N:tIndex);
{Procedura vynuluje prvky nad hlavni diagonalou.}
var i,j:tIndex;
begin {NulujNadDiagonalou}
Vystupni:=Vstupni;
for i:=1 to N do
for j:=1 to N do
if j>>i then Vystupni[i,j]:=0;
end; {NulujNadDiagonalou}
Seznam algoritmů
Zadání:
Procedure NulujPodDiagonalou(var Vstupni,Vystupni:tMatice;N:tIndex);
{Procedura vynuluje prvky pod hlavni diagonalou.}
var i,j:tIndex;
begin {NulujPodDiagonalou}
Vystupni:=Vstupni;
for i:=1 to N do
for j:=1 to N do
if j< i then Vystupni[i,j]:=0;
end; {NulujPodDiagonalou}
Seznam algoritmů
Zadání:
Procedure SectiMatice(var Matice1,Matice2,Vystup:tMatice;M1,N1:tIndex);
{Procedura secte dve matice stejneho typu.}
var i,j:tIndex;
begin {SectiMatice}
for i:=1 to M1 do
for j:=1 to N1 do
Vystup[i,j]:=Matice1[i,j]+Matice2[i,j];
end; {SectiMatice}
Seznam algoritmů
Zadání:
Součin matic je dán vztahem: C[i,j] = SUMA(A[i,k] * B[k,j]),
pro k = 1,2, ..... , p
i = 1,2, ..... , m
j = 1,2, ..... , n
A - m řádků, p sloupců
B - p řádků, n sloupců
C - m řádků, n sloupců
Algoritmus:
Procedure NasobMatice(var Matice1,Matice2,Vystup:tMatice;M,N,P:tIndex);
{Procedura provede nasobeni dvou matic.}
var i,j,k:tIndex;
begin {NasobMatice}
for i:=1 to M do
for j:=1 to P do
begin
vystup[i,j]:=0;
for k:=1 to N do vystup[i,j]:=vystup[i,j]+matice1[i,k]*matice2[k,j];
end;
end; {NasobMatice}
Seznam algoritmů
Zadání:
Procedure Transponuj(var Matice,Transponovana:tMatice;M,N:tIndex);
{Procedura provede transponovani matice.}
var i,j:tIndex;
begin {Transponuj}
for i:=1 to M do
for j:=1 to N do
Transponovana[j,i]:=Matice[i,j];
end; {Transponuj}
Seznam algoritmů
Zadání:
Function MaxRowMin(Matrix:tMatice):real;
{Funkce urci maximum z radkovych minim}
var SmallMin,BigMax:real;
i,j:tIndex;
begin {MaxRowMin}
for i:=1 to Max do begin
SmallMin:=Matrix[i,1];
for j:=1 to Max do
if Matrix[i,j] < SmallMin then SmallMin:=Matrix[i,j];
if i=1 then
BigMax:=SmallMin
else
if SmallMin > BigMax then BigMax:=SmallMin;
end; {for i}
MaxRowMin:=BigMax;
end; {MaxRowMin}
Seznam algoritmů
Zadání:
Function MinRowMax(Matrix:tMatice):real;
{Funkce urci minimum z radkovych maxim}
var SmallMax,BigMin:real;
i,j:tIndex;
begin {MinRowMax}
for i:=1 to Max do begin
SmallMax:=Matrix[i,1];
for j:=1 to Max do
if Matrix[i,j] > SmallMax then SmallMax:=Matrix[i,j];
if i=1 then
BigMin:=SmallMax
else
if SmallMax < BigMin then BigMin:=SmallMax;
end; {for i}
MinRowMax:=BigMin;
end; {MinRowMax}
Seznam algoritmů
Zadání:
Procedure ChangeDiagonals(var Matrix:tMatice);
{Procedura vymeni hlavni a vedlejsi diagonalu}
var i:tIndex;
HlpR:real;
begin {ChangeDiagonals}
for i:=1 to Max do begin
HlpR:=Matrix[i,i];
Matrix[i,i]:=Matrix[i,Max-i+1];
Matrix[i,Max-i+1]:=HlpR;
end; {for i}
end; {ChangeDiagonals}
Seznam algoritmů
|
|
18. 1. 2000 |
|
|
||
|
|