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
|
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:
Si organizzi il programma come segue.
- 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) - 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.
- 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. - 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 ilmain
e le funzioni usate solo nell'esercizio base - 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.