Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

  1. 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 (nel main) il nome della squadra che arriva alla distanza massima.
  2. 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.
  3. 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)
  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 il main e le funzioni usate solo nell'esercizio 1
  • un file facoltativo.c che contiene il main 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 e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 1.
  • nell'altro, inserirà i file facoltativo.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 2.