Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta dell’8 settembre 2017
Esercizio 1 (16 punti)
Il sistema informatico di una scuola memorizza gli esiti delle interrogazioni nel formato che si può dedurre dal file a lato. Poiché le registrazioni arrivano via rete dalle diverse sedi della scuola, non è garantito l’ordine
cronologico delle righe del file. I voti sono sempre interi e non ci sono omonimie tra gli studenti.
A causa di un guasto (avvenuto di notte), per un certo tempo le registrazioni sono proseguite su un sistema di backup che aveva copia delle registrazioni eseguite fino a quel momento. Ripristinato il sistema principale, ci si è ritrovati con due versioni del file delle registrazioni: una, nel sistema principale, contenente quelle eseguite fino al momento del guasto (che sono anche già state registrate
nel database della scuola) e una, nel sistema di backup, contenente anche quelle successive al guasto (v. esempio a lato). Si osservi che anche nel file di backup l’ordine delle righe non è cronologico ed è anche differente da quello del file principale. Il numero di registrazioni, sia nel file principale che in quello di backup, è ignoto.
È quindi necessario selezionare dal file di backup le registrazioni successive alla data del guasto (che è la data più recente presente nel file principale). Inoltre, tali registrazioni selezionate devono essere convertite nel formato necessario per l’inserimento nel database. Per esempio, se i file principale e di backup sono quelli sopra riportati, i comandi che devono essere generati sono i seguenti:
insert bianchi/luigi/italiano e letteratura/3 insert verdi/mario/geografia/8
essendo il 13/5/2016 la più recente data presente nel file principale ed essendo le registrazioni del 14/5/2016 le sole successive a tale data presenti nel file di backup.
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome del file principale e il nome del file di backup e stampi sullo schermo i comandi per l’inserimento nel database delle registrazioni selezionate come sopra descritto e nel formato dell’esempio.
NOTA: si può assumere siano già disponibili esclusivamente le funzioni della libreria standard del linguaggio C. Eventuali funzioni di manipolazione o confronto di date dovranno essere scritte.
Esercizio 2 (14 punti)
Un sito web, per profilare gli utenti, ha chiesto a ciascuno quali sport pratica e ha memorizzato i dati in un file di testo il cui formato può essere dedotto dal seguente esempio:
Si osservi che:
- il nome dell’utente e tutti gli sport sono sempre scritti in una sola parola, senza spazi;
- il nome dell’utente è seguito dal numero degli sport da lui/lei praticati e poi dall’elenco degli stessi.
Si assuma che il massimo numero di sport elencati sia 100.
Si scriva un programma in linguaggio C che riceva sulla riga di comando un file nel formato sopra descritto e stampi l’elenco degli sport presenti nel file (in un ordine qualsiasi) con, per ciascuno, il numero di utenti che lo praticano. Relativamente all’esempio sopra riportato, il programma dovrà stampare:
mountain_bike 1 ciclismo_su_strada 3 scialpinismo 1
corsa 2
pattinaggio_a_rotelle 1 pattinaggio_su_ghiaccio 2 bodybuilding 1
equitazione 1
13/5/2016 geografia: luigi, de rossi, 6
10/5/2016 italiano e letteratura: ugo, serra, 4 13/5/2016 storia: pier paolo, de santis, 7 12/5/2016 scienza e tecnologia: mario, verdi, 8
13/5/2016 geografia: luigi, de rossi, 6
10/5/2016 italiano e letteratura: ugo, serra, 4 13/5/2016 storia: pier paolo, de santis, 7 14/5/2016 geografia: mario, verdi, 8
12/5/2016 scienza e tecnologia: mario, verdi, 8 14/5/2016 italiano e letteratura: luigi, bianchi, 3
Sabry76: 3 mountain_bike ciclismo_su_strada scialpinismo
UnkUnk60: 4 corsa pattinaggio_a_rotelle pattinaggio_su_ghiaccio arrampicata BadGuy92: 2 bodybuilding ciclismo_su_strada
Pink85: 4 equitazione corsa pattinaggio_su_ghiaccio ciclismo_su_strada