logo
  • userLoginStatus

Welcome

Our website is made possible by displaying online advertisements to our visitors.
Please disable your ad blocker to continue.

Current View

Mathematical Engineering - Informatica A

Second partial exam

Informatica A – Seconda Prova in Itinere Cognome ________________________________ Matricola _______________________ Nome ________________________________ _______ Istruzioni Non separate questi fogli. Scrivete la soluzione solo sui fogli distribuiti , utilizzando il retro delle pagine in caso di necessità. Cancellate le parti di brutta (o ripudiate) con un tra tto di penna . Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione. È possibile scrivere a matita (e non ricalcare al momento della consegna!). È vietato utilizzare calcolatrici o telefoni . Chi tenti di farlo vedrà annullata la sua prova. È ammessa la consultazione di libri e appunti , purché con pacata discrezione e senza disturbare. Qualsiasi tentativo di comunicare con altri studenti comporta l’espulsione dall’aula. È possibile ritirarsi senza penalità . Non è possibile lasciare l’aula conservando il tema della prova in corso. Tempo a disposizione: 1h: 00 m per recupero prima prova 2h:15 m per seconda prova RECUPERO PRIMA PROVA Esercizio 1.1 ( 6 punti ) __________ Esercizio 1.2 ( 8 punti ) __________ SECONDA PROVA Esercizio 2.1 ( 4 punti ) __________ Esercizio 2.2 ( 4 punt i ) __________ Esercizio 2.3 ( 6 punti ) __________ Esercizio 2.4 ( 4 punti ) __________ Voto finale: __________ Esercizio 1.1 ( 6 punti ) – RECUPERO PRIMA PROVA I dati di u n’università sono organizzat i nel seguente modo: gli studenti, i corsi e gli esami sono dispost i in array . Le strutture dati utilizzate sono le seguenti: #define N 1000 #define NS 20000 #define NC 2000 #define NE 400000 typedef struct { int giorno, mese, anno; } Data; typedef struct { char matricola[7], n ome[N], cognome[N]; Data dataNascita; int valido; } Studente ; typedef Studente Studenti[ NS ]; typedef struct { char codice[11], titolo[N]; int numCrediti; int valido; } Corso; typedef Corso Corsi[ NC ]; typedef struct { char codiceCorso[11], matricolaStudente[N]; int voto; Data data; int valido; } Esame; typedef Esame Esami [NE ]; Il campo “valido” serve a dire se la casella dell’array contiene contenuto valido (nel caso l’attributo ha valore 1) o è da considerarsi vuota (nel caso l’attributo ha valore 0). Si codifichi in C la seguente f unzione: void f(Esami es , Corsi cor, Studenti stu, Studenti stuBravi ) che riceve i tre array es, stu e cor contenenti i dati dell’università e l’array stuBravi inizialmente tutto con caselle non valide e copia (senza lasciare buchi) in stuBravi i dati degl i studenti che hanno la media superiore a 27 . Esercizio 1.2 ( 8 punti ) – RECUPERO PRIMA PROVA Si scriva una funzione f che riceve in input due array di caratteri int f(char str[], char numero[]) L’array numero contiene una stringa fatta da solo caratteri 1 o 0 e rappresenta un numero binario. La funzione deve convertire il numero binario rappresentato nell’array numero in decimale e verificare se il numero di vocali contenute nel vettore str è pari al valore del numero convertito. Se è così rest ituisce 1, altrimenti restituisce 0. Esercizio 2.1 ( 4 punti ) SECONDA PROVA Si dice cosa stampa il seguente codice: #define dim 5 #include #include #include typedef struct item { char dato; struct item * next; } Item; typedef Item * lista; lista mistero(lista L) { lista temp = L; while (temp ->next != NULL) temp = temp ->next; temp ->next = (lista) malloc(sizeof(Item)); temp ->next ->next = NULL; temp ->next ->dato = L ->dato + 8; return L ->next; } int main(void) { lista L, temp; int i; L = (lista) malloc(sizeof(Item)); L->next = NULL; L->dato = 'e'; for (i=1; inext = L; temp ->dato = 'm' - i*4; L = temp; } L = mistero(L); while (L != NULL) { printf("%c ", L ->dato); L = L ->next; } getch(); return (0); } Esercizio 2. 2 ( 4 punti ) SECONDA PROVA Il seguente schema descrive i dati di una nota università milanese STUDENTE ( Matricola , Nome, Cognome, DataNascita, AnnoDiCorso ) ESAME ( Matr , CodCorso , Data, Voto ) CORSO ( Codice , NomeCorso, CodiceDocente, Anno, CFU ) DOCENTE ( CodiceDocente , Nome, Cognome, DataNascita, LuogoNascita ) Estrarr e in SQL i docenti di un corso che avevano preso 18 quando, da studenti, ebbero a sostenere l’esame del corso di cui ora sono titolari (come un certo A.C. nel corso di Informatica A). Si consideri sufficientemente certa l’identificazione di una persona in base a nome, cognome e data di nascita. Il seguente schema descrive i dati di una nota università milanese STUDENTE ( Matricola , Nome, Cognome, DataNascita, AnnoDiCorso ) ESAME ( Matr , CodCorso , Data, Voto ) CORSO ( Codice , NomeCorso, CodiceDocente, Anno, CFU ) DOCENTE ( CodiceDocente , Nome, Cognome, DataNascita, LuogoNascita ) Estrarre in SQL gli studenti che non hanno mai dato un esame il giorno del loro compleanno. Si ricorda che le funzioni day e month estraggono giorno e mese da una data. Il confronto sul compleanno è quindi day(data)=day(dataNascita) and month(data)=month(dataNascita) Esercizio 2. 3 ( 6 punti ) SECONDA PROVA I dati di un’università sono organizzati nel seguente modo: gli studenti, i corsi e gli esami sono disposti in liste . Le strutture dati utilizzate sono le seguenti: #define N 1000 typedef struct { int giorno, mese, anno; } Data; typedef struct S { char matricola[7], nome[N], cognome[N]; Data dataNascita; S * next; } Studente; typedef Studente * ListaStudenti; typedef struct C { char codice[11], titolo[N]; int numCrediti; C * next; } Co rso; typedef Corso * ListaCorsi; typedef struct E { char codiceCorso[11], matricolaStudente[N]; int voto; Data data; E * next; } Esame; typedef Esame * ListaEsami; Si codifichi in C la seguente funzione: ListaStudenti f(ListaEsami es, ListaCorsi cor, ListaStudenti stu) che riceve le tre liste es, stu e cor contenenti i dati dell’università e restituisce (senza intaccare i parametri di ingresso) la lista degli studenti che hanno la media superiore a 27. Si codifichi in C la funzione: ListaEsami elimina StudentiFalsi (ListaEsami es, ListaStudenti stu ) che elimina da es i dati di studenti non presenti nella lista stu . Esercizio 2.4 ( 4 punti ) – SECONDA PROVA Si consideri la seguente definizione di un albero binario: typedef struct EL { int dato; struct EL * left, * right; } node; typedef node * tree; Implementare una funzione che, ricevut o in ingresso un alber o binar io, restituisc e il numero di valori distinti contenuti nell’albero . È consigliato implementare funzioni di supporto.