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:

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:

  1. Scrivere le dichiarazioni dei tipi di dato Pascal da utilizzarsi per risolvere i punti successivi.
  2. 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.
  3. 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.

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.