PROVA PRATICA DEL 13 GIUGNO 2006 - n.71

Indicazioni per la consegna

Nella consegna della prova pratica e' importante che gli studenti rispettino le seguenti indicazioni. Se tali indicazioni non vengono rispettate, c'e' il rischio che un esercizio, pur essendo stato svolto correttamente, venga valutato come errato.

E' importante che il codice consegnato includa solamente lo svolgimento della procedura richiesta. A tale codice infatti vengono automaticamente attaccati la definizione delle strutture dati e una procedura main per testare quanto consegnato.

Ad esempio, prendiamo un esercizio che utilizza le seguenti strutture dati:

typedef enum Uno {a,b,c} Uno;

typedef struct Due{
int a[3];
int b[3];
} Due;

Se a partire da queste strutture dati l'esercizio chiede di consegnare una procedura int proc (Uno u, Due d), lo studente dovra' consegnare SOLAMENTE il seguente codice:

/*Eventuali procedure di supporto e variabili globali
utilizzate per lo svolgimento dell'esercizio*/
int proc (Uno u, Due d){
bla bla bla /* codice della procedura */
}

E' importante che NON vengano inseriti nella consegna dell'esercizio le istruzioni #include <...>, #define ... , la procedura main e la definizione delle strutture dati.

Attenzione! Nella consegna di ogni esercizio, dovete inserire TUTTE le eventuali procedure o funzioni di supporto che sono necessarie per la verifica automatica di quell'esercizio (se riutilizzate una procedura definita in un altro esercizio, dovete reinserirla!).

Tema d'esame n. 71

Gli elementi del tipo ListaInt sono liste semplici di interi.

typedef struct ListaElem{int valore; struct ListaElem* next;} Elem;
typedef Elem* ListaInt;

Le funzioni da realizzare hanno come parametro un file di testo, che si assume contenenga sequenze di int separati da spazi o da caratteri di newline; non noto a priori quanti interi siano presenti nel file. I valori sono disposti in ordine casuale.

Funzioni da implementare

  1. int readLength(FILE *f, int *even, int *odd) ;
    La funzione readLength deve restituire il numero totale di valori presenti nel file, e tramite i parametri even e odd deve restituire il numero di valori pari e di valori dispari rispettivamente. La somma di even + odd deve ovviamente essere uguale al numero totale di valori presenti nel file. Si consideri 0 come numero pari.
  2. int segno(FILE *f) ;
    La procedura segno deve restituire 1 se tutti i valori presenti nel file sono positivi (>=0), deve restituire -1 se sono tutti strettamente negativi (<0), mentre in tutti gli altri casi deve restituire 0.

  3. ListaInt cifreNo(FILE *f);
    La procedura cifre restituisce una lista semplice di interi, i cui elementi corrispondono alle cifre che non compaiono in nessuno dei numeri presenti nel file.