Università di Roma "La Sapienza"
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A. 1999/2000
Corso di Laurea:
Ambiente e Territorio
Appello del 28 giugno 2000 - prima prova scritta
tempo a disposizione: 2 ore

 

Problema 1 (18 punti)

Una organizzazione per il controllo e il monitoraggio ambientale gestisce 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). Nel file, per ogni cella della griglia, è presente il numero di mm. (reale) di pioggia che il suolo associato alla cella può assorbire in 24 ore.

Più precisamente, il file ha il seguente formato:

Un esempio di file di assorbimento potrebbe essere il seguente.

  Zona municipale di Topolinia
  700.1 550.8
  2 3
  12.5 11.2 12.0
  11.7 10.3 10.9

Tale file è relativo ad una porzione rettangolare di territorio, di dimensioni m. 700.1 × m. 550.8, che è stata suddivisa in una griglia 2×3 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 (a £ p £ 2a, attenzione) o 2 (p > 2a, allarme).

Si richiede di risolvere i seguenti punti:

  1. Scrivere le dichiarazioni dei tipi di dato C da utilizzarsi per risolvere i punti successivi. Qualora si utilizzino variabili globali motivare adeguatamente la scelta.
  2. Scrivere una funzione C (o più) 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 di un terzo file (file di risultati, testuale) e scrive in quest'ultimo la stringa contenente le informazioni testuali relative alla porzione di territorio e, a partire da una nuova riga, i valori interi che indicano lo stato di rischio delle celle ad essa relative.

    Ad esempio, con riferimento al file di assorbimento dell'esempio precedente, ed ipotizzando di ricevere dal servizio meteo il seguente file di pioggia:

    Zona municipale di Topolinia
      700.1 550.8 2 3 29.0 21.1 17.5 11.6 9.6 10.5 
    la funzione dovrebbe creare il seguente file di risultati (si noti che il file non contiene le dimensioni della griglia):
    Zona municipale di Topolinia 2 1 1 0 0 0 
  3. Scrivere una funzione C (o più) che riceve come parametro di ingresso il nome fisico di un file di risultati e restituisce, attraverso opportuni parametri di output e/o valori restituiti dalla funzione, un array 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 assorbimento dell'esempio precedente, la funzione deve restituire il seguente array:
    1 0 (cella 0)
    1 1 (cella 1)
    1 2 (cella 2)
    0 1 (cella 3)
    0 2 (cella 4)
    0 0 (cella 5)


Università di Roma "La Sapienza"
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A. 1999/2000
Corso di Laurea:
Ambiente e Territorio
Appello del 28 giugno 2000 - seconda prova scritta
tempo a disposizione: 1 ora

 

Problema 2 (4 punti)

Illustrare e confrontare fra loro le tecniche disponibili in C per realizzare la condivisione di dati fra sottoprogrammi.

 

Problema 3 (4 punti)

Si consideri il seguente programma C.

    #include <stdio.h>

    unsigned int ricorsiva(unsigned int primo, unsigned int secondo)
    {
        if(primo>=secondo)
            return 0;
        else
            return 1+ricorsiva(primo*2,secondo);
    }

    int main(void)
    {
        unsigned int i;
        scanf("%u",&i);
        printf("%u\n",ricorsiva(1,i));
        return 0;
    }

 

Problema 4 (4 punti)

Data la relazione Volo(CodiceVolo, Partenza, Destinazione, Durata), scrivere una interrogazione SQL che costruisca l'elenco (codici) dei voli che collegano Roma a New York tramite Londra, con un tempo di volo totale non superiore alle 11 ore.

Descrizione degli attributi:

Orali e verbalizzazioni: mercoledì 5/7/2000, h 9:30, V. Salaria 113, 2o piano, aula C3.

 


File translated from TEX by TTH, version 2.25.
On 5 Jul 2000, 19:44.