SOLUZIONE 10-01-00 (PASCAL)

Questionario cartaceo

  1. Il dischetto in questione contiene C = 512 * 1024 * 8 bit.
    Per rappresentare un numero compreso tra 0 e 1000 occorrono almeno 10 bit
    (infatti 210 - 1 = 1023 e 29 - 1 = 511),
    pertanto il dischetto può contenere C / 10 numeri.

  2. Occorrerà munirsi di un CD o di un dischetto o di un altro dispositivo di input, che possa essere riconosciuto dal computer come quello di partenza, che contenga il sistema operativo, l'editor ed il compilatore per il linguaggio scelto (Pascal o C) per svolgere l'esercitazione.

  3. Se il compilatore non inizializza di default le variabili, il programma qualunque sia il valore dato in input per x terminerà per errore (poichè tenta di leggere una variabile non inizializzata).
  4. program MERGE;
    
     var
      F1, F2, Merge: text;
     procedure CopiaLinea (var F: text);
      var
       ch: char;
     begin
      while (not eoln(F)) do
      begin
       read(F, ch);
       write(Merge, ch);
      end;
      readln(F);
      writeln(Merge);
     end;
    
    begin
     reset(F1, 'PRIMO');
     reset(F2, 'SECONDO');
     rewrite(Merge, 'MERGE');
    
     while (not eof(F1)) do
     begin
      CopiaLinea(F1);
      CopiaLinea(F2);
     end;
     close(F1);
     close(F2);
     close(Merge);
    
    end.

Parte laboratorio

program TOTOCALCIO;
 const
  TREDICI = 5;
 type
  INDEX = 1..TREDICI;
{{gli elementi del tipo COLONNA rappresentano un possibile risultato }
{delle 13 partite considerate dal tototcalcio}
{e consistono di 13 elementi ordinati dell'insieme {1,2,X}
{( 1 : vince prima squadra 2 : vince seconda squadra X : pareggio ) }

  COLONNA = array[1..TREDICI] of (UNO, DUE, X);

{gli elementi del tipo SCHEDINA rappresentano le schedine del gioco del totocalcio}
{su ogni schedina vengono indicati i possibili risultati delle 13 partite }
{e ' possibile indicare uno oppure due oppure tre risultati }
{ in gergo mettere una doppia , mettere una tripla)}
{ peratanto una schedina puo' determinare una o piu' colonne }
  SCHEDINA = array[1..TREDICI, 1..3] of BOOLEAN;
 var
  OGGI: COLONNA;
  GIOCATA: SCHEDINA;
  R: integer;

{sottoprogramma che ritorna cosa ha vinto una schedina rispetto ad }
{una data colonna}
{i possibili risultati sono }
{13: una colonna della schedina coincide con quella data}
{12: una colonna della schedina coincide con quella data in 12 punti}
{11: una colonna della schedina coincide con quella data in 11 punti}
{niente in tutti gli altri casi}
 function CONTROLLA (C: COLONNA;
       S: SCHEDINA): integer;
  var
   R, I: integer;
 begin
  R := 0;
  for I := 1 to TREDICI do
   if ((C[I] = UNO) and S[I, 1]) or ((C[I] = DUE) and S[I, 2]) or ((C[I] = X) and S[I, 3]) then
    R := R + 1;
  CONTROLLA := R
 end;

{sottoprogramma che stampa una colonna}
 procedure STAMPAC (C: COLONNA);
  var
   I: integer;
 begin
  for I := 1 to TREDICI do
   case C[I] of
    UNO: 
     writeln('1');
    DUE: 
     writeln('2');
    X: 
     writeln('X');

   end;
 end;

{sottoprogramma che stampa tutte le colonne determinate da una schedina}
 procedure COLON (var S: SCHEDINA;
       IND: integer;
       C: COLONNA);
  var
   I: integer;
 begin
  if (IND <= TREDICI) then
  begin
   if S[IND, 1] then
   begin
    C[IND] := UNO;
    COLON(S, IND + 1, C);
   end;
   if S[IND, 2] then
   begin
    C[IND] := DUE;
    COLON(S, IND + 1, C);
   end;
   if S[IND, 3] then
   begin
    C[IND] := X;
    COLON(S, IND + 1, C);
   end;
  end
  else
  begin
   writeln('***********');
   STAMPAC(C);
  end;
 end;

 procedure COLONNE (var S: SCHEDINA);
  var
   C: COLONNA;
 begin
  COLON(S, 1, C);
 end;


begin
{assegnare una qualunque colonna alla variabile OGGI}
{ 1}
{ 1}
{ 2}
{ X}
{ X}

 OGGI[1] := UNO;
 OGGI[2] := DUE;
 OGGI[3] := UNO;
 OGGI[4] := X;
 OGGI[5] := X;

{assegnare una qualunque schedina alla variabile GIOCATA}
{  1 2}
{  2  }
{  1  }
{  X  }
{  1 X  2}
 GIOCATA[1, 1] := True;
 GIOCATA[1, 2] := true;
 GIOCATA[1, 3] := false;

 GIOCATA[2, 1] := false;
 GIOCATA[2, 2] := true;
 GIOCATA[2, 3] := false;

 GIOCATA[3, 1] := true;
 GIOCATA[3, 2] := false;
 GIOCATA[3, 3] := false;

 GIOCATA[4, 1] := false;
 GIOCATA[4, 2] := false;
 GIOCATA[4, 3] := true;

 GIOCATA[5, 1] := true;
 GIOCATA[5, 2] := true;
 GIOCATA[5, 3] := true;


{  stampare i risultati fatti da GIOCATA rispetto ad OGGI }
 R := CONTROLLA(OGGI, GIOCATA);
 if (R = TREDICI) then
  writeln('Hai fatto 13')
 else if (R = TREDICI - 1) then
  writeln('Hai fatto 12')
 else if (R = TREDICI - 2) then
  writeln('Hai fatto 11')
 else
  writeln('non hai vinto');

 STAMPAC(OGGI);

{  stampare tutte le colonne determinate da GIOCATA }
 COLONNE(GIOCATA);

end.