b. (10 punti) restituisca una lista denominata

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "b. (10 punti) restituisca una lista denominata"

Transcript

1 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 19/01/ (20 punti) Data la lista 1 denominata intlist in cui ogni elemento ha un campo di tipo intero posval, si definisca una funzione in Linguaggio C che: a. (10 punti) restituisca una lista denominata intlistunique, costituita dagli stessi elementi contenuti in intlist, ma a valori unici (i.e. senza elementi duplicati). Esempio: b. (10 punti) restituisca una lista denominata intlistuniquenumrepeated, analoga alla lista intlistunique ma con in più il campo di tipo intero nval che contiene il numero delle volte che il numero è ripetuto. Esempio: 2. (6 punti) Quanti bit sono necessari per codificare i giorni della settimana? Quanti per un immagine bianco/nero a 320x240 pixel? 3. (7 punti) Date due liste in cui ogni elemento ha due campi di tipo intero denominati posval e nval, si definisca una funzione che sommi i prodotti dei campi nval calcolati solo nel caso in cui i rispettivi valori dei campi posval siano uguali. Esempio: 1 In rappresentazione collegata con puntatori.

2 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 19/01/ (20 punti) Data la lista 1 denominata intlist in cui ogni elemento ha un campo di tipo intero posval, si definisca una funzione in Linguaggio C che: a. (10 punti) restituisca una lista denominata intlistunique, costituita dagli stessi elementi contenuti in intlist, ma a valori unici (i.e. senza elementi duplicati). Esempio: b. (10 punti) restituisca una lista denominata intlistuniquenumrepeated, analoga alla lista intlistunique ma con in più il campo di tipo intero nval che contiene il numero delle volte che il numero è ripetuto. Esempio: 2. (6 punti) Quanti bit sono necessari per codificare i giorni della settimana? Quanti per un immagine bianco/nero a 320x240 pixel? 3. (7 punti) Date due liste in cui ogni elemento ha due campi di tipo intero denominati posval e nval, si definisca una funzione che sommi i prodotti dei campi nval calcolati solo nel caso in cui i rispettivi valori dei campi posval siano uguali. Esempio: 1 In rappresentazione collegata con puntatori. Soluzione quesito 1a. void removeduplicates(struct list * ptr) { struct list* temp; while(ptr!= NULL) { while( (ptr->next_ptr!= NULL) && (ptr->next_ptr->posval == ptr->posval ) ) { temp = ptr->next_ptr; // Salvo ptr->next_ptr = ptr->next_ptr->next_ptr; free(temp); ptr = ptr->next_ptr; // Avanzamento lista A Si assume che la lista sia ordinata (la soluzione senza ordinamento è computazionalmente un pò più onerosa). Si scorre la lista fino alla fine e fino a che il prossimo elemento è uguale a quello corrente (i.e. definizione di duplicato). Se la doppia condizione è verificata si può cancellare l elemento davanti a quello corrente Prima della cancellazione dell elemento duplicato, l indirizzo da lui puntato viene scritto nel campo puntatore dell elemento corrente. In pratica i due cicli nidificati scorrono rispettivamente: la lista nel suo totale e gli elementi davanti al corrente.

3 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 19/01/ (20 punti) Data la lista 1 denominata intlist in cui ogni elemento ha un campo di tipo intero posval, si definisca una funzione in Linguaggio C che: a. (10 punti) restituisca una lista denominata intlistunique, costituita dagli stessi elementi contenuti in intlist, ma a valori unici (i.e. senza elementi duplicati). Esempio: b. (10 punti) restituisca una lista denominata intlistuniquenumrepeated, analoga alla lista intlistunique ma con in più il campo di tipo intero nval che contiene il numero delle volte che il numero è ripetuto. Esempio: 2. (6 punti) Quanti bit sono necessari per codificare i giorni della settimana? Quanti per un immagine bianco/nero a 320x240 pixel? 3. (7 punti) Date due liste in cui ogni elemento ha due campi di tipo intero denominati posval e nval, si definisca una funzione che sommi i prodotti dei campi nval calcolati solo nel caso in cui i rispettivi valori dei campi posval siano uguali. Esempio: Soluzione quesito 1b. void computenumrepeated(struct list * ptr) { struct list* temp; while(ptr!= NULL) { int i = 0; while( (ptr->next_ptr!= NULL) && (ptr->next_ptr->posval==ptr->posval) ){ temp = ptr->next_ptr; ptr->next_ptr = temp->next_ptr; i++; // +1 se verrà cancellato free(temp); // cancellazione ptr -> nval = i+1;// con+1 -> le ripetizioni ptr = ptr->next_ptr; Funzionamento analogo al precedente Salvo fatto per: il contatore che viene usato accanto all istruzione di cancellazione per contare il numero dei cancellati. Successivamente sommando ad esso 1 fuori dal ciclo interno, si hanno le ripetizioni dell elemento nella lista. Tale valore viene quindi scritto definitivamente nel campo nval della lista. 1 In rappresentazione collegata con puntatori.

4 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 19/01/ (20 punti) Data la lista 1 denominata intlist in cui ogni elemento ha un campo di tipo intero posval, si definisca una funzione in Linguaggio C che: a. (10 punti) restituisca una lista denominata intlistunique, costituita dagli stessi elementi contenuti in intlist, ma a valori unici (i.e. senza elementi duplicati). Esempio: b. (10 punti) restituisca una lista denominata intlistuniquenumrepeated, analoga alla lista intlistunique ma con in più il campo di tipo intero nval che contiene il numero delle volte che il numero è ripetuto. Esempio: 2. (6 punti) Quanti bit sono necessari per codificare i giorni della settimana? Quanti per un immagine bianco/nero a 320x240 pixel? 3. (7 punti) Date due liste in cui ogni elemento ha due campi di tipo intero denominati posval e nval, si definisca una funzione che sommi i prodotti dei campi nval calcolati solo nel caso in cui i rispettivi valori dei campi posval siano uguali. Esempio: 1 In rappresentazione collegata con puntatori. Soluzione quesito 3. int dotproduct(struct list * ptra, struct list * ptrb) { struct list* initb = ptrb; int sum = 0; // inizializzazione somma while(ptra!= NULL) { ptrb = initb; // Reinizializzazion di B while(ptrb!= NULL) { if ( ptra->posval == ptrb->posval ) { sum = sum + ptra->nval * ptrb->nval; ptrb = ptrb->next_ptr; // Avanzamento lista B ptra = ptra->next_ptr; // Avanzamento lista A return sum; Due cicli nidificati per scorrere entrambe le liste al fine di poter comparare ogni elemento di una lista con ogni elemento dell altra. All interno dei due cicli nidificati vi è la condizione che «attiva» il calcolo della somma dei prodotti. Nel caso in cui tale condizione non venga verificata, l esecuzione va in sequenza senza fare nessun calcolo almeno fino alla prossima verifica.

5 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 19/01/ (20 punti) Data la lista 1 denominata intlist in cui ogni elemento ha un campo di tipo intero posval, si definisca una funzione in Linguaggio C che: a. (10 punti) restituisca una lista denominata intlistunique, costituita dagli stessi elementi contenuti in intlist, ma a valori unici (i.e. senza elementi duplicati). Esempio: Soluzione quesito 2. Per codificare i 7 elementi (i.e. giorni della settimana) occorrono almeno tre bit poiché con due si ne possono codificare al massimo 2 2 = 4. Per memorizzare (typo: manca il verbo) le 2 configurazioni bianco e nero di un pixel basta un bit: 0->bianco, 1->nero. Quindi avendo 320x240=76800 pixel, sono necessari bit. b. (10 punti) restituisca una lista denominata intlistuniquenumrepeated, analoga alla lista intlistunique ma con in più il campo di tipo intero nval che contiene il numero delle volte che il numero è ripetuto. Esempio: 2. (6 punti) Quanti bit sono necessari per codificare i giorni della settimana? Quanti per un immagine bianco/nero a 320x240 pixel? 3. (7 punti) Date due liste in cui ogni elemento ha due campi di tipo intero denominati posval e nval, si definisca una funzione che sommi i prodotti dei campi nval calcolati solo nel caso in cui i rispettivi valori dei campi posval siano uguali. Esempio: 1 In rappresentazione collegata con puntatori.

6 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61, (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare.

7 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61,56. Soluzione quesito 1. Dalla definizione di Binary Search Tree (BST): i sottoalberi sx e dx devono essere loro stessi dei BST e un BST si definisce tale se vale la relazione che i nodi a sx o a dx della radice sono risp <= oppure > della radice. Si fa una visita ricorsiva dell'albero accertandosi che i nodi dei sottoalberi da visitare abbiano il range (i.e. massimo e minimo) come stabilito ricorsivamente dai padri e che la definizione ricorsiva di BST sia verificata (due condizioni per figlio = 4). La condizione di guardia arresta la nidificazione quando si raggiungono le foglie e garantisce la terminazione del metodo. La chiamata iniziale supponendo che l'albero contenga valori reali sarà: int yesno = isbsearchtree(mytree, -inf, +inf); 2. (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. int isbsearchtree(struct btree *ptrtree, int minval, int maxval) { if (ptrtree == NULL) // guardia arresta la nidificazione return 1; if ( (ptrtree->value > minval) && (ptrtree->value < maxval) && isbsearchtree(ptrtree->leftptr, minval, ptrtree->value) && isbsearchtree(ptrtree->rightptr, ptrtree->value, maxval) ) return 1; else return 0;

8 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61,56. Soluzione quesito 1a. Si fa una visita dell'albero ricorsiva e si sostituisce la stampa del nodo con l inserimento in lista. Data la ricorsione si è costretti a passare l'indirizzo del puntatore corrente della lista (ptrlst). void serializetree(struct btree * ptrtree, struct list ** ptrlst) { // dal codice della visita simmetrica... if ((ptrtree!=null)) { serializetree(ptrtree->leftptr, ptrlst); 2. (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. // printf("%f \n",ptr->value) ; pre_insert(ptrlst, ptrtree->value); serializetree(ptrtree->rightptr, ptrlst);

9 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61,56. Soluzione quesito 1b. Si fa una visita della lista e si avanza solo nel caso in cui gli elementi adiacenti sono l uno minore o uguale dell altro. int checklistsorting(struct list * ptr){ if (ptr==null) return 0; int sorted = 1; // un elemento è x def. ordinato while( (ptr->next_ptr!=null) && (sorted==1) ){ if (ptr->value <= ptr->next_ptr->value) { ptr=ptr->next_ptr; // cond. ok avanzo else return 0; 2. (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. return 1; 1 Progettare, descrivere ed implementare.

10 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61,56. Soluzione quesito 1c. Per avere la lista ordinata basta cambiare tipo di inserimento nella funzione esercizio 1.a. L'inserimento ordinato risolve il quesito. void serializetree(struct btree * ptrtree, struct list ** ptrlst) { /* Parto dal codice della visita simmetrica */ if ((ptrtree!=null)) { serializetree(ptrtree->leftptr, ptrlst); 2. (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. // printf("%f \n",ptr->value); ord_insert(ptrlst, ptrtree->value); serializetree(ptrtree->rightptr, ptrlst);

11 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61, (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. Soluzione quesito 1d. Quesito proposto all'appello precedente. Derivato dalla funzione per cancellare i duplicati. Un contatore accanto all istruzione di cancellazione conta il numero dei cancellati e fornisce il numero dei duplicati. Sommando ad esso 1 fuori dal ciclo interno, si hanno le ripetizioni dell elemento nella lista (nell'esercizio il valore veniva scritto nel campo aggiuntivo nval della lista). void computenumrepeated(struct list * ptr) { struct list* temp; while(ptr!= NULL) { int i = 0; while( (ptr->next_ptr!= NULL) && (ptr->next_ptr->posval==ptr->posval) ){ temp = ptr->next_ptr; ptr->next_ptr = temp->next_ptr; i++; // +1 se verrà cancellato free(temp); // cancellazione ptr -> nval = i+1;// con+1 -> le ripetizioni ptr = ptr->next_ptr;

12 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61, (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. Soluzione quesito 1e. Si fa una visita della lista e si stampa (recupera) l'elemento corrente solo nel caso in cui sia contenuto nell'intervallo dato. Gli estremi dell'intervallo vengono passati attraverso la ricorsione. void rangesearch(struct btree * ptrtree, float a, float b) { if( ptrtree!=null ) { rangesearch(ptrtree->leftptr, a, b); if ((ptrtree->value >= a) && (ptrtree->value <= b)){ printf("%f \n",ptrtree->value); rangesearch(ptrtree->rightptr, a, b);

13 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61,56. Soluzione quesito 2. Identico al 1e. ma con le seguenti variazioni: è applicato sulle tre coordinate x,y,z. si utilizza l'intorno anzichè l'intervallo. Un punto 3D è contenuto nell'intorno quando tutte e tre le coordinate del punto 3D verificano l'appartenenza. 2. (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare.

14 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 2/02/ (23 punti) Dato un set di numeri interi organizzati in un albero binario, si definisca 1 una funzione che Controlla se l albero è un albero binario di ricerca (5 punti). Nel caso in cui lo sia, si definisca 1 una funzione che: a. (4 punti) Traferisca i numeri in una lista. b. (3 punti) Controlli che la lista sia ordinata. c. (3 punti) Ordini la lista, nell eventualità che non lo sia. d. (2 punti) Conti il numero degli elementi duplicati. e. (6 punti) Recuperi gli elementi contenuti in un intervallo dato [a,b]. Esempio: se [a,b] = [30,70] si ha 34,45,61, (9 punti) Si definisca 1 una funzione che: dato un set di punti tridimensionali, ritorni il sottoinsieme dei medesimi contenuti in un intorno di raggio ε di un punto p dato. 3. (8 punti) Determinare alcuni possibili valori delle basi b e b tali che sia verificata la seguente uguaglianza: [32] b = [22] b. 1 Progettare, descrivere ed implementare. Soluzione quesito 3. Codifica posizionale: N [a N a 1 a 0 ] B = a n B n n=0 per i valori 32 e 22 si ha: [32] 10 = [3 b + 2 b 0 ] 10 = [3b + 2] 10 e [22] 10 = [2 b + 2 b 0 ]10 = [2b + 2] 10 quindi: b = 2 3 b Poichè in generale le basi sono > 1, Per rispettare tale vincolo, va scelto per b un qualsiasi valore intero positivo multiplo di 3: b = 3k, con k = 1,2,3, Esempio: Se b = 3 e dunque b = 2 si ha: [32] b = [32] 2 = [8] 10 [22] b = [22] 3 = [8] 10 se b = 6 dunque b = 4...

15 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa.

16 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 1.a int makemove(int * puzzlegame, int makemovenumber, int ** nextpuzzlegame){ int i,j,exit; exit = 0; for(i=0; i <3; i++){ for(j=0; j <3; j++){ if ( puzzlegame[i * 3 + j] == makemovenumber ){ exit = 1; break; if (exit) break; int pnumi = i; int pnumj = j; exit = 0; for(i=0; i <3; i++){ for(j=0; j <3; j++){ if ( puzzlegame[i * 3 + j] == 0 ){ exit = 1; break; if (exit) break; int pblanki, pblankj; pblanki = i; pblankj = j; if ( ( (pblanki-pnumi)*(pblanki-pnumi) + (pblankj-pnumj)*(pblankj-pnumj) ) <= 1.0 ){ *nextpuzzlegame = (int *)malloc(3*3*sizeof(int)); for(i=0; i <3; i++){ for(j=0; j <3; j++){ (*nextpuzzlegame)[i * 3 + j] = puzzlegame[i * 3 + j]; swap(&(*nextpuzzlegame)[pnumi * 3 + pnumj], &(*nextpuzzlegame)[pblanki * 3 + pblankj]); return 1; else return 0;

17 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 1.b Visita in ampiezza mediante uso di una lista. I nodi vengono generati dalla funzione makemove ed allocati dalla funzione allocnode. int visit_breadth_first(struct tree * ptrtree){ struct listq * tobevisited_ptr; struct listq * tail_ptr = NULL; struct tree * this_node_ptr = NULL; initq(&tobevisited_ptr); tail_ptr = pre_insertq( &tobevisited_ptr, ptrtree ); while(tobevisited_ptr!=null){ this_node_ptr = consume_firstq( &tobevisited_ptr ); if ( this_node_ptr->nodedepth >= maxdepth){ printf("stopped at depth %i ",this_node_ptr->nodedepth ); return 1; for(int i=1; i<9; i++){ int *movedpuzzlegame = NULL; if (makemove(*this_node_ptr->puzzlegame,i,&movedpuzzlegame)){ struct tree * searchtreeptr = NULL; allocnode(&searchtreeptr, this_node_ptr, &movedpuzzlegame, this_node_ptr->nodedepth + 1 ); tail_ptr = suf_insertq(&tobevisited_ptr, searchtreeptr); All elemento nodo viene aggiunto il campo nodedepth inizializzato con la depth del padre + 1. La ricerca si ferma quando si raggiunge una profondità data.

18 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 1.c void allocnode(struct tree ** searchtreeptr, struct tree * parent, int ** gameconfig){ // memory for the node is allocated... *searchtreeptr = (struct tree *)malloc(1*sizeof(struct tree)); // the parent is filled in... (*searchtreeptr)->parent = parent; // the config is filled in... for(int i=0; i <3; i++){ for(int j=0; j <3; j++){ (*searchtreeptr)->puzzlegame[i][j]=(*gameconfig)[i * 3 + j]; Gli scorrimenti necessari si ottengono tenendo traccia dei parents. A tal fine si inserisce un ulteriore campo puntatore nell'elemento dell'albero che punta al proprio parent. Viene cosi generata una lista che se attraversata ci riconduce alla root (i.e. la configurazione iniziale data) passando dalle configurazioni generate. Per otterne un altra data si aggiunge la seguente condizione nel main loop come nellesercizio 1.b: if ( matchpuzzles( *this_node_ptr->puzzlegame, GOAL) ){ printf("goal \n"); return 1;

19 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 1.d Come l'1.b cambiando l'inserimento nella lista. Anzichè in coda viene fatto in testa. int visit_breadth_first(struct tree * ptrtree){ struct listq * tobevisited_ptr = NULL; struct listq * tail_ptr = NULL; struct tree * this_node_ptr = NULL; initq(&tobevisited_ptr); tail_ptr = pre_insertq( &tobevisited_ptr, ptrtree ); while(tobevisited_ptr!=null){ this_node_ptr = consume_firstq( &tobevisited_ptr ); if ( matchpuzzles( *this_node_ptr->puzzlegame, GOAL) ){ return 1; for(int i=1; i<9; i++){ int *movedpuzzlegame = NULL; if (makemove(*this_node_ptr->puzzlegame,i,&movedpuzzlegame)){ struct tree * searchtreeptr = NULL; allocnode(&searchtreeptr,this_node_ptr,&movedpuzzlegame,1); tail_ptr = pre_insertq(&tobevisited_ptr, searchtreeptr);

20 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 1.e Come l'1.b e l 1.d cambiando l'inserimento nella lista. Anziche in coda o in testa il nodo viene inserito in modo ordinato. int visit_breadth_first(struct tree * ptrtree){ struct listq * tobevisited_ptr = NULL; struct listq * tail_ptr = NULL; struct tree * this_node_ptr = NULL; initq(&tobevisited_ptr); tail_ptr = pre_insertq( &tobevisited_ptr, ptrtree ); while(tobevisited_ptr!=null){ this_node_ptr = consume_firstq( &tobevisited_ptr ); if ( matchpuzzles( *this_node_ptr->puzzlegame, GOAL) ){ printf("goal \n"); return 1; for(int i=1; i<9; i++){ int *movedpuzzlegame = NULL; if (makemove(*this_node_ptr->puzzlegame,i,&movedpuzzlegame)){ struct tree * searchtreeptr = NULL; allocnode(&searchtreeptr, this_node_ptr, &movedpuzzlegame, this_node_ptr->nodedepth + 1 ); tail_ptr = ord_insertq(&tobevisited_ptr, searchtreeptr);

21 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 2 Dalla definizione: per un generico elemento dell'albero binario: 1. se i figli sono entrambi nulli allora sono uguali, 2. se sono diversi da NULL per essere uguali devono lo stesso valore dell'informazione, e la stessa cosa deve valere anche per i sottoalberi destro e sinistro. 3. Se uno dei sottoalberi è assente allora sono diversi In forma ricorsiva la definizione si traduce come segue: int sametree(struct btree* a, struct btree* b) { // 1. both null -> equal by the definition if (a==null && b==null) return(true); // 2. if non-empty, check their values... else if (a!=null && b!=null) { return( a->value == b->value && sametree(a->leftptr, b->leftptr) && sametree(a->rightptr, b->rightptr) ); // 3. if one is empty return false else return false;

22 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa. 3 Dalla definizione: per un generico elemento dell'albero binario: Si scambiano i puntatori dei figli. In forma ricorsiva la definizione si traduce come segue: void swappedtree(struct btree* node) { // the guard stopping the recursion if (node==null) { return; else{ // start recursion... swappedtree(node->leftptr); swappedtree(node->rightptr); // swap left with right struct btree* temp; temp = node->leftptr; node->leftptr = node->rightptr; node->rightptr = temp;

23 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 23/02/ (33 punti) Si considerino le matrici 3x3 ottenibili facendo scorrere nelle quattro direzioni (su, giù, destra, sinistra) i numeri {1,2,,8 = in modo da occupare la posizione lasciata vuota. Esempio: l 8 scorre a dx. Dalla matrice ottenuta ne otteniamo un'altra facendo scorrere il 5, da questa un altra ancora facendo scorrere il 6 a sinistra. Si definisca una funzione che : a. (2 punti) data una matrice ed un numero da dover far scorrere, ritorni la matrice cosi ottenuta. b. (6 punti) data una generica matrice, visiti l albero che si ottiene applicando tutti gli scorrimenti possibili fino ad una profondità d data (nell esempio alcuni dei nodi con profondità d=2). c. (8 punti) data una generica matrice, ritorni gli scorrimenti necessari per ottenerne un altra data. d. (7 punti) implementi i punti b. e c. ma con un altro ordine di visita. e. (10 punti) implementi la visita del punto c. e del punto d. espandendo i nodi con priorità calcolata in base alla minore profondità e al minor numero di elementi fuori posto rispetto alla matrice data. 2. (6 punti) Dati due alberi binari definire una funzione che ritorni 1 se sono strutturalmente simili e 0 altrimenti. 3. (5 punti) Dato un albero binario definire una funzione che ritorni l albero avente i figli destro e sinistro scambiati fra di loro. 4. (4 punti) si converta il numero 0.05 in rappresentazione binaria con virgola fissa = =

24 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

25 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 1. C = A B. Si scorre la lista A e si cerca se in B vi sono degli elementi uguali. Gli elementi non trovati vengono inseriti in C. int setdifference(struct list * ptra, struct list * ptrb, struct list ** ptrc) { list* ptrptrb = NULL; // richiesto da search, ma nn usato while(ptra!= NULL) { // per ogni elementoin A if (!search(ptrb, ptra->value, &ptrptrb) ){ // se non è in B ord_insert(ptrc,ptra->value); // mettilo in C ptra = ptra->next_ptr; // Avanzamento lista A return 0; Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

26 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 1a. Si usa l algoritmo di visita ricorsiva dell albero. Anzichè stampare il valore del nodo (se verifica la condizione dell esercizio precedente) lo si inserisce in un terzo albero. void setdifftree(struct btree * ptrtreea, struct btree * ptrtreeb, struct btree ** ptrtreec) { if(ptrtreea!=null) { setdifftree(ptrtreea->leftptr, ptrtreeb, ptrtreec); if (searchtree(ptrtreeb, ptrtreea->value) == NULL){ insert_inorder(ptrtreec, ptrtreea->value); setdifftree(ptrtreea->rightptr, ptrtreeb, ptrtreec); Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

27 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/2015 Soluzione quesito 1b. La soluzione computazionalmente migliore è: (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

28 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 2. SI usa la funzione qsort della libreria standard C. char * words[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ; int N_words = sizeof(words)/sizeof(char *); int i; qsort (words, N_words, sizeof (char *), compare); for (i = 0; i < N_words; i++) { printf ("%d: %s.\n", i, words[i]); int compare (const void * a, const void * b){ return strcmp (*(const char **) a, *(const char **) b); Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

29 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 2a. Si usa lo stesso algoritmo sviluppato nel quesito 1 sostituendo il test di uguaglianza == con la funzione compare dell esercizio precedente. Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

30 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 2b. L istogramma si ottiene contando il numero dei duplicati (vedi prima prova scritta del corso): [...] parola = strtok_s(strdoc, s, &save_ptr); while( parola!= 0 ) { getwordposition(rows, cols, strmat, parola, &wordpos); ord_insert(&ptr,wordpos); parola = strtok_s(0, s, &save_ptr); computenumrepeated(ptr); visit(ptr); [...] Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

31 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 3. Il numero è negativo poichè il bit più significativo è 1. Il valore positivo si può ottenere invertendo tutti i bit e aggiungendo 1: = 0110 = = 6 Quindi il numero è -6. Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

32 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 3a (12 bit complemento a 2) In decimale il numero è 2047, ( in decimale è: = 2047 Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

33 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 15/06/ (17 punti) Date due liste in forma collegata con puntatori contenenti numeri interi, scrivere una funzione che genera una nuova lista contenente la differenza insiemistica fra di loro (8 punti). a. Ripetere l esecizio 1 utilizzando come struttura dati l albero binario di ricerca (6 punti). b. Motivare quale delle due soluzioni è computazionalmente migliore (3 punti). 2. (17 punti) Dato un file testo di testo A contenente le parole del dizionario della lingua inglese, scrivere una funzione che le ordini alfabeticamente (6 punti). a. Dati due file di testo A e B, scrivere una funzione che elimini da A le parole contenute in B (3 punti). b. Dato un file di testo, scrivere una funzione per calcolare l istogramma delle parole di cui è costituito (8 punti). 3. (9 punti) Convertire dal complemento a 2 decimale, il numero binario: 1010 (3 punti). a. Qual è il più grande numero positivo che può essere rapresentato con 12-bit in complemento a 2? (3 punti) Soluzione quesito 3b. ( 1) (1.0) 2 =(1) Scrivere l equivalente in decimale del seguente numero rappresentato secondo lo standard IEEE in virgola mobile: (3 punti).

34 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/ Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti).

35 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/ Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti). Soluzione quesito 1a. e 1b. #include <ctype.h> int main(){ char mystring[] = {"Hi, MY NAME IS..."; char * newstring; newstring = punctandlowercase(mystring); char * punctandlowercase(char * str) { int i = 0; int j = 0; int length = strlen(str); for (i = 0; i < length; i++) { if (!ispunct(str[i]) ) { //...se non è di punteggiatura... //...convertilo in minuscolo... str[j] = ( tolower( str[i] ) ) ; j++; // avanza per il prossimo... // carattere di fine stringa... str[j++]='\0'; return str;

36 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/ Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti). Soluzione quesito 1c. void stringselectionsort(char words[maxnword][maxnlenght]) { int i,j,min; int n = maxnword; char tmp[maxnlenght]; int main(){ char words[maxnword][maxnlenght]={ {"macchina",{"ombrello",{"mare",{"lago",{"fiume", {"motorino,{"bicicletta",{"triciclo",{"autobus",{"segway", ; for(i = 0; i < n-1 ; i++) { min = i; for(j = i+1; j < n; j++) { if ((strcmp(words[j],words[min]))<0) { min = j; stringselectionsort(words); if( min!= i ) { strcpy(tmp,words[i]); strcpy(words[i],words[min]); strcpy(words[min],tmp);

37 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/2015 Soluzione quesito 1d (si veda prima prova scritta) 1. Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti).

38 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/2015 Soluzione quesito 1e (si veda prima prova scritta) 1. Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti).

39 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/2015 Soluzione quesito 2a (si veda prima prova scritta) 1. Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti).

40 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/ Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti). Soluzione quesito 2b (si veda quesito 2a) Si ripete la soluzione del 2a per k volte.

41 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 20/07/2015 Soluzione quesito Dato un file testo A, scrivere una funzione che: a. Elimini da A i caratteri di punteggiatura (3 punti). b. Trasformi le lettere maiuscole contenute in A nelle corrispettive lettere minuscole (3 punti). c. Ordini alfabeticamente le parole in A senza l ausilio della funzione qsort della libreria standard C (7 punti). d. Elimini da A le parole contenute in un file dato B (4 punti). e. Trascriva in una lista collegata con puntatori, il numero delle volte (ρ) che la i-esima parola di B si ripete nel file A (6 punti). 2. Si consideri il vettore v R n la cui i-esima componente è definita dalle ripetizioni v i = ρ(i), con i = 1.. n, della i-esima parola di B trovata nel file testo A (esercizio 1.e). a. Calcolare il prodotto scalare tra due vettori ottenuti a partire da due file di testo dati (6 punti). b. Dato un file di rifermento A ed un set di k file A k, si calcoli il minimo dei k prodotti scalare tra di loro calcolati (5 punti). 3. Si discuta la complessità degli algoritmi implementati nei punti 1 e 2 ed eventualmente si proponga senza sviluppare la soluzione ottima (8 punti).

42 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 21/09/ (12 punti) Data una stringa S, scrivere una funzione per calcolare il numero delle volte v che un carattere appare congiuntamente ad un altro in un suo intorno di raggio r dato. Esempio: S = ADCEADFEBACED, r = 2. D ed E appaiono congiuntamente nella stringa v = 4 volte: A D C A D F E B A C E D... 1 A D C A D F B A C E D... 2 A D C E A D F E B A C D... 1 r 2. (15 punti) Assumendo di avere un un file contenente le parole del dizionario ed un file contenente un testo in linguaggio naturale. Ripetere l esercizio 1. conteggiando quante volte una parola (non più un carattere) appare congiuntamente ad un altra. 3. (8 punti) Ripetere l esercizio 1. calcolando i valori di v su tutti i caratteri contenuti in un file testo senza considerare punteggiatura e spazi bianchi.

43 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 21/09/ (12 punti) Data una stringa S, scrivere una funzione per calcolare il numero delle volte v che un carattere appare congiuntamente ad un altro in un suo intorno di raggio r dato. Esempio: S = ADCEADFEBACED, r = 2. D ed E appaiono congiuntamente nella stringa v = 4 volte: A D C A D F E B A C E D... 1 A D C A D F B A C E D... 2 A D C E A D F E B A C D... 1 r 2. (15 punti) Assumendo di avere un un file contenente le parole del dizionario ed un file contenente un testo in linguaggio naturale. Ripetere l esercizio 1. conteggiando quante volte una parola (non più un carattere) appare congiuntamente ad un altra. 3. (8 punti) Ripetere l esercizio 1. calcolando i valori di v su tutti i caratteri contenuti in un file testo senza considerare punteggiatura e spazi bianchi. Quesito 1: Due cicli nidificati: Uno scorre tutta la stringa (indice i). L altro (indice j) scorre l intorno di centro i e raggio r. Si controlla che il carattere corrente dell intorno sia all interno della stringa. Si calcolano gli indici n ed m della matrice e si incrementa il contatore a tale posizione. char S[]="adceadfebaced"; int sl = strlen(s); int coocc[26][26] = {0; // co-occurence matrix initialized to 0 int i, j, m, n, r = 3; for(i=0; i<sl; i++){ // current char of the input string for(j=-r; j<=r; j++){ // current char of the ball of ray r if ( ( (i+j) >= 0 ) && // check if out of boundaries... ( (i+j) <= (sl-1) ) && ( j!=0 ) ){ // skip self-co-occurrence... // if // j // i m = S[ i ] - 'a'; n = S[ i+j ] - 'a'; coocc[m][n]++; // calc. row and column // count

44 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 21/09/ (12 punti) Data una stringa S, scrivere una funzione per calcolare il numero delle volte v che un carattere appare congiuntamente ad un altro in un suo intorno di raggio r dato. Esempio: S = ADCEADFEBACED, r = 2. D ed E appaiono congiuntamente nella stringa v = 4 volte: A D C A D F E B A C E D... 1 A D C A D F B A C E D... 2 A D C E A D F E B A C D... 1 r 2. (15 punti) Assumendo di avere un un file contenente le parole del dizionario ed un file contenente un testo in linguaggio naturale. Ripetere l esercizio 1. conteggiando quante volte una parola (non più un carattere) appare congiuntamente ad un altra. 3. (8 punti) Ripetere l esercizio 1. calcolando i valori di v su tutti i caratteri contenuti in un file testo senza considerare punteggiatura e spazi bianchi. Quesito 2: Dato un dizionario con N elementi, si sostituiscono le parole del file testo con le loro rispettive posizioni nel dizionario. L array di interi T cosi ottenuto viene processato come nel quesito 1. La codifica ASCII e la sottrazione del valore 97 non sono più necessari per indicizzare la matrice. int sl = sizeof(t)/sizeof(int); int coocc[n][n] = {0; // co-occurence matrix initialized to 0 int i, j, m, n, r = 3; for(i=0; i<sl; i++){ // current char of the input string for(j=-r; j<=r; j++){ // current char of the ball of ray r if ( ( (i+j) >= 0 ) && // check if out of boundaries... ( (i+j) <= (sl-1) ) && ( j!=0 ) ){ // skip self-co-occurrence... // if // j // I m = T[ i ]; n = T[ i+j ]; coocc[m][n]++; // calc. row and column // count

45 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 21/09/ (12 punti) Data una stringa S, scrivere una funzione per calcolare il numero delle volte v che un carattere appare congiuntamente ad un altro in un suo intorno di raggio r dato. Esempio: S = ADCEADFEBACED, r = 2. D ed E appaiono congiuntamente nella stringa v = 4 volte: A D C A D F E B A C E D... 1 A D C A D F B A C E D... 2 A D C E A D F E B A C D... 1 r 2. (15 punti) Assumendo di avere un un file contenente le parole del dizionario ed un file contenente un testo in linguaggio naturale. Ripetere l esercizio 1. conteggiando quante volte una parola (non più un carattere) appare congiuntamente ad un altra. 3. (8 punti) Ripetere l esercizio 1. calcolando i valori di v su tutti i caratteri contenuti in un file testo senza considerare punteggiatura e spazi bianchi. Quesito 3: Per eliminare i caratteri di punteggiatura si procede come per il quesito 1. della prova scritta precedente. Per eliminare i caratteri di spaziatura si procede in modo analogo a quanto fatto per la punteggiatura. [...]; int i = 0; int j = 0; int length = strlen(s); for (i = 0; i < length; i++) { if (S[i]!= ' ') { // if not a space char... //...copy in place the char S[j] = S[i]; // overwrite the spaces j++; // increment the index... // carattere di fine stringa... S[j++]='\0'; [...];

46 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti).

47 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 1a: Un modo per ridurre lo spazio occupato è quello di usare una lista collegata con puntatori in cui vengono allocati solo gli elementi diversi da zero. Insieme all informazione valore si includono anche i relativi indici riga e colonna e le dimensioni della matrice: struct sparsematrix{ float value; int row; int col; int dimrow; int dimcol; struct sparsematrix * next_ptr; ;

48 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 1b: Si modifica la funzione di inserimento su liste come segue (3 casi): void pre_insertsparsematrix(struct sparsematrix ** ptrptr, float value, int row, int col, int dimrow, int dimcol){ struct sparsematrix * ptrfound; // pointer to the found element Boolean found; // search [row,col]... found = searchsparsematrixprev(*ptrptr, row, col, &ptrfound, &prevptrfound); if ( found == TRUE && value!= 0){ ptrfound->value = value; // update the value of the element else if ( found == FALSE && value!= 0) { // add a new element... struct sparsematrix * tmp_ptr; tmp_ptr=*ptrptr; *ptrptr=(struct sparsematrix *)malloc(sizeof(struct sparsematrix)); (*ptrptr)->value=value; (*ptrptr)->row=row; (*ptrptr)->col=col; (*ptrptr)->dimrow = dimrow; (*ptrptr)->dimcol = dimcol; (*ptrptr)->next_ptr=tmp_ptr; else if ( found == TRUE && value==0) { // delete the element... if (*ptrptr && prevptrfound!=null) { // check list prevptrfound->next_ptr = ptrfound->next_ptr; free( ptrfound ); ptrfound = NULL; if (*ptrptr && prevptrfound==null) { // list non-empty and no previous free( ptrfound ); ptrfound = NULL; *ptrptr = NULL;

49 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 1b: Si modifica la funzione di ricerca su liste come segue: Boolean searchsparsematrixprev(struct sparsematrix * ptr, int row, int col, struct sparsematrix ** ptrptr, struct sparsematrix ** prevptr){ Boolean found; found=false; *prevptr = NULL; while( (ptr!=null) && (found==false) ){ if ( (ptr->row==row) && (ptr->col==col) ){ found=true; *ptrptr=ptr; else { *prevptr = ptr; ptr=ptr->next_ptr; return found;

50 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 1c: Si adatta il prodotto fra matrici usando le liste. Non potendo accedere alle matrici direttamente attraverso gli indici, l accesso ad una particolare entrata della matrice verrà fatto mediante ricerca su lista. Prodotto fra matrici rappresentate su array C. Si procede facendo una «traduzione» passo passo: [...] float tempprodval=0; int j, h, I=4, J=4, H=4; for(i=0;i<i;i++){ for(j=0;j<j;j++){ pre_insertsparsematrix(&productmatrix,0,i,j,4,4); for(h=0;h<h;h++){ if ( searchsparsematrix(mymatrix, i, h, &ptrfounda) && // if data is pre searchsparsematrix(mymatrix, h, j, &ptrfoundb) && // if data is pre ptrfounda->row == ptrfoundb->col ) { // and both are a if ( searchsparsematrix( productmatrix, i, j, &ptrfoundc) ) // dotproduct... tempprodval = ptrfoundc->value + ptrfounda->value * ptrfoundb->value; else tempprodval = 0 + ptrfounda->value * ptrfoundb->value; pre_insertsparsematrix(&productmatrix, tempprodval, i, j, 4, 4); // if // h // j // i [...]

51 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 1d: Stessa strategia per la somma: [...] for(i=0;i<i;i++){ for(j=0;j<j;j++){ if ( searchsparsematrix(mymatrix, i, j, &ptrfounda) ){ vala = ptrfounda->value; // if found get the value else { vala=0; // otherwise if not found is 0 if ( searchsparsematrix(mymatrix, i, j, &ptrfoundb) ){ valb = ptrfoundb->value; // if found get the value else { valb=0; // otherwise if not found is 0 // insert the sum of the two values... pre_insertsparsematrix(&summatrix, vala+valb, i, j, 4, 4); [...]

52 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). Quesito 2: Si usa una lista in cui ogni elemento è una parola. A questo fine una stringa di 30 elementi è sufficiente. Un ulteriore campo (int nval) viene inserito per contare le ripetizioni di ogni parola: struct stringlist{ char stringword[30]; int nval; struct stringlist * next_ptr; ; 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). La strategia per ottenere l unione di tutte le parole è quella di rimuovere le parole ripetute (si vedano anche prove scritte del 19/01/2015 e del 20/07/2015 ). La strategia per trovare l intersezione è di tenere solo quelle che si sono ripetute almeno una volta.

53 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 2 (2a): Funzione calcolo parole ripetute: void computenumrepeatedstring(struct stringlist * ptr) { struct stringlist * temp; while(ptr!= NULL) { int i=0; while((ptr->next_ptr!= NULL) && strcmp( ptr->stringword, ptr->next_ptr->stringword )==0 ) { temp = ptr->next_ptr; ptr->next_ptr = ptr->next_ptr->next_ptr; i++; free(temp); ptr->nval = i+1; ptr=ptr->next_ptr; La funzione ottiene l insieme unione senza fare nessuna modifica. Differenza altre prove scritte: uso di strcmp.

54 Prova Scritta di Fondamenti di Informatica A.A. 2014/15 Prof. Federico Pernici -- 22/12/ (16 punti) Data una matrice A di grandi dimensioni, in cui una larga parte degli elementi è zero, si definisca: a. Una rappresentazione alternativa per A che ne riduca sostanzialmente lo spazio allocato in memoria (4 punti). b. Una funzione per inserire/modificare i valori della matrice nella rappresentazione fornita come al punto sopra (4 punti). c. Una funzione per fare il prodotto fra due matrici nella medesima rappresentazione (4 punti). d. Una funzione per fare la somma (4 punti). 2. (16 punti) Dati n files f 1, f 2,, f n di tipo testo, contenenti linguaggio naturale (i.e. parole e segni di punteggiatura): a. Calcolare l unione (insiemistica) di tutte le parole contenute nei files (4 punti). b. Ripetere il calcolo al punto precedente considerando l intersezione al posto dell unione (4 punti). c. Ripetere i due punti precedenti escludendo dal calcolo quelle parole che non hanno un numero sufficiente di ripetizioni κ fissato a piacere (4 punti). d. Restituire gli insiemi precedentemente calcolati in modo ordinato (4 punti). Quesito 2 (2b, 2c e 2d): Per l intersezione si visita la lista ottenuta precedentemente e si inseriscono in una nuova lista solo le parole con nval > 1: void visitandinsert(struct stringlist * ptr, struct stringlist ** newlist){ while(ptr!=null){ if (ptr->nval > 1){ ord_insertstring(newlist,ptr->stringword); ptr=ptr->next_ptr; Per il quesito 2c si mette un valore generico k al posto di del valore 1 in: if (ptr->nval > k){ Usando un inserimento ordinato si risponde al quesito 2d.

55 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] i=1. 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto.

56 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] i=1. Quesito 1: Si assume di aver caricato le parole del dizionario in memoria nella matrice strmat (i.e. vedasi allocvoc( &rows, &cols, ptr_file, &strmat);). Il conteggio avviene selezionando ed incrementando un array di contatori. La selezione del contatore da incrementare viene fatta mediante la lunghezza di ogni parola. Non conoscendo il numero delle parole da analizzare è necessario l utilizzo della memoria dinamica (malloc). Equivalente all istruzione malloc è l istruzione calloc che in più inizializza tutto il blocco di memoria a zero. [...] int wordlength = 0; int* ptrcounters = (int *)calloc(cols, sizeof(int)); for ( i = 0; i < rows; i++ ){ wordlength = strlen(&strmat[i * cols + 0])-1; // save here the index i of the used word... ptrcounters[wordlength]++; // counter selection [...] 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto.

57 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto. i=1. Un modo per mantenere memoria degli indici è quello di usare degli array allocati dinamicamente e mantenere i loro indirizzi in un altro array di puntatori (ptrindexarray). (Nella figura p è la variabile equivalente a ptrindexarray e m ed n sono equivalenti rispettivamente a maxnindices e cols). maxnindices La grandezza di ogni array (maxnindices) si può sovrastimare o calcolare esattamente. Per favorire la leggibilità del codice si sceglie la sovrastima: int** ptrindexarray = NULL; ptrindexarray = (int **)calloc(cols,sizeof(int*)); int k; for ( k = 0; k < cols; k++ ){ ptrindexarray[k] = (int *)calloc(maxnindices,sizeof(int*)); Un ulteriore alternativa è quella di usare direttamente una matrice allocata dinamicamente di dimensioni cols*maxnindices.

58 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] i=1. Gli indici vengono scritti nelle locazioni di memoria puntate attraverso ptrindexarray.per poter correttamente scrivere ogni indice è necessario conoscere la prossima posizione libera su ogni array. A tal fine usa l array di contatori precedentemente implementato, che individua la prossima locazione libera (ptrcounters) al variare della lunghezza della parola. [...] int j; int* ptrcounters = (int *)calloc(cols, sizeof(int)); for( j = 0; j < cols; j++ ){ // for each length for( i = 0; i < rows; i++ ){ // for each word in the dictionary wordlength = strlen(&strmat[i * cols + 0])-1; // the length if (wordlength == j) { ptrindexarray[ j ][ ptrcounters[j] ] = i; // save index i ptrcounters[j]++; // count 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto.

59 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto. i=1. Quesito 2: Estendendo l esempio precedente al caso di dover contare e trovare gli indici di parole al variare di lughezza e anche di posizione del carattere si usa un array a tre dimensioni a cui si accede mediante Il puntatore ptrptra[k]: // the A_k matrices int** ptrptra = (int**)calloc(cols,sizeof(int*)); // the counters for the A_k matrices int** ptrptracounters= (int**)calloc(cols,sizeof(int*)); for( k = 0; k < cols; k++ ){ // for each length ptrptracounters[k] = (int *)calloc(26*cols,sizeof(int)); ptrptra[k] = (int *)calloc(26*cols*maxnindices,sizeof(int)); Una volta allocata la memoria, il contenuto viene referenziato come se fosse una matrice serializzata: int Matrix[A*B*C]; dove l elemento di indice a, b e c viene referenziato come: Matrix[a*B*C+b*C+c], dove B e C denotano ilnumero di valori del secondo e del terzo indice (B e C nell esempio, cols e maxnindices nel quesito).

60 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto. i=1. Avendo la memoria allocata, l insieme di indici (I) viene scritto mediante ptrptra selezionando opportunamente k, l e p. int I, l, p, currindx = 0; for( k = 0; k < cols; k++ ){ // for each length for( i = 0; i < ptrcounters[k]; i++ ){ // for each word of len k I = ptrindexarray[k][i]; // get its index for ( p = 0; p < k; p++ ){ // for each char l = strmat[i * cols + p] -'a'; // get the char indx currindx = ptrptracounters[k][l * cols + p]; //pos to write ptrptra[k][l*cols*maxnindices + p*maxnindices + currindx] = I; ptrptracounters[k][l * cols + p]++;// increment at (l,p) l currindx p k K+1 K+2

61 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] i=1. Quesito 4: [...] k=5; l=4; p=1; int indx=0; int iend = ptrptracounters[k][l * cols + p]; for ( i = 0; i < iend; i++ ){// length indx = ptrptra[k][l * cols * maxnindices + p * maxnindices + i ]; printf("%i %i %s", i, indx, &strmat[indx * cols + 0] ); 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto.

62 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2016 Dato un file testo F contenente le parole di un dizionario: 1. (5 punti) Calcolare la loro distribuzione in classi di lunghezza. Ovvero costruire un array h in cui h(1) contiene il numero di parole in F lunghe 1, h(2) contiene il numero di parole in F lunghe 2,... e h(n) contiene il numero di parole in F lunghe N. N è in particolare la lunghezza massima delle parole in F. 2. (7 punti) Per ogni classe k con k = 1.. N, come al punto sopra, costruire una matrice A k di dimensioni 26 1 k il cui generico elemento (l, p) fa riferimento ad un insieme di indici delle parole del dizionario che hanno la l-esima lettera in posizione p. Esempio: se k = 4, A 4 ha dimesioni 26 4, l elemento della matrice A 4 (2,3) fa riferimento alle parole di lunghezza 4 che hanno in posizione 3 la lettera B dell alfabeto (i.e. l = 2). 3. (8 punti) Implementare l insieme degli indici delle parole al punto 2. attraverso un array di bit. Esempio: h(9) = (ci sono parole lunghe 9 caratteri). L array di bit si può implementare in C mediante un array A di 32403/32 interi, sapendo che k%32 è la posizione del bit all interno del k/32-esimo elemento dell array di interi. 4. (12 punti) Dato N, A k e un insieme β i = (l, p) i con i = 1.. m elementi m di tali matrici, recuperare da F le parole che soddisfano A k [β i ] i=1. Quesito 3: Per scrivere un bit nell array di bit si inizializza un intero ad 1 e si moltiplica per 2 un numero pos di volte. Questa operazione sposta a sinistra il bit dopo ogni moltiplicazione. Per non cancellare i bit già presenti si fa un OR ( ) o un AND (&) logico. void Set1( int* A, int k ) { int i = k/32; int pos = k%32; unsigned int mask = 1; // mask = 0000,..., 0001 (4 byte, 32 bit ) mask = mask << pos; // mask = 0000,..., 0100 (pos=2 shifts) A[i] = A[i] mask; // set the k-th bit to 1 in A[i] without altering A[i] void Set0( int* A, int k ) { int i = k / 32; int pos = k % 32; unsigned int mask = 1; // mask = 0000,...,0001 mask = mask << pos; // mask = 0000,.,0100 (pos=3 shifts) mask = ~mask; // mask = 1111,...,1011 A[i] = A[i] & mask; // set the k-th bit to 0 in A[i] without altering A[i] Nota: Per l utilizzo di questa implementazione nel quesito 2 occorre usare una matrice di puntatori ad array di bit, anzichè un array a tre dimensioni come proposto. 1 Il numero 26 si riferisce al numero delle lettere dell alfabeto.

63 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare.

64 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare. Quesito 1: Soluzione simile al caso monodimensionale: void Set1_( int* A, int kk, int l, int p, int cols,int maxnindices ) { int i = kk/32; // i-th 4 byte word int pos = kk%32; // pos-th bit inside the 4byte word unsigned int mask = 1; // flag = 0000,..., 0001 (32 bit ) mask = mask << pos; // flag = 0000,..., 0100, 0000 A[l * cols * maxnindices + p * maxnindices + i ] = A[l * cols * maxnindices + p * maxnindices + i ] mask;

65 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare. Quesito 2: Si cercano le posizioni che soddisfano i vincoli. Soluzione analoga per verticali e orizzontali. for ( i = 0; i < N; i++ ){ for ( j = 0; j < M; j++ ){ if ( ( (i-1<0) emptycrossword[i-1][j] == '1' ) && // boundary or black ( emptycrossword[i][j] == '0' ) && // current empty ( (i+1<n) && emptycrossword[i+1][j] == '0' ) ){ // next empty printf("(%i,%i)v \n",i,j); down = i; while ( emptycrossword[down][j] == '0' && down < N) { // counting down++ ; defv[i][j]=down-i; // write the length numdef++; if ( ( (j-1<0) emptycrossword[i][j-1] == '1' ) && ( emptycrossword[i][j] == '0' ) && ( (j+1<m) && emptycrossword[i][j+1] == '0' ) ){ printf("(%i,%i)h \n",i,j); right = j; while ( emptycrossword[i][right] == '0' && right < M ) { right++ ; defh[i][j]=right-j; numdef++;

66 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare. Quesito 3: Visita in ampiezza mediante lista (tobevisited_ptr). Si scorrono le definizioni prec. calcolate... Trattazione verticali e orizzontali analoga. while(tobevisited_ptr!=null){ currentnodeptr = consume_first( &tobevisited_ptr ); if (iscompleted(currentnodeptr)==1){ printf("great! \n"); printcrossword(currentnodeptr); exit(0); ; for ( i = 0; i < N; i++ ){ // for each H cell for ( j = 0; j < M; j++ ){ // for each V cell // j // i // while Vertical Horizontal

67 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare. Quesito 3: codice per le definizioni Horizontal : k=currentnodeptr->freedefh[i*m + j]; if ( k > 0 ) { // for each horizontal def... right=0; // initialize counter for ( d = 0; d < k; d++ ){ // for each square... numletter = currentnodeptr->crossword[ i*m + (j+d) ] - 'a'; if ( numletter >= 0 && numletter <= 25) { // check if letters are present letterset[right] = numletter; // save the letter posset[right] = d; // save its position right++; // advance onto a new square if (right==0) { // no advances => empty cells for ( ii = 0; ii < h[k]; ii++ ){ // for each word of length k I = ptrindexarray[k][ii]; // get its index alloctreenode(&node,currentnodeptr,k,i,j,strmat,i,cols,0); suf_insert(&tobevisited_ptr,node); // insert in the fifo-list else if (right!=0) { // advances => handle letters for ( ii = 0; ii < rows; ii++ ) Set1( binout,ii ); // init to nout = bitwiseintersection( ptrptrabin[k],k,letterset,posset,right,cols, rows,maxnindices,binout); if (nout) { // if there are words... for ( ii = 0; ii < rows; ii++ ){ // for each word of length k if ( GetBit( binout, ii ) ) { // get the indices alloctreenode(&node,currentnodeptr,k,i,j,strmat,ii,cols,0); suf_insert(&tobevisited_ptr,node);// insert in the queue // if nout // else if // defh

68 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 4/02/ (8 punti) Dato un array dinamico serializzato contenente una matrice a tre dimensioni (i.e. X[i*J*K+j*K+k]), rappresentare la terza dimensione come un array di bit. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (9 punti) Data una griglia rettangolare di dimensione NxM costituita da caselle bianche e nere rappresentata mediante una matrice di elementi char dove 1 indica la casella nera (piena) e 0 indica la casella vuota, individuare le posizioni delle definizioni. Cioè delle caselle che si trovano sui bordi e negli angoli creati dalle caselle nere da cui può partire una parola scritta in verticale o in orizzontale di lunghezza almeno pari a (15 punti) Dato uno schema come al punto sopra, si visiti in ampiezza e in forma iterativa l albero che si ottiene partendo dallo schema vuoto e scrivendo le parole (disponibili in un file dizionario) rispettando gli incroci che si vengono reciprocamente a creare. Quesito 3: Supponendo di usare la rappresentazione al quesito 1, un metodo per enumerare tutte le parole aventi vincoli di lettera (array L) ad una certa posizione (array P) è mediante l utilizzo dell operatore binario AND (&) fra vettori di bit. int bitwiseintersection( int* A, int k, int* L,int* P, int LPlen, int cols, int rows,int maxnindices, int* out ){ int lpindx, binindx ; int i; int val; int nout = 0; for ( lpindx = 0; lpindx < LPlen; lpindx++ ){ // for each constraint for ( binindx = 0; binindx < rows; binindx++ ){ // for each word i = binindx/32; // i-th 4 byte word val = A[ L[lpIndx] * cols * maxnindices + P[lpIndx] * maxnindices + i ]; (out)[i] = (out)[i] & val ; // the bitwise AND (intersection) for ( binindx = 0; binindx < rows; binindx++ ){ if ( GetBit(out,binIndx) == 1){ nout++; // the number of set bit if (nout == 0) return 0; else return nout;

69 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 24/02/2016 Quesito 1a: Dalla definizione di differenza insiemistica si calcola: setdiff[i] = X1[i] & ~X2[i] 1. (10 punti) Dati due array di bit X 1 e X 2 dove ogni bit indica la presenza (o l assenza) di un elemento preso da un set di n disponibili. Scrivere una funzione in linguaggio C per calcolare: a. l insieme di tutti gli elementi in X 1 che non sono in X 2 X 1 X 2 = x X 1 x X 2. b. Calcolare inoltre l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per ogni X i, c. e l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per qualche X i. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (10 punti) Dire con quanti bit 0 consecutivi terminano i seguenti numeri in rappresentazione binaria: 5!, 11!, 23!, 43!, 79!, 111! e 236!. Scrivere una funzione in linguaggio C che ne verifichi la correttezza. 3. (10 punti) Scrivere una funzione in linguaggio C che trasferisce le foglie di un albero binario (da sinistra a destra) in una lista collegata con puntatori. int X1[100] = {0; int X2[100] = {0; int setdiff[100] = {0; Set1( X1, 1 ); Set1( X1, 2 ); Set1( X1, 3 ); Set1( X2, 1 ); Set1( X2, 5 ); Set1( X2, 4 ); // bit array ( bits) // Set 3 bits // Set 3 bits for ( i = 0; i < 100; i++ ){ setdiff[i] = X1[i] & ~X2[i];

70 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 24/02/ (10 punti) Dati due array di bit X 1 e X 2 dove ogni bit indica la presenza (o l assenza) di un elemento preso da un set di n disponibili. Scrivere una funzione in linguaggio C per calcolare: a. l insieme di tutti gli elementi in X 1 che non sono in X 2 X 1 X 2 = x X 1 x X 2. b. Calcolare inoltre l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per ogni X i, c. e l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per qualche X i. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (10 punti) Dire con quanti bit 0 consecutivi terminano i seguenti numeri in rappresentazione binaria: 5!, 11!, 23!, 43!, 79!, 111! e 236!. Scrivere una funzione in linguaggio C che ne verifichi la correttezza. Quesito 1b, 1c: Calcolo incrementale dell intersezione: int Xn[100][500] = {0; int Inter[100]; int Union[100] = {0; int j; for ( i = 0; i < 100; i++ ){ Set1( Inter, i ); // init. to for ( i = 0; i < 100; i++ ){ for ( j = 0; j < 500; j++ ){ Inter[i] = Inter[i] & Xn[i][j]; Union[i] = Union[i] Xn[i][j]; 3. (10 punti) Scrivere una funzione in linguaggio C che trasferisce le foglie di un albero binario (da sinistra a destra) in una lista collegata con puntatori.

71 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 24/02/ (10 punti) Dati due array di bit X 1 e X 2 dove ogni bit indica la presenza (o l assenza) di un elemento preso da un set di n disponibili. Scrivere una funzione in linguaggio C per calcolare: a. l insieme di tutti gli elementi in X 1 che non sono in X 2 X 1 X 2 = x X 1 x X 2. b. Calcolare inoltre l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per ogni X i, c. e l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per qualche X i. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a (10 punti) Dire con quanti bit 0 consecutivi terminano i seguenti numeri in rappresentazione binaria: 5!, 11!, 23!, 43!, 79!, 111! e 236!. Scrivere una funzione in linguaggio C che ne verifichi la correttezza. Quesito 2: La soluzione richiede di sommare il numero degli zeri in coda di ogni fattore: 3! = 01 * 10 * 11 => 1 4! = 001 * 010 * 011 * 100 => 3... int num=0, count=0; int numfactorial = 1200; int i; for( i=1 ; i <= numfactorial ; i++){ num = i; while( ( num & 1) == 0 ) { // while LSB == 0 count++; num = num >> 1; printf("number of trailing zeros = %d.", count); 3. (10 punti) Scrivere una funzione in linguaggio C che trasferisce le foglie di un albero binario (da sinistra a destra) in una lista collegata con puntatori.

72 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 24/02/ (10 punti) Dati due array di bit X 1 e X 2 dove ogni bit indica la presenza (o l assenza) di un elemento preso da un set di n disponibili. Scrivere una funzione in linguaggio C per calcolare: a. l insieme di tutti gli elementi in X 1 che non sono in X 2 X 1 X 2 = x X 1 x X 2. b. Calcolare inoltre l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per ogni X i, c. e l insieme degli elementi ottenuti come m i=1 X i = x X i x X i per qualche X i. Un array di bit monodimensionale si può implementare in C attraverso un array di interi A come in figura. Il bit in posizione k dell array di bit si pone ad 1 scrivendo alla locazione i=k/32 dell array di interi il valore A[i]=A[i] mask, dove la variabile mask contiene il numero intero decimale avente il bit alla posizione k%32 settato a 1. Quesito 3: Si usa un attraversamento ricorsivo passondo la lista ad ogni chiamata e si procede ad un inserimento in coda ogni volta che si incontra un nodo senza figli. void serializeleaves(struct btree * ptrtree, struct list ** ptrlst) { /* Parto dal codice della visita simmetrica */ if ((ptrtree!=null)) { if (!ptrtree->leftptr &&!ptrtree->rightptr ){ suf_insert(ptrlst, ptrtree->value); else { serializeleaves(ptrtree->leftptr, ptrlst); serializeleaves(ptrtree->rightptr, ptrlst); 2. (10 punti) Dire con quanti bit 0 consecutivi terminano i seguenti numeri in rappresentazione binaria: 5!, 11!, 23!, 43!, 79!, 111! e 236!. Scrivere una funzione in linguaggio C che ne verifichi la correttezza. 3. (10 punti) Scrivere una funzione in linguaggio C che trasferisce le foglie di un albero binario (da sinistra a destra) in una lista collegata con puntatori.

73 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 01/06/ (10 punti) Dato un array di N elementi float, scrivere una funzione in linguaggio C per calcolare: a. Il valore medio degli elementi. b. Il massimo degli elementi. c. Il minimo degli elementi. 2. (10 punti) Data una lista collegata con puntatori costituita da N elementi, scrivere una funzione in linguaggio C per calcolare: a. Il valore medio degli elementi. b. Il massimo degli elementi. c. Il minimo degli elementi. 3. (10 punti) Dato un albero binario di ricerca costituito da N elementi, scrivere una funzione in linguaggio C per calcolare: a. Il valore medio degli elementi. b. Il massimo degli elementi. c. Il minimo degli elementi. 4. (5 punti) Dire per quale delle tre strutture dati e per quali particolari funzioni (i.e. a., b., c.) si ottiene un vantaggio computazionale. Quesito 3: Si fa una visita ricorsiva dell albero e si sommano I valori degli elementi. Per il conteggio si incrementa un contatore. Entrambi i valori vengono passati ricorsivamente ad ogni chiamata mediante apposite variabili puntarore (somma, ntreeelem). void meantree(struct btree * ptrtree, float * somma, int * ntreeelem) { if(ptrtree!=null) { meantree(ptrtree->leftptr, somma, ntreeelem ); *somma=*somma + ptrtree->value; *ntreeelem = *ntreeelem + 1; meantree(ptrtree->rightptr, somma, ntreeelem ); // main int numtreeelems = 0; int valsum = 0; meantree(ptrtree, &valsum, &numtreeelems);

74 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 15/06/ (10 punti) Data una stringa contenente del testo in linguaggio naturale rimuovere le parole ripetute. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole di un dizionario, scrivere una funzione per calcolare la frequenza delle parole del dizionario. Discutere se è possibile migliorare computazionalmente la procedura. 3. (10 punti) Dato un albero binario, scrivere una funzione (possibilimente ricorsiva) in linguaggio C per calcolare: a. La somma degli elementi. b. Il numero totale degli elementi. c. La media degli elementi. Quesito 1: Le parole della stringa vengono inserite in modo ordinato in una lista. L ordine fra stringhe si verifica con la funzione strcmp. Dato l ordine, le parole ripetute sono contigue. Si visita la lista controllando se il prossimo elemento è uguale a quello corrente (i.e. definizione di duplicato). Nel caso in cui siano uguali si elimina l elemento. void removerepeatedwords(struct stringlist * ptr) { struct stringlist * temp; while(ptr!= NULL) { int i=0; while((ptr->next_ptr!= NULL) && strcmp( ptr->stringword, ptr->next_ptr->stringword )==0 ) { temp = ptr->next_ptr; ptr->next_ptr = ptr->next_ptr->next_ptr; free(temp); ptr=ptr->next_ptr;

75 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 15/06/ (10 punti) Data una stringa contenente del testo in linguaggio naturale rimuovere le parole ripetute. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole di un dizionario, scrivere una funzione per calcolare la frequenza delle parole del dizionario. Discutere se è possibile migliorare computazionalmente la procedura. 3. (10 punti) Dato un albero binario, scrivere una funzione (possibilimente ricorsiva) in linguaggio C per calcolare: a. La somma degli elementi. b. Il numero totale degli elementi. c. La media degli elementi. Quesito 2: Si inseriscono le parole in una lista. Come nell esercizio precedente. Si contano le parole ripetute (vedasi anche: esercizio 1b compito 19/01/2015 e esercizio 2a compito 22/12/2016). void computenumrepeatedstring(struct stringlist * ptr) { struct stringlist * temp; while(ptr!= NULL) { int i=0; while( (ptr->next_ptr!= NULL) && strcmp(ptr->next_ptr->stringword, ptr->stringword) == 0 ) { temp = ptr->next_ptr; ptr->next_ptr = ptr->next_ptr->next_ptr; i++; free(temp); ptr -> nval = i+1; ptr = ptr->next_ptr; La lista cosi ottenuta continene le frequenze di tutte le parole della stringa. Per ottenere solo quelle del filedizionario si effettua una ricerca nella lista.

76 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 15/06/ (10 punti) Data una stringa contenente del testo in linguaggio naturale rimuovere le parole ripetute. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole di un dizionario, scrivere una funzione per calcolare la frequenza delle parole del dizionario. Discutere se è possibile migliorare computazionalmente la procedura. 3. (10 punti) Dato un albero binario, scrivere una funzione (possibilimente ricorsiva) in linguaggio C per calcolare: a. La somma degli elementi. b. Il numero totale degli elementi. c. La media degli elementi. Quesito 3: Somma: si visita l albero ritornando in uscita della funzione la somma del valore corrente con il sottoalbero destro e sinistro. Conteggio: analogo alla somma ma si sostituisce al posto del valore corrente il valore 1. int sumtree(struct btree * ptrtree){ if(ptrtree == NULL) return 0; return ptrtree->value + sumtree(ptrtree->rightptr) + sumtree(ptrtree->leftptr); int counttree(struct btree * ptrtree){ if(ptrtree == NULL) return 0; return 1 + counttree(ptrtree->rightptr) + counttree(ptrtree->leftptr); int main(){ float mean = sumtree(ptrtree)/counttree(ptrtree);

77 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 06/07/ (10 punti) Dato un file testo contenente le parole di un dizionario: a. contare quante di esse iniziano con una specifica lettera dell alfabeto ( a, b, c,..., z ). b. Trovare inoltre, fra le parole che iniziano con la stessa lettera, la parola più lunga. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole: a. scrivere una funzione per calcolare il numero delle volte che tali parole si ripetono nella stringa. b. Scegliere e motivare una soluzione che riduca la complessità computazionale del problema. 3. (10 punti) Dato un albero binario, scambiare i figli destro e sinistro fra loro. Quesito 1: Si scorrono le parole (words) e si usa la prima lettera per indicizzare (charpos) un array di contatori (hist) e di valori massimi (histmax). Per contare si incrementa il valore indicizzato nell array mentre per il massimo si calcola il nuovo massimo (maxval). Se maggiore del precedente si sovrascrive e si salva l indice (i) della parola corrente. char * words[] = { "abaco", "abbaiare", "birra", "ciao", "carro", "dinamo"; int nwords = 6, charpos, wordlength, i, maxval; int longestword[26] = {0; // 26 letters int histmax[26] = {0; // 26 letters int hist[26] = {0; // 26 letters for ( i = 0; i < nwords; i++ ){ wordlength = strlen(words[i]); charpos = words[i][0] - 'a'; // the index hist[charpos]++; maxval = MAX( histmax[charpos], wordlength ); if (maxval > histmax[charpos]) { histmax[charpos] = maxval; // new max longestword[charpos] = i; // save the index

78 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 06/07/ (10 punti) Dato un file testo contenente le parole di un dizionario: a. contare quante di esse iniziano con una specifica lettera dell alfabeto ( a, b, c,..., z ). b. Trovare inoltre, fra le parole che iniziano con la stessa lettera, la parola più lunga. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole: a. scrivere una funzione per calcolare il numero delle volte che tali parole si ripetono nella stringa. b. Scegliere e motivare una soluzione che riduca la complessità computazionale del problema. 3. (10 punti) Dato un albero binario, scambiare i figli destro e sinistro fra loro. Quesito 2: Si analizza la stringa mediante la funzione di libreria strtok per estrarre le singole parole delimitate dallo spazio. Si scorre la stringa contenente il testo attraverso un ciclo. La condizione di fine ciclo controlla che vi siano ancora parole disponibili nella stringa. Per il calcolo delle frequenze si procede come per il quesito 2 della prova scritta del 15/06/2016 ( funzione computenumrepeatedstring(mylist) ). char s[2] = " ";// Delimitatore parole testo char *parola;// stringa della parola ("tokenizzata") struct stringlist * mylist;// lista di elementi stringa initstringlist(&mylist);// inizializzazione lista parola = strtok(mystring, s);// prima chiamata per "tokenizzare" la stringa while( parola!= 0 ) { // finchè vi sono parole nella stringa... ord_insertstring(&mylist,parola); // inserimento ordinato... parola = strtok(0, s); // successive chiamate per "tokenizzare" la stringa computenumrepeatedstring(mylist);

79 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 06/07/ (10 punti) Dato un file testo contenente le parole di un dizionario: a. contare quante di esse iniziano con una specifica lettera dell alfabeto ( a, b, c,..., z ). b. Trovare inoltre, fra le parole che iniziano con la stessa lettera, la parola più lunga. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole: a. scrivere una funzione per calcolare il numero delle volte che tali parole si ripetono nella stringa. b. Scegliere e motivare una soluzione che riduca la complessità computazionale del problema. 3. (10 punti) Dato un albero binario, scambiare i figli destro e sinistro fra loro. Quesito 2: (continua) L esercizio si conclude chiedendo di stampare le frequenze solo per alcune parole. Ad esempio quelle contenute nella stringa dictionaryword. Questo si ottiene cercando (searchstring) tali parole all interno della lista precedentemente ottenuta e stampando le relative frequenze nel caso in cui la parola venga trovata. char * dictionarywords[] = { "the", "to", "of", "ciao"; // parole di un ipotetico dizionario (potrebbero anche essere caricate da file e/o tokenizzate come per la stringa sopra) int N_words = 4; struct stringlist * foundword;// elemento della lista che verrà ritornato nel caso di ricerca andata a buon fine initstringlist(&foundword);// inizializzazione lista int ii=0; for (ii = 0; ii < N_words; ii++) {// si scorrono le parole del dizionario // si effettua una ricerca per vedere se la parola è presente if ( searchstring(mylist,dictionarywords[ii],&foundword) ){ // se trovata se ne stampa la frequenza printf("la parola '%s' ha frequenza = %d \n",dictionarywords[ii],foundword->nval);

80 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 06/07/2016 Quesito 3: Dalla definizione: sivisita l albero e per un generico elemento si scambiano i puntatori dei figli. In forma ricorsiva la definizione si traduce come segue: 1. (10 punti) Dato un file testo contenente le parole di un dizionario: a. contare quante di esse iniziano con una specifica lettera dell alfabeto ( a, b, c,..., z ). b. Trovare inoltre, fra le parole che iniziano con la stessa lettera, la parola più lunga. 2. (10 punti) Data una stringa contenente del testo in linguaggio naturale, ed un file contenente alcune parole: a. scrivere una funzione per calcolare il numero delle volte che tali parole si ripetono nella stringa. b. Scegliere e motivare una soluzione che riduca la complessità computazionale del problema. 3. (10 punti) Dato un albero binario, scambiare i figli destro e sinistro fra loro. void swappedtree(struct btree* node) { // the guard stopping the recursion if (node==null) { return; else{ // start recursion... swappedtree(node->leftptr); swappedtree(node->rightptr); // swap left with right struct btree* temp; temp = node->leftptr; node->leftptr = node->rightptr; node->rightptr = temp;

81 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 20/07/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca le foglie in una lista. b. Conti le foglie (senza usare la lista). Soluzione quesito 1a. Si usa un attraversamento ricorsivo passondo la lista ad ogni chiamata e si procede ad un inserimento in coda ogni volta che si incontra un nodo senza figli. void serializeleaves(struct btree * ptrtree, struct list ** ptrlst) { /* Parto dal codice della visita simmetrica */ 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Visiti la lista in ordine inverso (Es. {3,5,7,9 => {9,7,5,3). b. Crei una una nuova lista con gli elementi in ordine inverso. 3. (10 punti) Date delle parole in linguaggio naturale: a. contare quante di esse se lette al contrario rimangono uguali (Es. radar, kayak, aveva, ingegni). b. Trovare inoltre, fra le parole contate al punto a., quella più lunga. if ((ptrtree!=null)) { if (!ptrtree->leftptr &&!ptrtree->rightptr ){ suf_insert(ptrlst, ptrtree->value); else { serializeleaves(ptrtree->leftptr, ptrlst); serializeleaves(ptrtree->rightptr, ptrlst);

82 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 20/07/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca le foglie in una lista. b. Conti le foglie (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Visiti la lista in ordine inverso (Es. {3,5,7,9 => {9,7,5,3). b. Crei una una nuova lista con gli elementi in ordine inverso. 3. (10 punti) Date delle parole in linguaggio naturale: a. contare quante di esse se lette al contrario rimangono uguali (Es. radar, kayak, aveva, ingegni). b. Trovare inoltre, fra le parole contate al punto a., quella più lunga. Quesito 1b: Si fa una visita ricorsiva dell albero e si incrementa un contatore. Il contatore viene passato ricorsivamente ad ogni chiamata mediante una variabile puntarore (ntreeelem) (si veda anche quesito 3 del 15/06/2016 e quesito 3 del 1/06/2016). void counttree(struct btree * ptrtree, int * ntreeelem) { if(ptrtree!=null) { counttree(ptrtree->leftptr, ntreeelem ); *ntreeelem = *ntreeelem + 1; counttree(ptrtree->rightptr, ntreeelem ); // main int ntreeelem = 0; counttree(ptrtree, &numtreeelems);

83 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 20/07/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca le foglie in una lista. b. Conti le foglie (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Visiti la lista in ordine inverso (Es. {3,5,7,9 => {9,7,5,3). b. Crei una una nuova lista con gli elementi in ordine inverso. Quesito 2a: Si fa una visita ricorsiva della lista postponendo la stampa. void visit_r_backward(struct list * ptr){ if(ptr!=null){ visit_r_backward(ptr->next_ptr); printf("%f",ptr->value); 3. (10 punti) Date delle parole in linguaggio naturale: a. contare quante di esse se lette al contrario rimangono uguali (Es. radar, kayak, aveva, ingegni). b. Trovare inoltre, fra le parole contate al punto a., quella più lunga.

84 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 20/07/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca le foglie in una lista. b. Conti le foglie (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Visiti la lista in ordine inverso (Es. {3,5,7,9 => {9,7,5,3). b. Crei una una nuova lista con gli elementi in ordine inverso. 3. (10 punti) Date delle parole in linguaggio naturale: a. contare quante di esse se lette al contrario rimangono uguali (Es. radar, kayak, aveva, ingegni). b. Trovare inoltre, fra le parole contate al punto a., quella più lunga. Quesito 2b: Si fa una copia della lista inserendo gli elementi in testa (pre_insert) anzichè in coda (suf_insert). void clone(struct list * src_ptr, struct list ** dest_ptrptr){ init(dest_ptrptr); while(src_ptr!=null){ pre_insert(dest_ptrptr,src_ptr->value); src_ptr=src_ptr->next_ptr; // (visita)

85 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 20/07/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca le foglie in una lista. b. Conti le foglie (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Visiti la lista in ordine inverso (Es. {3,5,7,9 => {9,7,5,3). b. Crei una una nuova lista con gli elementi in ordine inverso. 3. (10 punti) Date delle parole in linguaggio naturale: a. contare quante di esse se lette al contrario rimangono uguali (Es. radar, kayak, aveva, ingegni). b. Trovare inoltre, fra le parole contate al punto a., quella più lunga. Quesito 3a 3b: Per invertire la parola si può usare la funzione di libreria strrev in string.h. Si usa strcmp per verificare se uguale, in tal caso si incrementa un contatore, si calcola la lunghezza e si controlla il massimo. char * words[] = { "radar", "kayak", "aveva", "ingegni", "bus", "bari" ; int nwords = 6; int i; char reversedword[20]; int nsymm = 0; int wordlength = 0; int maxval = 0; for ( i = 0; i < nwords; i++ ){ strcpy(reversedword,words[i]); strrev(reversedword); wordlength = strlen(words[i]); if (strcmp(reversedword,words[i]) == 0) { nsymm++; if (wordlength > maxval) { longestwordindex = i; maxval = wordlength;

86 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 21/09/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca i nodi con valori contenuti in un intervallo [a,b] in una lista. b. Conti i nodi del punto a. (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi ordinati in modo crescente. b. Crei una nuova lista con gli elementi ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Trovare la parola di lunghezza massima. b. Inserire le parole in un albero binario di ricerca. Quesito 1a: Si parte dal codice per vistare in modo ricorsivo un albero binario di ricerca. Si sostituisce alla stampa del nodo il codice di inserimento in lista previo controllo se contenuto nell intervallo. La lista (ptrlst) e gli estremi dell intervallo (a,b) vengono passati ad ogni chiamata ricorsiva. Nel main la funzione viene chiamata come: serializetreeinterval(ptrtree,&mylist,10,40); void serializetreeinterval(struct btree * ptrtree, struct list ** ptrlst, float a, float b) { /* Parto dal codice della visita */ if ((ptrtree!=null)) { serializetreeinterval(ptrtree->leftptr, ptrlst, a, b); if ( ptrtree->value >= a && ptrtree->value <= b ){ suf_insert(ptrlst, ptrtree->value); serializetreeinterval(ptrtree->rightptr, ptrlst, a, b);

87 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 21/09/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca i nodi con valori contenuti in un intervallo [a,b] in una lista. b. Conti i nodi del punto a. (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi ordinati in modo crescente. b. Crei una nuova lista con gli elementi ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Trovare la parola di lunghezza massima. b. Inserire le parole in un albero binario di ricerca. Quesito 2a: Si parte dal codice per vistare in modo ricorsivo un albero binario di ricerca. Si sostituisce alla stampa del nodo il codice di conteggio nel caso in cui il valore è contenuto nell intervallo. Nel main la funzione viene chiamata come: int numelem = 0; counttreeinterval(ptrtree,10,40,&numelem); Gli estremi dell intervallo e il puntatore al contatore vengono passati ad ogni chiamata ricorsiva. void counttreeinterval(struct btree * ptrtree, float a, float b, int * ntreeelem) { if(ptrtree!=null) { counttreeinterval(ptrtree->leftptr, a, b, ntreeelem); if ( ptrtree->value >= a && ptrtree->value <= b ){ *ntreeelem = *ntreeelem + 1; counttreeinterval(ptrtree->rightptr, a, b, ntreeelem);

88 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 21/09/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca i nodi con valori contenuti in un intervallo [a,b] in una lista. b. Conti i nodi del punto a. (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi ordinati in modo crescente. b. Crei una nuova lista con gli elementi ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Trovare la parola di lunghezza massima. b. Inserire le parole in un albero binario di ricerca. Quesito 2a e 2b: Si parte dal codice della funzione (clone) per creare la copia di una lista usando l inserimento ordinato (ord_insert). void cloneordered(struct list * src_ptr, struct list ** dest_ptrptr){ init(dest_ptrptr); while(src_ptr!=null){ ord_insert(dest_ptrptr,src_ptr->value); src_ptr=src_ptr->next_ptr; Per ottenere gli elementi ordinati in senso contrario si cambia il segno < con > nel test di visita nella funzione di inserimento in ordine (ord_insert). void ord_insert(struct list ** ptrptr, float value){ while(*ptrptr!=null && (*ptrptr)->value > value) ptrptr=&((*ptrptr)->next_ptr); pre_insert(ptrptr,value);

89 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 21/09/ (10 punti) Dato un albero binario di ricerca, si scriva una funzione che: a. Trasferisca i nodi con valori contenuti in un intervallo [a,b] in una lista. b. Conti i nodi del punto a. (senza usare la lista). 2. (10 punti) Data una lista in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi ordinati in modo crescente. b. Crei una nuova lista con gli elementi ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Trovare la parola di lunghezza massima. b. Inserire le parole in un albero binario di ricerca. Quesito 3b: Si parte dal codice della funzione di inserimento per un albero binario di ricerca (insert_inorder). Si sostituisce il campo contenente l informazione con una stringa (ad esempio di max di 30 caratteri). Si usa la strcmp per confrontare l ordine alfabetico di due parole e si usa strcpy per copiare la stringa nell elemento dell albero. void insertbtreeinorderstring(struct btreestring ** ptrptr, char *word ) { if(*ptrptr!=null){ if ( strcmp( word, (*ptrptr)->word ) <= 0 ) { insertbtreeinorderstring( &((*ptrptr)->leftptr), word); else { insertbtreeinorderstring( &((*ptrptr)->rightptr), word); else { (*ptrptr)=(struct btreestring *)malloc(sizeof(struct btreestring)); strcpy( (*ptrptr)->word, word ); (*ptrptr)->leftptr=null; (*ptrptr)->rightptr=null;

90 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/2017 Quesito 1a: Si visita la lista e si sommano (sum) i valori in essa contenuti. Si incrementa un contatore (numelem) per contare gli elementi nella lista. Si ritorna il rapporto fra la somma ed il numero di elementi calcolati. 1. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). float meanlist(struct list * ptr){ float sum = 0; int numelem = 0; while(ptr!=null){ sum += ptr->value; numelem++; ptr=ptr->next_ptr; return sum/numelem;

91 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 1b: Si calcola la media (mean) come nell esercizio precedente. Si visita la lista e si sommano (sum) i valori al quadrato diminuiti della media. Si incrementa un contatore (numelem) per contare gli elementi nella lista. Si ritorna il la radice quadrata del rapporto fra la somma ed il numero di elementi calcolati. float stdlist(struct list * ptr){ float mean = meanlist(ptr); float sum = 0; int numelem = 0; while(ptr!=null){ sum += (ptr->value-mean)*(ptr->value-mean); numelem++; ptr=ptr->next_ptr; return sqrt(sum/numelem);

92 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 2a: Si parte dal codice della funzione (clone) per creare la copia di una lista. Si applica il controllo (resto della divisione intera per due uguale a zero) per inserire i soli elementi pari. void clonelistevennumbers(struct list * src_ptr, struct list ** dest_ptrptr){ init(dest_ptrptr); while(src_ptr!=null){ if ( (src_ptr->value) % 2 == 0) { pre_insert(dest_ptrptr,src_ptr->value); src_ptr=src_ptr->next_ptr;

93 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 2a: Si parte dal codice della funzione (clone) per creare la copia di una lista. Si applica il controllo (resto della divisione intera per due diverso da zero) per inserire i soli elementi dispari. Si utilizza un inserimento ordinato (pre_insert) per avere il valori dispari ordinati in modo decrescente. void cloneorderedlistoddnumbers(struct list * src_ptr, struct list ** dest_ptrptr){ init(dest_ptrptr); while(src_ptr!=null){ if ( (src_ptr->value) % 2!= 0) { ord_insert(dest_ptrptr,src_ptr->value); src_ptr=src_ptr->next_ptr;

94 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 3a: Si parte dal codice della funzione di inserimento per un albero binario di ricerca (insert_inorder). Si sostituisce il campo contenente l informazione con una stringa (ad esempio di max di 30 caratteri). Si usa la funzione strcmp per confrontare l ordine alfabetico di due parole e si usa la funzione strcpy per copiare la stringa nell elemento dell albero. void insertbtreeinorderstring(struct btreestring ** ptrptr, char *word ) { if(*ptrptr!=null){ if ( strcmp( word, (*ptrptr)->word ) <= 0 ) { insertbtreeinorderstring( &((*ptrptr)->leftptr), word); else { insertbtreeinorderstring( &((*ptrptr)->rightptr), word); else { (*ptrptr)=(struct btreestring *)malloc(sizeof(struct btreestring)); strcpy( (*ptrptr)->word, word ); (*ptrptr)->leftptr=null; (*ptrptr)->rightptr=null;

95 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 3b: Si parte dal codice della funzione di ricerca di un elemento per un albero binario di ricerca (searchtree). Si usa la strcmp per confrontare l ordine alfabetico di due parole durante l inserimento. Si aggiunge una variabile (ntreedepth) che conta il numero di ricorsioni effettuate per trovare la parola. Boolean searchtreestring(struct btreestring * ptr, char *target, int * ntreedepth ) { if(ptr!=null) { // if is not a leaf... * ntreedepth = * ntreedepth + 1; if ( strcmp( (ptr)->word, target) == 0 ) { // found? return TRUE; else { // if not found... if ( strcmp( (ptr)->word, target) > 0 ) // go left... return searchtreestring(ptr->leftptr, target, ntreedepth); else // go right... return searchtreestring(ptr->rightptr, target, ntreedepth); else // if is a leaf... return FALSE;

96 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 19/01/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Calcoli la media dei valori. b. Calcoli la deviazione standard dei valori. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, si scriva una funzione che: a. Crei una nuova lista con gli elementi pari. b. Crei una nuova lista con gli elementi dispari ordinati in modo decrescente. 3. (10 punti) Date delle parole in linguaggio naturale: a. Inserire le parole in un albero binario di ricerca. b. Calcolare la profondità dell albero (il massimo delle profondità dei diversi nodi). Quesito 3b: Si ricerca ogni parola inserita mediante la funzione searchtreestring e si utilizza la profondità cosi ottenuta per il calcolo del massimo. Per la scansione di tutte le parole si usa un ciclo (for). Ad ogni iterazione la profondità massima (maxdepth) viene aggiornata con quella della parola corrente (currdepth). char * words[] = { "colla", "bandiera", "abaco", "diario", "estro", "fare", "gara", "health", "innato" ; int nwords = 9; struct btreestring * ptrtree = NULL; for ( int i = 0; i < nwords; i++ ){ insertbtreeinorderstring( &ptrtree, words[i]); int currdepth; int maxdepth = 0; for ( int i = 0; i < nwords; i++ ){ currdepth = 0; searchtreestring( ptrtree, words[i], &currdepth); maxdepth = MAX( maxdepth, currdepth);

97 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 9/02/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni la media dei valori pari e dei valori dispari. b. Ritorni la deviazione standard dei valori pari e dei valori dispari. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni una nuova lista in cui si aggiunge un elemento davanti ad ogni altro. Ogni elemento aggiunto deve contenere il valore del successivo diminuito di uno. Esempio: (2,4,6) -> (1,2,3,4,5,6). b. Ripetere l esercizio precedente aggiungendo gli elementi alla lista originale. 3. (10 punti) Dato un albero binario di ricerca a valori interi: a. Scrivere una funzione che ritorni il numero totale dei nodi. b. Scrivere una funzione che ritorni il numero totale delle foglie. Quesito 1a: Si visita la lista e si sommano su due variabili distinte (sumeven,sumodd) i valori pari e quelli dispari. Si incrementano due contatori (numelemeven, numelemodd) per contare gli elementi pari e dispari. Per ritornare due valori si passano gli indirizzi delle due variabili e si modificano i contenuti da esse puntati. void meanlistevenodd(struct intlist * ptr, float* meaneven, float* meanodd){ float sumeven = 0; float sumodd = 0; int numelemeven = 0; int numelemodd = 0; while(ptr!=null){ if ( (ptr->value) %2 == 0) { // pari sumeven += ptr->value; numelemeven++; else { // dispari sumodd += ptr->value; numelemodd++; ptr=ptr->next_ptr; *meaneven = sumeven/numelemeven; *meanodd = sumodd/numelemodd;

98 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 9/02/2017 Quesito 1b: Procedimento simile all esercizio precedente. Si chiama la funzione precedente per il calcolo delle medie. Si effettua la somma degli scarti al quadrato. 1. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni la media dei valori pari e dei valori dispari. b. Ritorni la deviazione standard dei valori pari e dei valori dispari. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni una nuova lista in cui si aggiunge un elemento davanti ad ogni altro. Ogni elemento aggiunto deve contenere il valore del successivo diminuito di uno. Esempio: (2,4,6) -> (1,2,3,4,5,6). b. Ripetere l esercizio precedente aggiungendo gli elementi alla lista originale. 3. (10 punti) Dato un albero binario di ricerca a valori interi: a. Scrivere una funzione che ritorni il numero totale dei nodi. b. Scrivere una funzione che ritorni il numero totale delle foglie. void stdlistevenodd(struct intlist * ptr, float* stdeven, float* stdodd){ float sumeven = 0; float sumodd = 0; int numelemeven = 0; int numelemodd = 0; float meaneven = 0; float meanodd = 0; meanlistevenodd(ptr,&meaneven,&meanodd); while(ptr!=null){ if ( (ptr->value) %2 == 0) {// pari sumeven += (ptr->value-meaneven)*(ptr->value-meaneven); numelemeven++; else {// dispari sumodd += (ptr->value-meanodd)*(ptr->value-meanodd); numelemodd++; ptr=ptr->next_ptr; *stdeven = sqrt(sumeven/numelemeven); *stdodd = sqrt(sumodd/numelemodd);

99 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 9/02/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni la media dei valori pari e dei valori dispari. b. Ritorni la deviazione standard dei valori pari e dei valori dispari. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni una nuova lista in cui si aggiunge un elemento davanti ad ogni altro. Ogni elemento aggiunto deve contenere il valore del successivo diminuito di uno. Esempio: (2,4,6) -> (1,2,3,4,5,6). b. Ripetere l esercizio precedente aggiungendo gli elementi alla lista originale. Quesito 2a: Si parte dalla funzione per fare la copia di una lista (clone). Prima di inserire nella nuova lista la copia dell elemento corrente si effettua un inserimento in coda al puntatore corrente (suf_insertint) con il valore dell elemento corrente diminuito di uno. void insertinfrontlistclone(struct intlist * ptr, struct intlist ** dest_ptrptr){ initintlist(dest_ptrptr); while(ptr!=null){ suf_insertint(dest_ptrptr,ptr->value-1); suf_insertint(dest_ptrptr,ptr->value); ptr=ptr->next_ptr; 3. (10 punti) Dato un albero binario di ricerca a valori interi: a. Scrivere una funzione che ritorni il numero totale dei nodi. b. Scrivere una funzione che ritorni il numero totale delle foglie.

100 Prova Scritta di Fondamenti di Informatica A.A. 2015/16 Prof. Federico Pernici -- 9/02/ (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni la media dei valori pari e dei valori dispari. b. Ritorni la deviazione standard dei valori pari e dei valori dispari. 2. (10 punti) Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che: a. Ritorni una nuova lista in cui si aggiunge un elemento davanti ad ogni altro. Ogni elemento aggiunto deve contenere il valore del successivo diminuito di uno. Esempio: (2,4,6) -> (1,2,3,4,5,6). b. Ripetere l esercizio precedente aggiungendo gli elementi alla lista originale. 3. (10 punti) Dato un albero binario di ricerca a valori interi: a. Scrivere una funzione che ritorni il numero totale dei nodi. b. Scrivere una funzione che ritorni il numero totale delle foglie. Quesito 2b: Si parte dalla funzione per inserire elementi in coda ad una lista (suf_insertint). Si sposta la chiamata pre_insertint all interno del ciclo utilizzato per arrivare a fine lista. Per evitare di visitare l elemento appena inserito si passa al successivo del successivo utilizzanto due volte il campo puntatore all elemento successivo: (*ptrptr)->next_ptr->next_ptr. void insertinfrontlist(struct intlist ** ptrptr){ while( *ptrptr!= NULL) { pre_insertint( ptrptr, (*ptrptr)->value-1 ); ptrptr=&( (*ptrptr)->next_ptr->next_ptr );

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa. 3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il

Dettagli

Per semplicità eliminiamo le ripetizioni nell'albero.

Per semplicità eliminiamo le ripetizioni nell'albero. Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore

Dettagli

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna: Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

Complessità algoritmi su strutture dati (riassunto)

Complessità algoritmi su strutture dati (riassunto) Complessità algoritmi su strutture dati (riassunto) Struttura di dato Ricerca Complessità (caso peggiore) Tavola come array non Ricerca sequenziale O(N) ordinato (N elementi) Tavola come array ordinato

Dettagli

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol. Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione prof. Lorenzo Porcelli e mail: genna18@iol.it sito: users.iol.it/genna18 Risoluzione di un problema Dato

Dettagli

ADT Coda con priorità

ADT Coda con priorità Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni

Dettagli

Alberi binari. Esercizi su alberi binari

Alberi binari. Esercizi su alberi binari Alberi binari Definizione della struttura dati: struct tree int dato; struct tree *sx, *dx; ; typedef struct tree tree; Esercizi su alberi binari 1. Scrivere una funzione che cerchi un intero k all'interno

Dettagli

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di

Dettagli

alberi binari e ricorsione

alberi binari e ricorsione alberi binari e ricorsione un albero binario: ogni nodo ha al più 2 figli ogni figlio è destro o sinistro figlio sinistro nodo interno radice figlio destro foglia cammini = sequenze di nodi = sequenze

Dettagli

Lezione 9 Alberi binari di ricerca

Lezione 9 Alberi binari di ricerca Lezione 9 Alberi binari di ricerca Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 Lista monodirezionale Scrivere

Dettagli

Fondamenti di Informatica - 1. Esercizi A.A. 2011/2012

Fondamenti di Informatica - 1. Esercizi A.A. 2011/2012 Fondamenti di Informatica - 1 Esercizi A.A. 2011/2012 Esercizio Esercizio Esercizio Esercizio Esercizio Dato ilnumero 11000000111100000000000000000000 rappresentato secondo lo standard floating point IEEE

Dettagli

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,

Dettagli

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1 Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1 1) Dato un diagramma di flusso quali sono le condizioni necessarie perché si possa costruire un programma corrispondente?

Dettagli

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizio 1 Liste: calcolo perimetro di un poligono Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 12 Esercitazione: 28 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo perimetro di

Dettagli

Esercizi proposti 10

Esercizi proposti 10 Esercizi proposti 10 In questo gruppo di esercizi assumiamo, dove non sia specificato diversamente, di rappresentare i grafi mediante liste di archi, con il tipo di dati così dichiarato: type a graph =

Dettagli

Esercitazione 6. Array

Esercitazione 6. Array Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione

Dettagli

Alberi di ricerca binari

Alberi di ricerca binari Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura di dati che supporta in modo

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

Informatica A a.a. 2010/ /02/2011

Informatica A a.a. 2010/ /02/2011 Politecnico di Milano Dipartimento di Elettronica e Informazione Informatica A a.a. 2010/2011 23/02/2011 Cognome Matricola Nome Firma dello studente Istruzioni Non separate questi fogli. Scrivete la soluzione

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Alberi binari di ricerca 2 1 Alberi L albero è un tipo astratto di dato utilizzato per rappresentare

Dettagli

Strutture di accesso ai dati: B + -tree

Strutture di accesso ai dati: B + -tree Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 0 9-2 0 0 Osservazione Quando l indice aumenta di dimensioni, non può risiedere

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

Codifica binaria. Rappresentazioni medianti basi diverse

Codifica binaria. Rappresentazioni medianti basi diverse Codifica binaria Rappresentazione di numeri Notazione di tipo posizionale (come la notazione decimale). Ogni numero è rappresentato da una sequenza di simboli Il valore del numero dipende non solo dalla

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi Capitolo 6 - Alberi binari di ricerca Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 9 Agosto, 204 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile

Dettagli

LISTE, INSIEMI, ALBERI E RICORSIONE

LISTE, INSIEMI, ALBERI E RICORSIONE LISTE, INSIEMI, ALBERI E RICORSIONE Settimo Laboratorio LISTE E RICORSIONE SVUOTALISTA: CONSIDERAZIONI Per svuotare una lista si devono eliminare i singoli nodi allocati con la malloc... Come fare? Per

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande/ VERSIONE 1 1) L approccio con cui si studia un sistema focalizzandosi solo sul rapporto tra input e output si chiama

Dettagli

Strutture dati dinamiche in C (III)

Strutture dati dinamiche in C (III) Strutture dati dinamiche in C (III) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Alcune utilities per la gestione di stringhe Gli alberi

Dettagli

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale Giuseppe Loseto Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale Struttura DBMS Gestore delle interrogazioni Decide le strategie di accesso ai dati per rispondere alle interrogazioni Gestore

Dettagli

Algoritmi e Principi dell Informatica

Algoritmi e Principi dell Informatica Algoritmi e Principi dell Informatica Appello del 20 Febbraio 2012 Chi deve sostenere l esame integrato (API) deve svolgere tutti gli esercizi in 2h e 30 Chi deve sostenere solo il modulo di Informatica

Dettagli

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare

Dettagli

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi Codifica dei Numeri Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi giacomo.boracchi@polimi.it Rappresentazione dei Numeri Codifica dei Numeri in Base 10 Le cifre che abbiamo a disposizione sono

Dettagli

Strutture di Controllo

Strutture di Controllo Introduzione Strutture di Controllo per strutture condizionali e cicliche Quando si affronta la programmazione si devono indicare al computer delle istruzioni da eseguire. Se il computer potesse comprendere

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L

Dettagli

T 1 =1. n 6 n. T n =3 T. Esercizio 1 (6 punti)

T 1 =1. n 6 n. T n =3 T. Esercizio 1 (6 punti) A.A. 7 8 Esame di Algoritmi e strutture dati 9 luglio 8 Esercizio (6 punti) Risolvere con almeno due metodi diversi la seguente relazione di ricorrenza T = T n =3 T n 6 n A.A. 7 8 Esame di Algoritmi e

Dettagli

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA 28 Gennaio 1999 PROVA SCRITTA Esercizio 1 Un elaboratore rappresenta numeri interi in complemento a due su 8 bit e numeri reali in utilizzando un byte per la mantissa normalizzata e un byte per l esponente

Dettagli

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari Lezione 4 L artimetica binaria: I numeri relativi e frazionari Sommario I numeri relativi I numeri frazionari I numeri in virgola fissa I numeri in virgola mobile 1 Cosa sono inumeri relativi? I numeri

Dettagli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Rappresentazione dei numeri naturali (N) Rappresentazione dei numeri interi (Z) Modulo e segno In complemento a 2 Operazioni aritmetiche

Dettagli

Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI

Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI Esercizio 1 Si consideri la seguente classe che specifica liste di interi: public class List { private int head; private List tail; public

Dettagli

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio Appunti di informatica Lezione 3 anno accademico 2015-2016 Mario Verdicchio Numeri binari in memoria In un calcolatore, i numeri binari sono tipicamente memorizzati in sequenze di caselle (note anche come

Dettagli

Lezione 3. I numeri relativi

Lezione 3. I numeri relativi Lezione 3 L artimetcia binaria: i numeri relativi i numeri frazionari I numeri relativi Si possono rappresentare i numeri negativi in due modi con modulo e segno in complemento a 2 1 Modulo e segno Si

Dettagli

I.4 Rappresentazione dell informazione

I.4 Rappresentazione dell informazione I.4 Rappresentazione dell informazione Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Ottobre 13, 2015 Argomenti Introduzione 1 Introduzione 2 3 L elaboratore Introduzione

Dettagli

Il C nel C++: Funzioni

Il C nel C++: Funzioni Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma

Dettagli

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio Appunti di informatica Lezione 10 anno accademico 2016-2017 Mario Verdicchio Esercizio Scrivere un programma che, data una sequenza di 10 interi (scelta dall utente), la ordini in ordine crescente Soluzione

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie

Dettagli

CONVERSIONE BINARIO DECIMALE NB: Convertire in decimale il numero binario N = N =

CONVERSIONE BINARIO DECIMALE NB: Convertire in decimale il numero binario N = N = NOTAZIONE BINARIA, OTTALE, ESADECIMALE CODIFICA DI NUMERI INTERI RELATIVI 1 CONVERSIONE BINARIO DECIMALE Convertire in decimale il numero binario N = 101011.1011 2 N = 1 2 5 + 0 2 4 + 1 2 3 + 0 2 2 + 1

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Passaggio dei parametri per valore/riferimento 2. Trattamento degli errori: funzioni che restituiscono anche codici di errore

Dettagli

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998 21 Gennaio 1998 PROVA PRATICA Si scriva un programma C (BASIC per gli studenti di Elementi di Informatica) che: a) Legga da terminale una sequenza di caratteri terminati dal carattere '*' (un carattere

Dettagli

Aritmetica dei Calcolatori

Aritmetica dei Calcolatori Aritmetica dei Calcolatori Luca Abeni March 5, 2014 Codifica dei Numeri Interi k bit codificano 2 k simboli/valori/numeri... Si usa la base 2 per codificare i numeri Numeri naturali n N: valori da 0 a

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica (IN0 Fondamenti) Grafi e alberi: introduzione Marco Liverani (liverani@mat.uniroma.it)

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

Implementazione di Liste puntate

Implementazione di Liste puntate Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente

Dettagli

Istruzioni iterative (o cicliche)

Istruzioni iterative (o cicliche) Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Istruzioni iterative (o cicliche) Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria

Dettagli

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 5 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Dettagli

Aritmetica dei Calcolatori 3

Aritmetica dei Calcolatori 3 Laboratorio di Architettura 31 maggio 2013 1 Numeri Floating Point 2 Standard IEEE754 3 Esercitazione Numeri Floating Point (FP) Il termine Floating Point (virgola mobile) indica la codifica usata per

Dettagli

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità

Dettagli

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem Un esempio: l ADT Dizionario (mutabile) Algoritmi e Laboratorio a.a. 2006-07 Lezioni Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Parte 19-D Alberi

Dettagli

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME 13 novembre 2006 RIGA COLONNA MATRICOLA Il presente plico pinzato, composto di sei fogli, deve

Dettagli

I B+ Alberi. Sommario

I B+ Alberi. Sommario I B+ Alberi R. Basili (Basi di Dati, a.a. 2002-3) Sommario Indici organizzati secondo B + -alberi Motivazioni ed Esempio Definizione Ricerca in un B + -albero Esempio Vantaggi Inserimento/Cancellazione

Dettagli

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale Numeri frazionari sistema posizionale due modi: virgola fissa virgola mobile posizionale, decimale 0,341=tre decimi più quattro centesimi più un millesimo cifre dopo la virgola: decimi centesimi millesimi

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

Introduzione e Nozioni di Base. Prof. Thomas Casali

Introduzione e Nozioni di Base. Prof. Thomas Casali Università degli studi di Bologna Facoltà di Economia Sede di Forlì Introduzione e Nozioni di Base Corso di Laurea in Economia di Internet Prof. Thomas Casali thomas@casali.biz La rappresentazione digitale

Dettagli

I sistemi di numerazione. Informatica - Classe 3ª, Modulo 1

I sistemi di numerazione. Informatica - Classe 3ª, Modulo 1 I sistemi di numerazione Informatica - Classe 3ª, Modulo 1 1 La rappresentazione interna delle informazioni ELABORATORE = macchina binaria Informazione esterna Sequenza di bit Spett. Ditta Rossi Via Roma

Dettagli

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni Algoritmi e Strutture Dati Tracce 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni int freq(list &L, int k): restituisce il numero di occorrenze dei multipli

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014 Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014 Nome..Cognome.Matr. Laureando Avvisi importanti Il tempo a disposizione è di 1 ora e 30 minuti. Se non verranno risolti

Dettagli

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: Esercizi su Python 14 maggio 2012 1. Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: 1. conti quanti elementi pari sono presenti nella lista; 2. conti quanti quadrati

Dettagli

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome Compito 1 Segnare una sola delle risposte indicate; una risposta errata ha un punteggio = 0; una risposta mancante ha un punteggio = 0; più di 1 risposta (incluso modifica della risposta segnata): annullata

Dettagli

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza

Dettagli

Informazione e sua rappresentazione: codifica

Informazione e sua rappresentazione: codifica Corso di Calcolatori Elettronici I A.A. 2011-2012 Informazione e sua rappresentazione: codifica Lezione 2 Prof. Antonio Pescapè Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso

Dettagli

La principale modalità di calcolo è l applicazione di funzioni

La principale modalità di calcolo è l applicazione di funzioni 1 La principale modalità di calcolo è l applicazione di funzioni Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat Un

Dettagli

Grafi: visita generica

Grafi: visita generica .. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Grafo Un grafo G è una coppia (V, E) ove V è un

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

La codifica binaria. Informatica B. Daniele Loiacono

La codifica binaria. Informatica B. Daniele Loiacono La codifica binaria Informatica B Introduzione Il calcolatore usa internamente una codifica binaria (0 e 1) per rappresentare: i dati da elaborare (numeri, testi, immagini, suoni, ) le istruzioni dei programmi

Dettagli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

Dettagli

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene

Dettagli

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016 ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016 Classe: 4^A inf Prof.ssa Lami Carla Prof. Simone Calugi Programma di INFORMATICA GENERALE, APPLICAZIONI

Dettagli

Rappresentazione di liste mediante puntatori in linguaggio C

Rappresentazione di liste mediante puntatori in linguaggio C Rappresentazione di liste mediante puntatori in linguaggio C Specifica del tipo degli elementi typedef... TipoElemLista; struct StructLista TipoElemLista key; struct StructLista *next; ; typedef struct

Dettagli

La codifica. dell informazione

La codifica. dell informazione La codifica dell informazione (continua) Codifica dei numeri Il codice ASCII consente di codificare le cifre decimali da 0 a 9 fornendo in questo modo un metodo per la rappresentazione dei numeri Il numero

Dettagli

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene

Dettagli

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati

Dettagli

Aritmetica dei Calcolatori Elettronici

Aritmetica dei Calcolatori Elettronici Aritmetica dei Calcolatori Elettronici Prof. Orazio Mirabella L informazione Analogica Segnale analogico: variabile continua assume un numero infinito di valori entro l intervallo di variazione intervallo

Dettagli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 I numeri reali Sommario Conversione dei numeri reali da base 10 a base B Rappresentazione dei numeri reali Virgola fissa Virgola mobile (mantissa

Dettagli

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due Conversione di base Dato N>0 intero convertirlo in base b dividiamo N per b, otteniamo un quoto Q 0 ed un resto R 0 dividiamo Q 0 per b, otteniamo un quoto Q 1 ed un resto R 1 ripetiamo finché Q n < b

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli