SOLUZIONE 10-01-00 (PASCAL)
Questionario cartaceo
-
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.
-
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.
-
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).
-
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.