Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 29 gennaio 2013
Esercizio 1 (10 punti)
Una gara di sci a staffetta è organizzata in modo tale che ogni concorrente di una squadra, all’arrivo, debba premere un pulsante per aprire il cancello di partenza del concorrente successivo della propria squadra (tranne l’ultimo, ovviamente). Ogni squadra è composta da tre concorrenti. Il sistema memorizza l’orario di partenza e di arrivo di ogni concorrente in un vettore di strutture di tipo struct concorrente, definito come riportato a lato.
Poiché gareggiano quattro squadre alla volta, il sistema registra orari di partenza e arrivo in ordine cronologico, senza raggrupparli per squadra.
Si scriva una funzione in linguaggio C che riceva come parametri il nome di una squadra, il vettore di strutture sopra descritto e un intero che ne rappresenti la lunghezza. La funzione deve restituire il tempo totale, in secondi (numero reale) impiegato da tale squadra. Se una squadra non ha
terminato la staffetta, cioè nel vettore non compaiono tutti e tre i concorrenti della squadra, la funzione deve restituire -1.0.
Si suggerisce di scrivere la funzione
double differenza_in_secondi (struct ora orario1, struct ora orario2)
che restituisce la differenza in seconti tra i due orari passati come argomenti (orario2 successivo a orario1).
Esercizio 2 (15 punti)
Un file contiene le previsioni del tempo di una giornata, una previsione per riga. Ciascuna riga è formata da orario (ore e minuti nel formato hh:mm), temperatura prevista e previsione atmosferica (una stringa che può contenere anche spazi). La temperatura è un valore reale che può essere scritto sia in gradi Celsius che Fahrenheit (contraddistinti dalla lettera C oppure F). Come esempio, si consideri il seguente file.
01:30 0.8 C coperto con qualche pioggia 04:00 0.7 C pioggia debole
07:30 28.8 F pioggia debole 10:00 2.7 C pioggia debole 13:00 31.9 F pioggia debole 16:20 4.1 C pioggia debole 19:00 2.5 C pioggia e schiarite 21:15 -1.3 C sereno
22:10 0.2 C sereno
Si scriva una funzione in linguaggio C che riceva come parametro il nome di un file siffatto e restituisca, in una opportuna struttura dati, la temperatura minima della giornata (scritta in gradi Celsius), l'ora in cui è prevista e la relativa previsione atmosferica.
Si ricorda che la temperatura in gradi Celsius a partire da quella in gradi Fahrenheit si ottiene con la seguente formula: oC = (oF - 32) / 1,8.
Nell'esempio, la funzione dovrà restituire l'orario 7 e 30, la temperatura -1.778 (corrispondente a 28.8 oF) e la previsione “pioggia debole”.
Esercizio 3 (5 punti)
Facendo riferimento all’esercizio precedente, il nome del file contenente le previsioni è così strutturato:
località_giorno_mese_anno.txt (esempio: udine_29_1_2012.txt). Si scriva un programma in linguaggio C che riceva come argomenti sulla riga di comando il nome della località e una data e chiami la funzione descritta nell’esercizio precedente, stampando sul monitor i dati da essa restituiti.
struct ora {
int h;
int m;
double s;
};
struct concorrente {
char nome[64];
char squadra[32];
struct ora partenza;
struct ore arrivo;
};