Salta ai contenuti. | Salta alla navigazione

Strumenti personali

9 febbraio 2012

Fondamenti di Informatica - Modulo A

Prof. Marco Gavanelli

9 febbraio 2012

 

Esercizio (punti 16)

Un'azienda effettua le prenotazioni dei viaggi in treno per dei commessi viaggiatori. Ciascun commesso viaggiatore prenota dei viaggi in treno, partendo da un certo punto (ad esempio, la città in cui abita), visitando alcune città e poi tornando al punto di partenza.

Tutte le prenotazioni dei viaggi (che sono al più 100) sono memorizzate nel file di testo viaggi.txt. Ciascuna prenotazione di viaggio contiene

  • nome viaggiatore: stringa contenente al più 20 caratteri, senza spazi
  • stazione di partenza: stringa contenente al più 20 caratteri, senza spazi
  • stazione di arrivo: stringa contenente al più 20 caratteri, senza spazi

L'azienda desidera controllare che ogni viaggiatore, dopo aver visitato una città, abbia una prenotazione per un'altra città; se non esiste una prenotazione in uscita da una città, bisogna segnalarlo come errore.

Ad esempio, se il file viaggi.txt contiene:

Rossi Bologna Firenze
Bianchi Palermo Catania
Rossi Firenze Roma
Verdi Padova Venezia
Verdi Ferrara Padova
Bianchi Catania Enna
Bianchi Enna Palermo

si dovrà segnalare che Rossi non ha un viaggio prenotato che parte da Roma e che Verdi non ha viaggi prenotati che partono da Venezia.

Si scriva un programma C che risolve il problema descritto; in altre parole, si deve scrivere un programma che controlla che per ogni viaggiatore che ha un viaggio prenotato per arrivare in una certa città X, egli abbia anche un viaggio prenotato che parte dalla città X.

Si utilizzi il seguente algoritmo:

  1. Il main deve invocare una funzione o procedura di lettura (punto 2) e una di verifica (punto 3).
  2. Si crei una funzione che preso in ingresso il nome del file, ne salvi i dati in un array di strutture opportunamente definito; la funzione deve anche visualizzare a video il contenuto dell'array.
  3. Si scriva una funzione che verifica che per ogni città visitata da ciascun viaggiatore, ci sia una prenotazione per far ripartire quel viaggiatore da quella città.

    Si consiglia, per eseguire questo punto, di utilizzare, nella funzione di verifica, una funzione che prende in ingresso

    • l'array letto al punto 2
    • il nome di un viaggiatore V
    • il nome di una stazione S
    (più, eventualmente, altri parametri) e fornisce
    • 1, se il viaggiatore V ha una prenotazione che parte dalla stazione S
    • 0, altrimenti

 

Facoltativo (punti 4)

Si modifichi il programma in modo che, oltre a mostrare quali viaggiatori non tornano alla stazione di partenza, mostri anche, per questi viaggiatori, l'intero percorso, dalla stazione di partenza iniziale a quella finale.

Nell'esempio sopra, il programma dovrà visualizzare:

Rossi: Bologna Firenze Roma
Verdi: Ferrara Padova Venezia

Si consegnino i file:

  • un file funzioni.c che contiene le funzioni comuni
  • un file main.c 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 facoltativo

più tutti i file header ritenuti necessari.