Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A. 1999-2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica,
Nucleare
Appello del 8 giugno 2000 -- 1a prova scritta
tempo a disposizione: 2 ore
Problema 1 (18 punti) Un amministratore di condominio registra i
pagamenti effettuati dai proprietari degli appartamenti su una lista l.
Se per un appartamento del condominio è stato effettuato almeno un
pagamento, allora sono rappresentate in l le seguenti informazioni:
- nome del proprietario (max 20 caratteri);
- cognome del proprietario (max 20 caratteri);
- scala dell'appartamento (lettera maiuscola);
- interno dell'appartamento (intero positivo);
- totale pagato fino a quel momento, in euro (reale).
Ad esempio, in un certo istante la lista l potrebbe contenere le
seguenti informazioni.
__ ________________________ ______________________ _____________________ __
| | | | | | | | | | | | | | | | | | | | | |\ |
l | -+->|Mario|Rossi|A|3|800.0| -+->|Luca|Neri|C|6|980.0| -+->|Mario|Rossi|A|4|120.0| \|
|__| |_____|_____|_|_|_____|__| |____|____|_|_|_____|__| |_____|_____|_|_|_____|__|
Si richiede di risolvere i seguenti punti:
- Scrivere le dichiarazioni dei tipi di dato Pascal da utilizzarsi
per risolvere i punti successivi.
- Scrivere una (o più) unità di programma Pascal che consenta
all'amministratore di aggiornare la lista a fronte di un pagamento relativo
ad un certo appartamento. In particolare l'unità di programma riceve
come argomenti la lista l, l'ammontare a del pagamento, la
scala s e l'interno i dell'appartamento. Se in l
l'appartamento identificato da s ed i è già stato
registrato, allora l'unità di programma deve aumentare della
quantità a il totale pagato fino a quel momento per
l'appartamento. Altrimenti, l'unità di programma deve:
- (a)
- acquisire dall'utente nome e cognome del proprietario dell'appartamento
in questione;
- (b)
- registrare in l tutti i dati del pagamento, inserendo un nuovo
record in una posizione qualsiasi della lista.
- Scrivere una (o più) unità di programma Pascal che consenta
all'amministratore di stampare su un file l'ammontare pagato da ciascun
proprietario fino a quel momento, tenendo conto che potrebebro esistere
persone che sono proprietarie di più appartamenti. In particolare
l'unità di programma riceve come argomenti la lista l e il nome
fisico f di un file, e deve scrivere in f una riga per ogni
proprietario p registrato in l che contiene: nome e cognome
di p, totale pagato da p per tutti i suoi appartamenti. Ad
esempio, facendo riferimento alla lista sopra riportata, l'unità deve
produrre il file con le seguenti informazioni:
Mario Rossi 920.0
Luca Neri 980.0
L'unità di programma non deve alterare la lista l.
Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A. 1999-2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica,
Nucleare
Appello del 8 giugno 2000 -- 2a prova scritta
tempo a disposizione: 1 ora
Problema 2 (4 punti)
Illustrare le principali tecniche di verifica dei programmi.
Problema 3 (4 punti)
Si consideri il seguente programma Pascal:
program Mistero;
function Mistery(i,j: integer):integer;
begin
if j = 0
then Mistery:= i
else Mistery:= Mistery(i,j-1) - 1
end;
begin
writeln(Mistery(-7,4))
end.
- Descrivere cosa fa (non come lo fa) la funzione Mistery.
- Che valore viene stampato dal programma? Mostrare l'evoluzione della
pila dei record di attivazione.
- Fornire almeno un valore dei parametri attuali per i quali l'attivazione
della funzione Mistery non termina.
Problema 4 (4 punti)
Scrivere un sottoprogramma Fortran che, ricevendo come parametro una matrice di
interi di dimensione
con indici da 1 ad R per le righe e da 1 a
C per le colonne, calcoli e restituisca in modo opportuno al
programma chiamante il numero di elementi della matrice tali che il loro
valore è uguale alla somma dei loro indici di riga e di colonna.
Ad esempio, per la matrice
2 3 4
2 3 5
il numero di tali elementi è pari a quattro.