Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 5 luglio 2016
Esercizio 1 (16 punti)
Si vuole realizzare, in linguaggio C, una piccola macchina calcolatrice programmabile, cioè in grado di eseguire una sequenza di calcoli scritta in un file.
La macchina sarà in grado di eseguire le quattro operazioni aritmetiche e gli operandi saranno esclusivamente numeri reali (eventuali numeri espressi come interi nel file di ingresso saranno convertiti in reali).
Inoltre, la macchina dispone di 100 celle di memoria dove memorizzare i dati. Al termine dell’esecuzione delle operazioni specificate nel file di ingresso il programma dovrà stampare i valori contenuti in tutte e sole le celle di memoria che sono state utilizzate.
Il formato del file di ingresso può essere dedotto dall’esempio a fianco.
I termini delle espressioni sono separati da uno o più spazi. Ogni riga contiene sempre una sola espressione sempre composta da un’assegnazione e un operatore aritmetico binario.
Si scriva un programma che riceva sulla riga di comando il nome di un file siffatto e stampi il risultato dell’elaborazione visualizzando, come detto sopra, tutte e sole le celle di memoria che sono state utilizzate.
Relativamente all’esempio, il programma deve stampare quanto riportato nel riquadro a fianco.
Suggerimento: si scriva la funzione double valore (...) che riceve come argomento una stringa rappresentante un operando (indifferentemente un numero o una cella di memoria) e la rappresentazione delle celle di memoria, ne interpreta il formato e ne restituisce il valore.
Esercizio 2 (14 punti)
Dovete organizzare il trasporto dei vostri amici per andare a una festa fuori città. Alcuni dispongono della propria auto e si sono già accordati con altri per andare insieme, ma in molte auto restano ancora posti liberi. Inoltre, alcuni amici non dispongono di auto propria e non hanno ancora trovato un passaggio. Scopo dell’esercizio è organizzare il trasporto in modo che nessuno resti a piedi (se ci sono abbastanza auto), oppure segnalare la necessità di trovare altri mezzi di trasporto.
Il file di testo con_auto.dat contiene l’elenco delle persone che si sono già organizzate. Ogni riga corrisponde ad un’auto e contiene l’indicazione dei posti totali disponibili seguita dall’elenco delle persone già assegnate a tale auto. Per esempio:
(4) mario, lucia;
(5) pier giuseppe, maria stefania, giulia, filippo alberto, luciana;
(5) francesca, gian mario, pier luigi francesco;
(4) antonella;
Si assuma che non ci siano omonimie e che il file non contenga errori, né nel formato né nel numero di persone in relazione al numero di posti disponibili.
Un secondo file di testo, di nome senza_auto.dat contiene i nomi, uno per riga, degli amici senza auto e ancora senza un passaggio. Si veda l’esempio a fianco.
Il programma deve generare il file di testo passaggi.dat, contenente gli elenchi delle
persone che condivideranno ciascuna auto, assegnando in ordine tutti i posti liberi (si trascuri la possibilità di rendere più uniforme la distribuzione dell’occupazione dei posti).
Relativamente all’esempio di cui sopra, il programma dovrà generare il seguente file:
mario, lucia, maria, luca;
pier giuseppe, maria stefania, giulia, filippo alberto, luciana;
francesca, gian mario, pier luigi francesco, mario alberto;
antonella;
Se nel file senza_auto.dat sono presenti più persone dei posti disponibili, il programma deve segnalare un errore.
m[7] = 2.5 * 4 m[12] = -1.4 + m[7]
m[12] = m[12] - 2.0 m[0] = m[12] / m[7]
m[0] = 0 - m[0]
m[0] = -0.66 m[7] = 10 m[12] = 6.6
maria;
luca;
mario alberto;