testo esame in formato PDF

Transcript

testo esame in formato PDF
Fondamenti di Programmazione
CdL in Ingegneria Informatica, Elettronica e delle Telecomunicazioni
a.a. 2015/2016
Docente: Prof. Andrea Prati
Prova del 15 giugno 2016
Istruzioni per l’esame in laboratorio
Scrivere un programma in linguaggio C (singolo file sorgente chiamato <matricola>.c) che abbia
il comportamento descritto nel seguito. Il tempo a disposizione è di 120 minuti. Al termine del
tempo gli elaborati salvati su Z:\ verranno raccolti automaticamente dal sistema di laboratorio.
Eventuali documenti sono disponibili in P:\Prati. Si consiglia di copiare i file in Z:
Durante la prova non è possibile uscire (ad esempio, per andare in bagno). Nel caso di
turni multipli d’esame non è neanche possibile uscire anticipatamente nel caso ci si voglia
ritirare o consegnare in anticipo.
Testo dell’esame
Il programma da realizzare dovrà simulare la gestione di flotte di camion per le consegne in un
magazzino nell’arco di 8 ore di un giorno. I camion sono caratterizzate delle seguenti informazioni:
 Tipologia della merce trasportata, memorizzata mediante un carattere che può assumere
il valore ‘A’ per indicare il trasporto di alimentari, ‘E’ per indicare il trasporto di
elettrodomestici e ‘M’ per indicare il trasporto di mobili
 Orario di arrivo al magazzino, indicato come un intero da 1 a 480 minuti (8 ore da 60
minuti)
 Tempo necessario per lo scarico della merce, indicato da un intero rappresentante i minuti
necessari per lo scarico
 Quantità di materiale da scaricare, come intero
Il magazzino è organizzato in un certo numero di “portali”. Ciascuno di essi è caratterizzato della
seguenti informazioni:
 Tipologia della merce che immagazzina, sempre come carattere e con valore ‘A’, ‘E’ o ‘M’
 Capacità massima, memorizzata come numero intero positivo, maggiore o uguale a 100
 Capacità residua (cioè quantità di merce che può ancora immagazzinare), memorizzata
come numero intero positivo
 Un puntatore al camion attualmente servito
Il programma dovrà quindi:
1. Definire tre code A, E e M mediante liste singolarmente concatenate che devono
contenere i camion in attesa di essere serviti. Ogni nodo della coda deve contenere i dati
del camion come sopra-riportati. Notare che il campo tipologia della merce è superfluo,
ma lo riportiamo comunque.
2. Richiedere all’utente di indicare il numero di “portali” del magazzino ed allocare
dinamicamente un array di record con i campi sopra-indicati per ciascun portale. Per ogni
portale si dovrà chiedere all’utente di indicare la tipologia della merce che immagazzina e
la capacità massima. Si controlli che l’utente inserisca dati corretti (numero di portali >=1,
tipologia della merce che sia o ‘A’, o ‘E’ o ‘M’ e capacità massima >=100).
3. Iniziare iterativamente un ciclo per contare i minuti ipotizzando una giornata da 8 ore
(quindi minuti da 1 a 480). Ad ogni iterazione (minuto), il programma deve stampare il
minuto corrente e:
Tempo MASSIMO a disposizione per la soluzione: 120 minuti
a. Generare un numero casuale per determinare se arriva un nuovo camion. Il
numero casuale da generare dovrà essere compreso tra 0 e 100, e nel caso il
valore sia minore o uguale a 40, un nuovo camion arriva. Nel caso di arrivo di
nuovo camion, deve:
i. generare un terzo numero casuale tra 1 e 20 che indica il numero di minuti
necessari allo scarico del materiale
ii. generare un quarto numero casuale tra 1 e 100 che indica la quantità di
materiale da scaricare
iii. generare un altro numero casuale tra 0 e 10: se il numero è pari, il camion
trasporta alimentari, altrimenti se il numero è multiplo di 3 trasporta mobili,
altrimenti (tutti i casi non indicati sopra) trasporta elettrodomestici.
iv. stampare a video le informazioni del camion appena arrivato
v. accodare il camion nella coda corrispondente
b. per ogni portale, qualora vi siano camion in scarico in un certo portale, deve:
i. diminuire il tempo di scarico del camion
ii. se il tempo di scarico arriva a zero, liberare il portale e stampare a video il
fatto di aver finito di servire un camion
c. Se ci sono portali liberi o liberati nel precedente punto e la coda corrispondente
non è vuota, deve:
i. prelevare il prossimo camion dalla coda, verificando però che la quantità di
materiale da scaricare sia minore o uguale alla capacità residua del
magazzino. Se così non è il programma deve proseguire con il prossimo
portale. Se nessun portale del tipo corretto ha la capacità necessaria per la
merce da scaricare il camion viene lasciato in coda.
ii. inserire l’eventuale camion disponibile nel portale corrispondente
iii. stampare a video di aver servito il camion
d. Generare un numero casuale tra 1 e 10 e aumentare la capacità residua di tutti i
portali di quella quantità (i portali vengono svuotati man mano dai magazzinieri, si
suppone per semplicità tutti della stessa quantità ogni minuto).
4. Il programma deve anche tenere traccia del tempo medio di attesa dei camion e stamparlo
a video. Il tempo di attesa si calcola come la differenza tra il tempo di arrivo del camion e
il tempo di inserimento del camion all’interno di un portale.
Tempo MASSIMO a disposizione per la soluzione: 120 minuti