11 febbraio 2015
Fondamenti di Informatica modulo A - Compito A
Prof. Marco Gavanelli
11 febbraio 2015
Esercizio 1 (punti 16)
In caso di contaminazione dell'acqua dell'acquedotto, si devono aprire gli idranti della città, in modo che l'inquinante venga disperso velocemente. Per effettuare questo, è necessario mandare delle squadre di tecnici ad aprire gli idranti. Gli idranti sono al più 100. Il piano di svuotamento è salvato in un file binario idranti.bin e contiene la sequenza di idranti da aprire. Per ciascun idrante, esso contiene:
- squadra (stringa contenente al massimo 15 caratteri, compreso il terminatore): nome della squadra
- x,y (di tipo
int
): coordinate dell'idrante nel piano cartesiano
Sapendo che il punto di partenza è alle coordinate (0,0), si desidera sapere qual è la squadra che deve raggiungere il punto più lontano dall'origine, come distanza euclidea.
Ad esempio, se il file idranti.bin contiene:
1 | 1 | ROSSO |
10 | 0 | VERDE |
2 | 2 | ROSSO |
10 | 10 | BIANCO |
4 | 0 | ROSSO |
10 | 9 | BIANCO |
0 | 10 | VERDE |
3 | 4 | BLU |
allora la squadra che arriva alla massima distanza dall'origine è la squadra di colore BIANCO, che arriva ad una distanza di √{102+102} dall'origine.
Si organizzi il programma come segue:
- nel
main
, si invochi una funzione di lettura (da implementare al punto 2) ed una di calcolo della squadra che arriva alla distanza massima (punto 3), poi si visualizzi (nelmain
) il nome della squadra che arriva alla distanza massima. - si implementi la funzione (o procedura) di lettura. Tale funzione deve leggere il file idranti.bin e portarne il contenuto in un opportuno array di strutture. Si mostri a video l'array.
- Si implementi la funzione (o procedura) che calcola la squadra che arriva alla distanza massima dall'origine degli assi. Tale funzione deve ricevere come parametro l'array letto al punto 2 (più eventualmente altri parametri) e deve fornire al
main
il nome della squadra che ha raggiunto il punto più lontano dall'origine. Per fare questo, questa funzione deve invocare una funzione di calcolo della distanza euclidea (da implementare al punto 4) - Si implementi la funzione di calcolo della distanza euclidea di un idrante dall'origine degli assi. Tale funzione deve prendere come parametro una struttura che rappresenta un idrante e fornire la distanza euclidea dell'idrante dall'origine degli assi.
Esercizio 2 (punti 4)
Si desidera ora calcolare qual è la squadra che deve percorrere la strada più lunga, sempre calcolando le distanze rispetto alla distanza euclidea.
Nell'esempio precedente,
- la squadra di colore ROSSO parte da (0,0), poi va in (1,1), poi in (2,2), poi in (4,0); in totale percorre 5.66km.
- La squadra di colore BLU va da (0,0) a (3,4), percorrendo quindi 5km.
- La squadra VERDE va da (0,0) a (10,0), poi a (0,10), percorrendo in totale 24.14km.
- Infine, la squadra di nome BIANCO va da (0,0) a (10,10) a (10,9), per un totale di 15.14km.
Quindi che la squadra che percorre più km è la VERDE.
Si consegnino i file:
- un file
COGNOME.c
(dove COGNOME va sostituito col cognome dello studente) che contiene ilmain
e le funzioni usate solo nell'esercizio 1 - un file
facoltativo.c
che contiene ilmain
e le funzioni usate solo nell'esercizio 2 - un file
funzioni.c
che contiene le funzioni comuni
più tutti i file header ritenuti necessari.
Nella correzione, il docente creerà due progetti:
- in uno, inserirà i file
COGNOME.c
efunzioni.c
. L'eseguibile che viene creato dovrà risolvere l'esercizio 1. - nell'altro, inserirà i file
facoltativo.c
efunzioni.c
. L'eseguibile che viene creato dovrà risolvere l'esercizio 2.