Matematica - SMID : Programmazione Giugno 2007 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte... non dovete "scrivere" gli "a capo", ma solo passare alla riga successiva Esercizio 2 su foglio protocollo (ordinatamente!) 1
Matematica - SMID : Programmazione Giugno 2007 Esercizio 1 Comprensione codice Versione C++ (punti 9 in prima approssimazione) Consideriamo il seguente codice C++ (che non è un buon esempio di codice C++) #include <iostream> using namespace std; const int DIM = 16 ; int iii = 7 ; void pp( ) ; void qq (int &, int) ; void vv(char s [], int); int main( ) { int a = 5; int b = 3; char str[dim+1]; iii=13; pp( ); cout << "main 1: " << iii << "\n" ; qq(a, b) ; cout << "main 2: " << a << " " << b << "\n" ; vv(str, 8); cout << "main 3: " << str << "\n" ; return(0); void pp() { iii= iii%2 ; cout <<"pp: " << iii << "\n" ; void qq( int &x, int y) { y = x + y; x = y + x; cout << "qq: " << x << " " << y << "\n" ; void vv( char s[], int last ) { int k; for (k=0; k<last; k++) s[k] = 'a'+k+1; s[k]= '\0'; Sul foglio risposte scrivere l'output del programma; tutto l'output, però non state a contare gli spazi bianchi... 2
Esercizio 1 Comprensione codice Versione C (punti 9 in prima approssimazione) Consideriamo il seguente codice C (che non è un buon esempio di codice C!) #include <stdio.h> #define DIM 16 int iii = 7 ; void pp( ) ; void qq (int *, int) ; void vv(char s [], int); int main() { int a = 5; int b = 3; char str[dim+1]; iii=13; pp( ); printf ("main 1: %d \n", iii ) ; qq(&a, b) ; printf ("main 2: %d %d \n", a, b) ; vv(str, 8); printf ("main 3: %s \n", str) ; return(0); void pp() { iii= iii%2 ; printf ("pp: %d \n", iii) ; void qq( int *x, int y) { y = *x + y; *x = y + *x; printf ("qq: %d %d \n", *x, y ) ; void vv( char s[], int last ) { int k; for (k=0; k<last; k++) s[k] = 'a'+k+1; s[k]= '\0'; Sul foglio risposte scrivere l'output del programma; tutto l'output, però non state a contare gli spazi bianchi... 3
Esercizio 2 Progetto di algoritmo (punti 21 in prima approssimazione) Si tratta di progettare un algoritmo che controlla un calendario esami. L'enfasi è sul progetto piu' che sui dettagli; perciò si consiglia di usare pseudo-codice. Lo schema (del funzionamento) dell'algoritmo è il seguente: 1) Inizializzazione... 2) Legge, da un file di nome ESAMI, un calendario: tante righe contenenti dove: corso, anno, giorno, mese corso identifica il corso; ci sono K corsi (con K costante nota) anno : 1o, 2o, 3o della laurea triennale, 1o e 2o della specialistica mese: giugno o luglio (solamente) giorno identifica il giorno del mese da 1 a 30 (a luglio saltiamo il 31, inoltre vanno bene anche i sabati e le domeniche). 3) Controlla che il calendario sia corretto: 3.1) ogni corso deve avere esattamente 2 appelli, con un intervallo di almeno 15 giorni; 3.2) in un giorno non ci possono essere due esami relativi al medesimo anno. Se va tutto bene, si scrive un semplice messaggio. Se ci sono errori, bisogna segnalarli, con un messaggio opportuno, ma non troppo specifico; ad esempio: corso 4 : mancano appelli corso 5 : appelli troppo vicini giorno x : piu' esami dello stesso anno Il controllo deve "arrivare fino in fondo", anche in presenza di errori (in altre parole: trovato un errore, lo si segnala, e poi si continua a controllare); ignorare il fatto che la presenza di un errore può "falsare" i controlli successivi. Note. Al punto 2: supponiamo che ogni riga sia corretta, è l'insieme delle righe che può essere incompleto o incoerente. I punti 2 e 3 sono concettualmente distinti, ma non necessariamente separati nell'algoritmo. Specifiche sull'algoritmo: L'algoritmo deve seguire (grosso modo) la struttura delineata sopra. 4
Non si devono usare "variabili globali": passaggi di dati tra "main" ed eventuali procedure e funzioni devono avvenire tramite parametri e il risultato delle funzioni. Per tutto quello che non è precisato nel testo, siete liberi di decidere voi, ma dovete dichiarare le scelte fatte. Domande a) Precisare come sono codificati dati nel file. b) Precisare le idee essenziali dell'agoritmo e le strutture dati principali usate. Se non trovo la risposta ad a) e b) non correggo il resto. c) Scrivere, usando lo pseudo-codice utilizzato nelle dispense (oppure il C, ma non ve lo consiglio), l'algoritmo completo, commentando, quando necessario. Non perdere tempo a dettagliare: apertura file, formato nelle istruzioni di input / output,... ed altri aspetti di poco conto. Precisare bene, al contrario: la struttura, il ruolo delle variabili principali, i parametri delle procedure / funzioni..., a meno di non aver spiegato a vsufficienza al punto b). 5