Esercizio 1 (18 punti)
Il ricevimento clienti di un albergo e' gestito in modo da memorizzare le prenotazioni in un file di record, PRENOT.DAT, in cui ogni record contiene le seguenti informazioni: codice della prenotazione, cognome e nome del cliente, tipo di camera (S o D), tipo di trattamento (P, M, o C), tariffa giornaliera, data di arrivo, data di partenza. Quando il cliente arriva in albergo tutte le informazioni relative alla sua prenotazione contenute nel file PRENOT.DAT vengono riportate in un nuovo record aggiunto ad una lista PRES, realizzata con record e puntatori. Quando il cliente parte il suo record viene eliminato dalla lista PRES, le informazioni in esso contenute vengono inserite in un nuovo record nel file ARCHIVIO.DAT (i record di ARCHIVIO.DAT hanno la stessa struttura di quelli di PRENOT.DAT).
2. Scrivere una procedura o funzione Pascal che, ricevendo in ingresso la data corrente (nel formato giorno, mese, anno), il file PRENOT.DAT, e la lista PRES, stampi le informazioni relative ai clienti previsti e non arrivati (cioe' quelli la cui prenotazione e' presente nel file PRENOT.DAT con data di arrivo = data odierna e che non sono nella lista PRES).
3. Scrivere una procedura o funzione Pascal
che, ricevendo in ingresso il file ARCHIVIO.DAT e la lista PRES, crei una
nuova lista VIP, contenente i nominativi dei clienti al momento presenti
in albergo (e cioe' contenuti nella lista PRES) che hanno soggiornato in
albergo per tre o piu' volte. N.B.: 1) ogni cliente deve comparire soltanto
una volta nella lista VIP; 2) ogni record della lista VIP contiene le seguenti
informazioni: nome e cognome del cliente, numero di volte che ha soggiornato
nell'albergo (inclusa quella in corso).
Esercizio 3 (4 punti)
Scrivere un sottoprogramma Fortran che ricevendo in ingresso una matrice
A(n¥n) ad elementi
interi, costruisca la matrice trasposta (cioe' la matrice che si ottiene
scambiando le righe con le colonne).
Esercizio 4 (4 punti)
Dato il seguente programma Pascal, dire cosa stampa se viene eseguito
con le ultime due cifre del proprio numero di matricola come dati di ingresso.
Motivare la risposta.
program Prova;
type
punt = ^rec;
rec = record
info: integer;
next: punt
end;
var
p, app: punt;
i, k: integer;
procedure Costruisci (var q:
punt; k: integer);
begin
if k <> 0 then
begin
new(q);
q^.info := k;
q^.next := nil;
Costruisci(q^.next, k - 1)
end
end;
procedure Pippo (l: punt);
var
q: punt;
begin
q := l;
while q <> nil do
begin
q^.info := q^.info + i;
i := i + 1;
q := q^.next
end;
l^.next^.next := q;
l := nil
end;
begin
writeln('inserisci un numero
di due cifre');
read(k);
Costruisci(p, k);
i := 2;
Pippo(p);
app := p;
while app <> nil do
begin
write(app^.info);
app := app^.next
end; readln; end.