22 dicembre 2014 - a.m.
Fondamenti di Informatica - Compito C
Prof. Marco Gavanelli
22 dicembre 2014
Esercizio (punti 16)
Un camion deve portare delle merci dal magazzino ai vari negozi di una azienda di supermercati. Il tragitto da percorrere è riportato in un file binario camion.bin; tale file contiene una sequenza di tappe, rappresentate da
- X,Y: coordinate sul piano di ciascuna delle tappe, tipo float
- Q: quantità di merce richiesta in kg, tipo int
La prima tappa è sempre il magazzino, poi il camion porta le merci ad una serie di negozi, poi deve tornare al magazzino a prendere altre merci da portare ad altri negozi, ecc., infine torna al magazzino. Il camion, infatti, non riesce in un unico viaggio a trasportare tutte le merci, perché può portare al massimo 10 tonnellate (10000kg). Per questo motivo, nel file camion.bin il magazzino compare più volte.
Ad esempio, se il file camion.bin contiene:
3.5 | 8.2 | 0 |
7.4 | 11 | 4000 |
-5 | 11 | 2000 |
-6 | 12 | 1000 |
3.5 | 8.2 | 0 |
-4 | -4 | 4000 |
3.5 | 8.2 | 0 |
-5.4 | -4.2 | 3500 |
11 | -7 | 4000 |
3.5 | 8.2 | 0 |
significa che il magazzino si trova alle coordinate (3.5, 8.2), dove il camion carica le merci per il primo viaggio. Il camion parte da lì e va al negozio che si trova alle coordinate (7.4,11), dove scarica 4000kg di merci, poi va al negozio alle coordinate (-5,11) dove scarica altri 2000kg di merci, poi porta 1000 kg di merci al negozio di coordinate (-6,12). In questo primo viaggio, il camion aveva quindi caricato (dal magazzino) 4000+2000+1000=7000kg di merci.
A questo punto, il camion torna al magazzino (infatti torna alle coordinate (3.5,8.2)). Da qui riparte per un secondo viaggio: va al negozio di coordinate (-4,-4) e vi scarica 4000kg di merci, poi torna al magazzino (3.5,8.2). Nel secondo viaggio il camion trasportava quindi 4000kg di merci.
Infine, parte per un terzo viaggio: va al negozio di coordinate (-5.4,-4.2) e vi scarica 3500kg di merci, poi va al negozio che si trova alle coordinate (11,-7) e vi scarica 4000kg di merci, infine torna al magazzino. In questo terzo viaggio ha quindi trasportato 4000+3500=7500kg di merci.
Purtroppo, in data odierna il camion ha avuto un guasto ed è in grado di trasportare al massimo 5000kg di merci. Si desidera quindi visualizzare quali dei viaggi non possono più essere effettuati.
Si scriva un programma C che, leggendo il file camion.bin, visualizza i viaggi in cui è necessario superare i 5000kg di merci. Nell'esempio precedente, il programma dovrà visualizzare a video:
Viaggio 1 carico eccessivo
Viaggio 3 carico eccessivo
in quanto nel primo viaggio è richiesto di trasportare 7000kg e nel terzo 7500kg.
Si organizzi il programma come segue:
- nel
main
, si invochi una procedura o funzione di lettura (da sviluppare al punto 2) ed una di elaborazione (punto 3) - Si scriva la procedura o funzione di lettura; essa legge il file camion.bin, ne porta il contenuto in un opportuno array di strutture e visualizza tale array. Il file camion.bin contiene al più 100 tappe.
- la procedura o funzione di elaborazione prende come parametri l'array letto al punto 2 (più, eventualmente, altri parametri) e visualizza i viaggi in cui il peso totale supera i 5000kg.
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 lo fornisca al main
in un opportuno array di strutture, che rappresentano i viaggi. L'array deve contenere solo i viaggi in cui le merci trasportate superano le 5 tonnellate; ciascun elemento dell'array dovrà contenere, per ogni viaggio:
- il numero corrispondente al viaggio
- il peso totale delle merci da trasportare in quel viaggio
Il main
dovrà poi invocare una procedura di stampa che, preso come parametro tale array di strutture (più, eventualmente, altri parametri), mostri a video l'array. Nell'esempio precedente si dovrà visualizzare:
Viaggio 1 carico eccessivo: 7000kg
Viaggio 3 carico eccessivo: 7500kg
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.