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 28 giugno 2000 -- 1a prova scritta
tempo a disposizione: 2 ore

Problema 1 (18 punti)

Un'organizzazione per il controllo e il monitoraggio ambientale rappresenta in un file di testo (denominato file di assorbimento) informazioni relative alla capacità di assorbimento delle precipitazioni da parte del suolo. Le informazioni sono relative ad una porzione rettangolare di territorio che, a questo scopo, è stata decomposta in una griglia di celle (ancora rettangolari). Il file ha il seguente formato:

Un esempio di file di assorbimento potrebbe essere il seguente.

  2 3
  12.5 11.2 12.0
  11.7 10.3 10.9
Tale file è relativo ad una porzione rettangolare di territorio che è stata suddivisa in una griglia contenente 6 celle.

L'organizzazione riceve quotidianamente dal servizio meteorologico le previsioni di precipitazioni nelle prossime 24 ore. Tali informazioni sono memorizzate in file (denominati file di pioggia) che hanno il medesimo formato dei file di assorbimento, ma in cui i reali associati alle celle rappresentano la previsione di pioggia (in mm.) nelle 24 ore. Le informazioni vengono usate per determinare lo stato di rischio delle celle: 0 (la previsione p è inferiore alla capacità di assorbimento a, normalità), 1 ( , attenzione) o 2 (p>2a, allarme).

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 riceve come parametri di ingresso i nomi fisici di un file di assorbimento e di un file di pioggia relativi alla medesima porzione di territorio, e il nome fisico r di un terzo file (file di risultati), e scrive su r i valori interi che indicano lo stato di rischio delle celle. Ad esempio, con riferimento al file di assorbimento dell'esempio precedente, ed ipotizzando di ricevere dal servizio meteo il seguente file di pioggia:
  2 3
  29.0 21.1 17.5
  11.8 9.6 10.5
Il file di risultati deve contenere i seguenti dati (si noti che il file non contiene le dimensioni della griglia):
  2 1 1
  1 0 0

3.
Scrivere una (o più) unità di programma Pascal che riceva come parametro di ingresso il nome fisico di un file di risultati e restituisca in maniera opportuna una lista contenente gli indici delle celle con stato di rischio pari a 0, seguiti dagli indici delle celle con stato di rischio pari a 1 ed infine dagli indici delle celle con stato di rischio pari a 2.

Con riferimento al file di risultati dell'esempio precedente, la funzione deve restituire la seguente lista:

   __    __________    __________    __________     __________    __________    _________
  |  |  |   |   |  |  |   |   |  |  |   |   |  |   |   |   |  |  |   |   |  |  |   |   | |
l | -+->| 2 | 2 | -+->| 2 | 3 | -+->| 1 | 2 |  -+->| 1 | 3 | -+->| 2 | 1 | -+->| 1 | 1 |\|
  |__|  |___|___|__|  |___|___|__|  |___|___|__|   |___|___|__|  |___|___|__|  |___|___|_|


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 28 giugno 2000 -- 2a prova scritta
tempo a disposizione: 1 ora

Problema 2 (4 punti)

Illustrare e confrontare fra loro le tecniche disponibili in Pascal e Fortran per realizzare la comunicazione di dati fra sottoprogrammi.

Problema 3 (4 punti)

Si consideri il seguente programma Pascal.
program Main;
  function Ricorsiva(primo, secondo : integer): integer;
  begin
    if primo >= secondo then
      Ricorsiva := 0
    else
      Ricorsiva := 1 + Ricorsiva(primo*2, secondo);
  end; { Ricorsiva }
  var i :  integer;
begin
  writeln('Inserire le ultime tre cifre del proprio numero di matricola');
  readln(i);
  writeln(Ricorsiva(1,i));
end. { Main }

Problema 4 (4 punti)

Un file il cui nome fisico è di non più di 12 caratteri contiene 9 interi, uno per riga.

Scrivere un sottoprogramma Fortran che:

Scrivere inoltre un programma principale che: