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
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:
- una riga contenente due interi compresi fra 1 e 10, che rappresentano il
numero di righe m e di colonne n della griglia;
- m righe, ciascuna delle quali contiene n valori reali. Tali valori
sono le capacità di assorbimento (espresse in mm.) in 24 ore associate alle
celle della griglia.
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
Illustrare e confrontare fra loro le tecniche disponibili in Pascal e Fortran
per realizzare la comunicazione di dati fra sottoprogrammi.
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 }
- Descrivere cosa fa (non come lo fa) la funzione Ricorsiva.
- Che valore viene stampato dal programma quando vengono inserite da
tastiera le ultime tre cifre del proprio numero di matricola? Mostrare l'evoluzione della
pila dei record di attivazione.
- Fornire almeno un valore dei parametri attuali per i quali l'attivazione
della funzione Ricorsiva non termina.
Un file il cui nome fisico è di non più di 12 caratteri contiene 9 interi,
uno per riga.
Scrivere un sottoprogramma Fortran che:
- riceve come parametro una stringa che rappresenta il nome fisico
del file;
- dispone gli interi del file in una matrice 3
3, secondo
le righe;
- restituisce .TRUE. se la somma dei valori della diagonale
principale è maggiore o uguale a quelli della diagonale secondaria,
restituisce .FALSE. altrimenti.
Scrivere inoltre un programma principale che:
- usi l'unità progettata con il
file il cui nome fisico è DATI.TXT;
- se nella matrice rappresentata in tale file la somma dei valori della
diagonale principale è maggiore o uguale a quelli della diagonale
secondaria, stampi la stringa SI, altrimenti stampi la stringa
NO.