const Imax = 30; type MatInt = array [1..Imax,1..Imax] of integer;
In generale una variabile di tipo MatInt conterra' una matrice di interi "parzialmente riempita con m righghr e n colonne" (con 1<=m,n<=Imax).
Completare (nell'ordine) le seguenti procedure. Scrivere un main per testarle (utilizzate un'interfacca a menu', come spiegato a lezione).
Durante lo sviluppo del programma procedere in modo incrementale:
procedure Init (var a:MatInt; m,n:integer; s:integer); {AI: 1<=m,n<=Imax, s e' inizializzato} {AF: per ogni i in 1..n. per ogni j in 1..m. a[i,j]=s} procedure ScriviMatrice (var a:MatInt; m,n:integer); {AI: 1<=m,n<=Imax, a[1..m,1..n] e' inizializzata.} {COMMENTO: a[1..m,1..n] e' scritta sul terminale, il contenuto di a non e' modificato.} procedure Somma (var a,b,c:MatInt; m,n:integer); {AI: 1<=m,n<=Imax, a[1..m,1..n] e b[1..m,1..n] sono inizializzate.} {AF: c[1..m,1..n] = a[1..m,1..n] + b[1..m,1..n]} {COMMENTO: il contenuto di a e b non e' modificato.} procedure ProdottoPerScalare (var a,b:MatInt; m,n:integer; s:integer); {AI: 1<=m,n<=Imax, a[1..m,1..n] e s sono inizializzati.} {AF: per ogni i in 1..n}. per ogni j in 1..m. b[i,j]=s*a[i,j]} {COMMENTO: il contenuto di a non e' modificato.} procedure Prodotto (var a,b,c:MatInt; m,n,p:integer); {AI: 1<=m,n,p<=Imax, a[1..m,1..n] e b[1..n,1..p] sono inizializzate.} {AF: c[1..m,1..p] = prodotto "righe per colonne" di a[1..m,1..n] e b[1..n,1..p], ovvero: per ogni i in 1..m, per ogni j in 1..p. c[i,j]=a[i,1]*b[1,j]+a[i,2]*b[2,j]+...+a[i,n]*b[n,j]} {COMMENTO: il contenuto di a e b non e' modificato.} procedure MatriceIdentica (var a:MatInt; m:integer); {AI: 1<=m<=Imax} {AF: a[1..m,1..m] e' la matrice identica per il "prodotto righe per colonne", ovvero: per ogni i,j in 1..m. a[i,i]=1, e per i\=j a[i,j]=0}