Salta ai contenuti. | Salta alla navigazione

Strumenti personali

22 dicembre 2014 p.m.

Fondamenti di Informatica modulo A

Prof. Marco Gavanelli

22 dicembre 2014 p.m.

 

Esercizio (punti 16)

In un paese si deve organizzare la pulizia delle strade; si è deciso che le strade vengono pulite con la seguente strategia: tutte le strade a Nord di Via Maggiore vengono pulite il martedì, mentre quelle a Sud di Via Maggiore vengono pulite il venerdì.

Si ha a disposizione un file di testo  strade.txt che contiene tutte le strade del paese; ogni strada è un segmento nel piano cartesiano, di cui si conoscono il nome e le coordinate degli estremi. Più precisamente, per ogni strada nel file strade.txt si hanno

  • quattro dati di tipo float: x1, y1, x2, y2 , che rappresentano le coordinate degli estremi del segmento
  • una stringa contenente, al massimo, 20 caratteri, senza spazi, che rappresenta il nome della strada

Il paese è attraversato da Via Maggiore; essa è rappresentata, nel piano cartesiano, dalla retta di equazione

y= x

2
.

Si sa che le strade sono al più 100 e che nessuna di queste attraversa di Via Maggiore: alcune sono strade traverse (partono da un punto di via Maggiore ed arrivano in un punto a Nord o a Sud di essa), altre hanno entrambi gli estremi a Nord, oppure entrambi a Sud, ma nessuna parte da un punto a Nord di Via Maggiore per arrivare ad un punto a Sud di essa.

Si scriva un programma C che visualizza, per ciascuna strada, se questa si trova a Nord o a Sud della Via Emilia.

Ad esempio, se il file strade.txt contiene:

 

3 1.5 4 0 Roma
-2 -1 -2 1 Falcone
-2 1 2 1 Borsellino
-2 -2 -2 1 Venezia

allora il programma dovrà visualizzare:

 

Roma Sud
Falcone Nord
Borsellino Nord
Venezia Sud

infatti, le strade saranno quelle rappresentate in figura:

compito del 22 dic 2014 pm

Si organizzi il programma come segue.

 

  1. nel main, si invochi una procedura o funzione che legge i dati dal file strade.txt (da sviluppare al punto 2) ed una che elabora i dati e visualizza i risultati (punto 3)
  2. Si scriva la procedura o funzione che legge il file strade.txt, ne porta il contenuto in un opportuno array di strutture e lo mostra a video.
  3. Si scriva una procedura o funzione che prende come parametri l'array letto al punto 2 (più, eventualmente, altri parametri) e visualizza i nomi delle strade del paese con a fianco la parola Nord o Sud a seconda se la via in questione si trova a Nord o a Sud di Via Maggiore. Per fare questo, si invochi per ciascuna via una funzione NordSud, da definire al punto 4, che fornisce un valore vero o falso a seconda se una strada si trova a Nord o a Sud di via Maggiore.
  4. Si definisca la funzione NordSud che prende come parametro una struttura rappresentante una strada e fornisce, come valore di ritorno
    • 1, se la strada si trova a Nord di Via Maggiore
    • 0, se la strada si trova a Sud di Via Maggiore

 

Esercizio 2 (punti 4)

Si modifichi ora il programma in modo tale che la procedura o funzione al punto 3 non visualizzi a video il risultato, ma costruisca due array di strutture: uno contenente tutte le vie a Nord ed uno contenente tutte le vie a Sud di Via Maggiore.

Il main dovrà poi invocare due volte (una per ciascuno dei due array creati) una stessa procedura o funzione che mostra l'array a video e che ne salva il contenuto su file. In questo modo, si dovranno creare due file di tipo binario:

  • uno si chiamerà nord.bin e conterrà tutte le vie a Nord di Via Maggiore;
  • l'altro si chiamerà sud.bin e dovrà contenere le vie a Sud di Via Maggiore.

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 base
  • 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.