Sei sulla pagina 1di 3

TUTORAGGIO INFORMATICA

Settimana 6
Le strutture dati, argomenti su linea di comando

PROBLEMA 1: gestionale studenti [struttura statica]


Si scriva un programma che gestisca i dati anagrafici degli studenti del Politecnico di Torino. Ogni studente è
caratterizzato da una matricola del tipo SXXXXXX dove X rappresenta un intero tra [0,9], un cognome (max
25 car.), un nome (max 25 car.) e e una data di nascita nel formato gg/mm/aaaa.
Il programma in particolare oltre all’eseguibile riceve da linea di comando un numero intero tra 0 - 2. In base
al valore passato il programma dovrà, dopo aver definito tramite typedef la struttura dati Studente:
a) Se il valore = 0: caricamento studente
Chiedere tramite un unica scanf(…) i dati di ogni studente e inserirli in fondo al contenuto del vettore di
tipo Studente, contenente appunto gli studenti del Polito. Controllare che venga assegnata ad uno
studente una matricola NON ancora data ad altri.
In caso negativo (la matricola è stata già assegnata) stampare un messaggio di errore e terminare,
altrimenti caricare lo studente e terminare.
b) Se il valore = 1: ricerca studente
Chiedere tramite scanf(…) una matricola, nel formato sopra descritto, e ricercare all’interno della
struttura dati se esiste uno studente con quella matricola e stampare a video i suoi dati e terminare.
c) Se il valore = 2: modifica data nascita
Chiedere tramite scanf(…) una matricola, nel formato sopra descritto, e ricercarla all’interno della
struttura dati: se esiste uno studente con quella matricola, chiedere un valore tra 1 e 12 che rappresenta il
nuovo mese di nascita tramite scanf(…). Modificare così la data di nascita e quindi il valore nella
struttura dati solo per quello studente e terminare.

Dato che NON si è ancora visto i file, supporre di partire già con una struttura dati di partenza,
caricando all’interno del main un vettore di tipo Studente staticamente, prima di fare il controllo
sull’argomento a linea di comando. Si usino i seguenti dati come partenza:

#define N 100
Studente s[N] ={
{“S000000“, “Rossi“, “Mario“, “12/12/2000“},
{“S000001“, “Gialli“, “Ermenegildo“, “11/01/2000“},
{“S000002“, “Rossi“, “Pluto“, “22/03/1999“}
};

Supporre che tutti gli inserimenti siano corretti. Utilizzare inoltre funzioni, se ritenuto necessario, per avere
una miglior leggibilità e riutilizzare parti di codice usate in più punti del programma.

Approfondimento: (dopo aver affrontato i file)


a) Leggere i dati contenuti all’interno di un file con formato per ogni riga:
<Matricola> <Cognome> <nome> <data>

b) Passare su linea di comando come terzo paramentro il path del file.

c) Ogni aggiunta o modifica di qualche riga nella struttura dati devono aggiornare il contenuto del file
passato come parametro, in modo tale da farlo rimanere permanente nel tempo e riutilizzabile per altre
esecuzioni (tutte le modifiche effettuate da programma vanno scritte sul file letto). Il numero di righe del
file non è noto a priori.
TEMA D’ESAME DEL 16 giugno 2016 (12BHD) TURNO A1

PROGRAMMAZIONE [TESTO ORIGINALE]


Si realizzi un programma per calcolare la bolletta telefonica degli utenti di un operatore di telefonia mobile.
I dati sono contenuti in una base dati che consiste in un file di testo denominato “clienti.dat” in cui ogni
riga
descrive una telefonata nel seguente formato:
<numero_telefonico> <data> <orainizio> <orafine> <numero amico>
Il numero telefonico è una stringa alfanumerica lunga al massimo 15 caratteri che indica il numero di telefono
del
chiamante, la data è una stringa nel formato GG/MM/YYYY, l’ora inizio e l’ora fine sono due
stringhe di 8 caratteri nel formato HH:MM:SS e numero amico è un carattere che assume il valore
‘S’ nel caso la chiamata sia verso un numero amico ‘N’ nel caso la chiamata sia verso un
numero non amico.
Si assuma che le chiamate inizino e finiscano sempre nello stesso giorno, che il formato del file sia corretto e
che il numero di righe del file non sia noto a priori.
La tariffa pagata per una chiamata dipende unicamente dall’ora d’inizio della stessa. La giornata
è divisa in quattro fasce orarie (fascia 1: 00:00:00 - 05:59:59; fascia 2: 06:00:00 - 11:59:59; fascia 3:
12:00:00 - 17:59:59; fascia 4: 18:00:00 - 23:59:59). Il costo di una chiamata che inizia in fascia X sarà
calcolato sulla base del costo della fascia X anche se a causa della sua lunghezza la chiamata dovesse
terminare nella fascia X+1. I costi delle fasce sono contenuti in un file denominato tariffe.txt. Il file è
composto da 4 righe (una per ogni fascia). Ogni riga contiene il costo per unità di 30 secondi di chiamata per
la rispettiva fascia con la precisione dei centesimi di euro. Nel caso di chiamata di un numero amico il costo
viene scontato al 50%. Per chiamate di durata non multipla di 30 secondi si arrotonda la durata per eccesso.

Ad esempio:
Clienti.dat
3472222222 01/01/2011 10:10:12 10:11:10 S
3472222222 02/01/2011 15:10:12 16:11:20 N
3471111111 01/01/2011 11:10:12 11:21:10 N
3472222222 08/01/2011 21:20:12 22:13:09 N
3471111111 01/02/2011 11:15:00 11:15:10 N
3472222222 10/02/2011 21:20:12 22:11:10 N

tariffe.txt
0.23
0.51
0.65
0.12

Il programma riceve sulla linea di comando il numero di telefono di un utente e un numero tra 1 e 12
indicante un mese e deve stampare in output:
a) la bolletta da pagare nel mese,
b) il numero di chiamate nel mese,
c) e lo sconto totale ottenuto per le chiamate a numeri amici.

Ad esempio:
C:\> PROG.EXE 3472222222 1
Bolletta telefonica: 93.18 Euro
Numero di chiamate: 3
Sconto ricevuto: 0.51 Euro

Dato che i file non li avete ancora visti, SUPPORRE che: avete già letto i file correttamente e caricato
all’interno di OPPORTUNE strutture dati i loro contenuti. Risolvere tutti gli altri punti.
TEMA D’ESAME DEL 13 luglio 2012 (12BHD) TURNO AA

Programmazione [TESTO ORIGINALE]


Si realizzi un programma in C per consultare un file di testo contenente i consumi di luce, acqua e gas. Ogni
riga del file, riferita a un determinato bimestre, è caratterizzata dai seguenti campi separati da uno spazio
l’uno dall’altro.
<tipo-consumo> <N1> <N2> <N3> <N4>
Il tipo-consumo è un carattere che può assumere tre valori: ‘L’ (luce), ‘G’ (gas), e ‘A’ (acqua). N1, N2, N3 e
N4 sono 4 numeri reali che rappresentano le letture sequenziali di un tipo di contatore, effettuate in un
bimestre. Per la luce l’unità di misura è il KW (KiloWatt) , per il gas e l’acqua è il m3 (metro cubo).
Si facciano le seguenti assunzioni:
a) il numero di righe del file non è noto a priori,
b) il formato del file sia corretto,
c) N1 presente sulla prima riga di ogni tipo-consumo è corretto.

Un file di esempio è il seguente:


L 150.50 165.18 182.16 200.50
G 768.12 876.27 976.56 958.12
A 1250.15 1252.55 1260.60 1265.15
L 200.50 245.30 260.10 275.00
A 1450.15 1523.54 1245.17 1278.23
G 958.12 1000.65 1040.78 1068.12
Si realizzi un programma per visualizzare alcune informazioni sui consumi di luce, acqua e gas. Il
programma riceve da linea di comando il nome del file contenente i consumi e deve:
a) verificare, per ogni tipo di consumo, che i valori numerici presenti su ogni riga sia una sequenza
crescente. Se la sequenza è crescente, il consumo reale del bimestre è pari alla differenza tra N4 e N1,
altrimenti si consideri un consumo forfettario bimestrale pari a 120 KW per la luce, 240 m3 per il gas,
oppure 20 m3 per l’acqua;
b) verificare, per ogni tipo di consumo, che N1 di una riga sia uguale a N4 della riga precedente associata
allo stesso tipo di consumo (e.g., N1 della quarta riga, associata alla luce, è uguale a N4 della riga
precedente associata alla luce). Se la condizione non è verificata, stampare un messaggio (vedi
esempio).
c) Per ogni tipo di consumo visualizzare sullo schermo le seguenti informazioni:
1) il consumo totale,
2) la spesa totale, considerando che il costo della luce è pari a 0.60 Euro/KW, del gas è 0.4Euro/m3, e
dell’acqua è 1.33 Euro/m3,
3) la spesa media bimestrale (spesa totale/numero di bimestri considerati).

Ad esempio:
C:\> PROG-TDE13072012.EXE consumi.txt
Riga 5: A N1=1450.15 diverso da N4_precedente=1265.15

Tipo consumo Consumo Totale Spesa totale Spesa media bimestrale


Gas 350.00 m^3 140.00 Euro 70.00 Euro
Luce 124.50 KW 74.70 Euro 37.35 Euro
Acqua 35.00 m^3 46.55 Euro 23.28 Euro

Dato che i file non li avete ancora visti, SUPPORRE che: avete già letto i file correttamente e caricato
all’interno di OPPORTUNE strutture dati i loro contenuti. Risolvere tutti gli altri punti.

SONO STATI INSERITI PARTI DI TEMI D’ESAME DAL CORSO INFORMATICA 12BHD
del Politecnico di Torino