Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 23 febbraio 2012
Esercizio 1 (17 punti)
Il calendario dell’anno in corso è rappresentato come riportato a lato. Si assuma che tale calendario sia già stato opportunamente inizializzato con i valori corrispondenti all’anno 2012. Il giorno 9 dicembre è rappresentato dall’elemento della matrice anno_2012[12][9].
Evidentemente, non tutte le celle della matrice saranno occupate (come per esempio tutte quelle con indice 0 per il mese o per l’anno, o quelle corrispondenti ai giorni dal 29 al 31 febbraio, o 30-31 febbraio negli anni bisestili).
Il campo codice_giorno_della_settimana ha valore 1 per il lunedì, 2 per il martedi`, ..., 7 per la domenica. Il campo festivo ha valore 1 se il giorno è festivo e 0 altrimenti. Il campo fase_lunare è il numero d’ordine del giorno del mese lunare.
Si dispone inoltre di un file anagrafico contenente, uno per riga, nome, cognome e data di nascita di un certo numero di persone, il cui formato può essere dedotto dall’esempio seguente:
Franco; Della Valle Di Sotto; 5-lug-2002;
Gian Luca; De Luca; 12-mag-2001;
Mario; Rossi; 3-gen-1988;
Pier Luigi Giovanni Alberto; Da Re; 27-set-1970;
La lunghezza del file è ignota. Si assuma che tutte le date nel file siano corrette.
Si scriva una funzione in linguaggio C che riceva come argomenti il nome di un file anagrafico come quello appena descritto e il calendario dell’anno in corso. La funzione deve stampare il numero di compleanni delle persone presenti nel file che cadono, quest’anno, in ciascun giorno della settimana.
Con riferimento all’esempio sopra riportato:
DISTRIBUZIONE COMPLEANNI:
lunedi` 0 martedi` 1 mercoledi` 0 giovedi` 2 venerdi` 0 sabato 1 domenica 0
NOTA: ai fini del lavoro di correzione da svolgere a casa o in laboratorio, all’indirizzo
http://www.diegm.uniud.it/pierluca/public_html/downloads/teaching/luna_e_nascite/
si trovano i file calendario.c e calendario.h che permettono, con opportuni adattamenti, di costruire il calendario 2012 necessario per il test del programma.
Esercizio 2 (13 punti)
Si scriva una funzione in linguaggio C che riceva come argomenti una matrice di interi A, le sue dimensioni n e m, una matrice di interi B (che conterrà il risultato dell'operazione e la cui dimensione è pari a quella di A) ed un intero t. La funzione deve riempire la matrice B con le righe della matrice A per le quali la somma degli elementi è compresa tra -t e t. La funzione, inoltre, dovrà restituire un intero corrispondente al numero di righe di A che sono state copiate in B. Ad esempio, nel caso della matrice A riportata di seguito e del valore t = 4, la funzione deve riempire la matrice B come indicato e restituire il valore 2.
⎟ ⎟
⎟
⎠
⎞
⎜ ⎜
⎜
⎝
⎛
−
−
−
=
5 0 1 4
2 7 5 3
6 3 0 2
A ⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
−
−
= −
5 0 1 4
2 7 5 B 3
.
struct info_giorno {
char codice_giorno_della_settimana;
char festivo;
char fase_lunare;
};
struct info_giorno anno_2012[13][32];