SOLUZIONE 15-07-99 (PASCAL)

Questionario cartaceo

  1. 123 in base 7 è 1 × 49 + 2 × 7 + 3 × 1 = 66.
    66 = 7 × 9 + 3 × 1
    e quindi in base 9 è
    73 .

  2. ...     1...
    ...     2...
    ...     4...
  3. 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.

Parte laboratorio

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.