14 gennaio 2016
Fondamenti di Informatica - Compito A
Prof. Marco Gavanelli
14 gennaio 2016
Esercizio (punti 16)
Si desidera avere un programma C che legge una data da tastiera e la stampa con tre numberi interi separati dalla barra. Più in dettaglio, la data in ingresso è una struttura (che chiameremo struttura in ingresso); deve essere inserita dall'utente da tastiera con i seguenti campi:
- giorno: intero
- mese: stringa
- anno: intero
L'utente è libero di scrivere la data inserendo il mese in diversi modi. Ad esempio, se vuole inserire la data del 1 maggio 2016 può scriverla in uno dei seguenti modi:
- 1 5 2016
- 1 mag 2016
- 1 maggio 2016
Tutti e tre i modi sono da considerarsi equivalenti; in tutti e tre i casi dell'esempio, il programma dovrà produrre una struttura contenente tre interi (che chiameremo struttura in uscita) e visualizzare i tre interi separati da barre, cioè
1/5/2016
Si noti che il mese può essere inserito da tastiera
- in forma numerica (nel caso del mese di maggio, quindi, il programma riceve da tastiera la stringa
"5"
), - oppure inserendo il nome completo del mese, dato in minuscolo (ad es. la stringa
"maggio"
), - oppure inserendo le prime 3 lettere del mese, sempre in minuscolo (ad es.
"mag"
).
Si noti che NON bisogna mostrare un menù per chiedere all'utente in quale dei tre formati vuole inserire la data: il programma deve leggere da tastiera solo ed esclusivamente i tre campi che costituiscono la data: giorno, mese ed anno. Il mese viene letto da tastiera come stringa; il programma, a seconda della stringa che l'utente ha inserito, dovrà interpretare il mese in forma corretta. In altre parole, l'utente inserisce una stringa, poi sarà compito del programma verificare se ha inserito "5", "mag" o "maggio" e produrre in ogni caso l'intero 5.
Per fare questo, viene fornito un file di testo mesi.txt ; per ciascun mese il file mesi.txt contiene
- numero: stringa contenente al massimo 2 caratteri, più il terminatore
- nome: stringa contenente al massimo 9 caratteri, più il terminatore
Nel file, i mesi sono in ordine da gennaio a dicembre.
Si organizzi il programma come segue:
- nel
main
, si invochi una procedura o funzione di lettura del file mesi.txt (da sviluppare nel punto 2); si legga da tastiera una struttura data nel formato di ingresso, si invochi una procedura/funzione che converte la data in una struttura di 3 interi (da sviluppare al punto 3), infine si stampino i 3 interi separati dalle barre. - Si scriva la procedura o funzione di lettura; essa legge il file mesi.txt , ne porta il contenuto in un opportuno array di strutture e visualizza tale array.
- Si scriva una procedura/funzione che prende come parametri
- una data nel formato di ingresso
- l'array letto al punto 2
main
una data nel formato di uscita. Per fare questo, invoca una procedura o funzione che converte il mese in numero intero (da sviluppare al punto 4) - Si scriva una procedura/funzione che prende come parametri
- una stringa che rappresenta il mese, come inserito dall'utente
- l'array letto al punto 2
È indispensabile organizzare opportunamente il programma in procedure e funzioni; è quindi altamente consigliabile aggiungere altre procedure/funzioni oltre a quelle indicate esplicitamente nel testo.
Esercizio 2 (punti 4)
Si desidera ora stampare la data in uscita in un formato definito dall'utente. Si legga da tastiera una stringa F
che rappresenta il formato richiesto dall'utente (che non può contenere spazi). Il programma dovrà stampare la stringa F
, sostituendo però le seguenti sequenze di caratteri:
-
g
: il carattere 'g' va sostituito col giorno, stampato come numero -
m
: un carattere 'm' singolo va sostituito col mese stampato come numero -
mm
: due caratteri 'm' consecutivi vanno sostituiti con le prime 3 lettere del nome del mese -
mmm
: tre caratteri 'm' consecutivi vanno sostituiti con il nome del mese -
a
: un singolo carattere 'a' va sostituito con le ultime due cifre dell'anno -
aa
: due caratteri 'a' consecutivi vanno sostituiti con l'anno
Ad esempio, se la data inserita è 1 maggio 2016
- se la stringa formato è
"g/m/a"
, il programma stamperà1/5/16
- se la stringa formato è
"mmm-aa-g"
, il programma stamperàmaggio-2016-1
È indispensabile organizzare il programma in opportune procedure e/o funzioni.
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.
Nella correzione, il docente creerà due progetti:
- in uno, inserirà i file
COGNOME.c
efunzioni.c
. L'eseguibile che viene creato dovrà risolvere l'esercizio 1. - nell'altro, inserirà i file
facoltativo.c
efunzioni.c
. L'eseguibile che viene creato dovrà risolvere l'esercizio 2.