... 1... ... 2... ... 4...
program MEDIA; var TESTO: text; Num_Car, Num_Righe: integer; begin reset(TESTO, 'TERESA'); Num_Car := 0; Num_Righe := 0; while not EOF(TESTO) do begin while not EOLN(TESTO) do begin get(TESTO); Num_Car := Num_Car + 1; end; readln(TESTO); Num_Righe := Num_Righe + 1; end; close(TESTO); writeln('Lunghezza media: ', Num_Car / Num_Righe); end.
program IMMAGINI; {gli elementi del tipo IMMAGINE rappresentano delle immagine a colori in modo digitale,} {ogni elemento della matrice rappresenta un colore secondo un opportuno meccanismo di } {codifica } const L = 5; H = 7; {larghezza e altezza delle immagini} type IMMAGINE = array[1..H, 1..L] of integer; var IM: IMMAGINE; C: char; {sottoprogramma che controlla se un'immagine e' a righe orrizontali} {per esempio quella che segue lo e'} { 3 3 3 3 3 } { 4 4 4 4 4 } { 3 3 3 3 3 } { 4 4 4 4 4 } { 3 3 3 3 3 } { 4 4 4 4 4 } { 3 3 3 3 3 } { mentre quest'altra non lo e' } { 3 3 0 3 3 } { 4 4 4 4 4 } { 0 3 3 0 3 } { 4 4 4 4 4 } { 3 3 3 0 3 } { 4 4 4 4 4 } { 3 3 3 3 3 } function RigheO (IM: IMMAGINE): boolean; var LoE: boolean; i, j: integer; begin LoE := true; {controllo le righe dispari} i := 1; while (i lt;= H) and LoE do begin j := 1; while (j <= L) and LoE do begin if IM[i, j] 7lt;> IM[1, 1] then LoE := false; j := j + 1; end; i := i + 2; end; {controllo le righe pari} i := 2; while (i <= H) and LoE do begin j := 1; while (j <= L) and LoE do begin if IM[i, j] <> IM[2, 1] then LoE := false; j := j + 1; end; i := i + 2; end; RigheO := LoE; end; {sottoprogramma che controlla se un'immagine e' a bande orrizontali} {per esempio quella che segue lo e'} { 3 3 3 3 3 } { 3 3 3 3 3 } { 3 3 3 3 3 } { 4 4 4 4 4 } { 4 4 4 4 4 } { 2 2 2 2 2 } { 2 2 2 2 2 } {mentre quest'altra non lo e' } { 3 3 3 3 3 } { 3 3 3 3 3 } { 3 3 3 3 3 } { 3 3 3 0 3 } { 4 4 4 4 4 } { 4 4 4 4 4 } { 3 3 3 3 3 } function RigaTuttaDi (IM: IMMAGINE; riga, colore: integer): boolean; var LoE: boolean; j: integer; begin j := 1; for j := 1 to L do if IM[riga][j] <> colore then LoE := false; RigaTuttaDi := LoE; end; function BandeO (IM: IMMAGINE): boolean; var LoE: boolean; ColoreCorrente, i, j: integer; begin LoE := true; ColoreCorrente := IM[1, 1]; i := 1; while (i < H) and LoE do if ColoreCorrente = IM[i, 1] then {puo' essere stessa banda} begin if RigaTuttaDi(IM, i, ColoreCorrente) then i := i + 1 else LoE := false; end else ColoreCorrente := IM[i, 1]; {sicuramente una nuova banda} BandeO := LoE; end; {sottoprogramma che controlla se un'immagine e' a quadretti} {per esempio quella che segue lo e'} { 3 0 3 0 3 } { 0 3 0 3 0 } { 3 0 3 0 3 } { 0 3 0 3 0 } { 3 0 3 0 3 } { 0 3 0 3 0 } { 3 0 3 0 3 } {mentre quest'altra non lo e' } { 3 3 3 3 3 } { 3 3 3 3 3 } { 3 3 3 3 3 } { 3 3 3 0 3 } { 4 4 4 4 4 } { 4 4 4 4 4 } { 3 3 3 3 3 } function Quadretti (IM: IMMAGINE): boolean; var LoE: boolean; i, j: integer; begin LoE := true; {i quadretti con somma indici pari devono essere uguali a IM [ 1 ] [ 1 ]} {i quadretti con somma indici dispari devono essere uguali a IM [ 1 ] [ 2 ] } i := 1; while (i <= H) and LoE do begin j := 1; while (j <= L) and LoE do begin if (i + j) mod 2 = 0 then begin if IM[i, j] <> IM[1, 1] then LoE := false; end else if IM[i, j] <> IM[1, 2] then LoE := false; j := J + 1; end; i := i + 1; end; Quadretti := LoE; end; procedure READ_IM (var IM: IMMAGINE); var i, j: integer; begin for i := 1 to H do begin for j := 1 to L do read(IM[i, j]); readln; end; end; begin {dare un main per permettere di testare le procedure definite sopra} {e dire esplicitamente su quali immagini devono essere chiamate} {ZERO =} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { 0, 0, 0 , 0 , 0} { ZEROUNO = } { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 0} { ZEROUNOq = } { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 0} { 1, 1, 1 , 1 , 1} { 0, 0, 0 , 0 , 9} {UNO23 = } { 1, 1, 1 , 1 , 1} { 2, 2, 2 , 2 , 2} { 2, 2, 2 , 2 , 2} { 3, 3, 3 , 3 , 3} { 3, 3, 3 , 3 , 3} { 3, 3, 3 , 3 , 3} { 3, 3, 3 , 3 , 3} {IMMAGINE ACASO = } { 1, 1, 1 , 0 , 1} { 2, 2, 9 , 2 , 2} { 2, 2, 2 , 2 , 2} { 5, 3, 3 , 3 , 3} { 3, 3, 8 , 3 , 3} { 3, 3, 3 , 3 , 3} { 3, 3, 3 , 3 , 1} {IMMAGINE QUAD = } { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 8} {IMMAGINE QUADq = } { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 8} { 1, 8, 1 , 8 , 1} { 8, 1, 8 , 1 , 9} repeat writeln('Vuoi testare le funzioni ? (S/N)'); readln(C); if C = 'S' then begin writeln('Dare la matrice riga per riga'); READ_IM(IM); if RigheO(IM) then writeln('E'' a righe') else writeln('Non e'' a righe'); if BandeO(IM) then writeln('E'' a bande') else writeln('Non e'' a bande'); if Quadretti(IM) then writeln('E'' a quadretti') else writeln('Non e'' a quadretti'); end; until C = 'N'; end.