• Non ci sono risultati.

Prova scritta del 22 gennaio 2018 di Fondamenti di Informatica II (prof. Di Gaspero)

N/A
N/A
Protected

Academic year: 2021

Condividi "Prova scritta del 22 gennaio 2018 di Fondamenti di Informatica II (prof. Di Gaspero)"

Copied!
1
0
0

Testo completo

(1)

Prova scritta del 22 gennaio 2018 di Fondamenti di Informatica II (prof. Di Gaspero) Per studenti di Ing. Gestionale immatricolati negli anni accademici 2016-17 e precedenti DURATA DELLA PROVA: 2 ORE

A pena di annullamento immediato della prova:

1) Non è possibile consultare libri o appunti (in qualunque forma) né utilizzare calcolatrici, telefoni cellulari, ecc.

2) Non è consentito comunicare (con qualunque mezzo) 3) Non è consentito uscire dall’aula

Esercizio 1 (6 punti)

Dato la coda di priorità q implementata come heap tree rappresentata implicitamente nel vettore riportato a lato.

1. disegnare la sua rappresentazione schematica in forma di albero binario;

2. simulare l’operazione dequeue(q) illustrandone i diversi passaggi.

Esercizio 2 (12 punti)

Si consideri un nuovo tipo di dato astratto lista_multipla che consiste di un vettore (creato dinamicamente, ma di dimensione fissa) di liste di valori di tipo int. Il peso di ciascuna delle liste che costituiscono una lista multipla è dato dalla somma dei suoi valori. Si veda l’esempio a fianco di una lista multipla che consiste di 4 liste e in cui il peso della prima lista è 4, quello della seconda 4, della terza 0 e della quarta 6.

Le operazioni possibili sulle liste multiple sono le seguenti:

• lista_multipla crea_lista_multipla(int m): crea un vettore di m liste inizialmente vuote e imposta eventuali altre informazioni nel descrittore;

• inserisci_lista_multipla(lista_multipla *lm, int d): inserisce il dato d nella lista, facente parte della lista multipla lm, avente peso minore;

• rimuovi_lista_multipla(lista_multipla *lm, int d): rimuove tutte le occorrenze del dato d dalle liste facenti parte della lista multipla lm;

• elimina_lista_multipla(lista_multipla *lm): elimina la lista multipla deallocando tutti i dati allocati dinamicamente.

1. Si definisca un possibile descrittore per il tipo di dato lista multipla (in altre parole la struct _lista_multipla).

2. Si implementino in linguaggio C le operazioni di manipolazione delle liste multiple descritte in precedenza. Qualora fosse necessario si assuma l’esistenza di funzioni di manipolazione delle liste adattate allo specifico tipo di

informazione memorizzata nelle singole liste (ad es. aggiungi_in_testa(lista* l, int dato), nodo_lista*

trova_dato(nodo_lista *t, int dato)). In tal caso, si scrivano le dichiarazioni delle funzioni utilizzate.

3. Si discuta, informalmente, la complessità temporale dell’implementazione delle operazioni di manipolazione espressa in funzione di n, numero totale di elementi memorizzati in tutte le liste, e di m, numero totale di liste.

Esercizio 3 (12 punti)

Analogamente alla rappresentazione implicita di uno heap tree, è possibile rappresentare anche un albero binario di ricerca (ABR) attraverso un opportuno array. La differenza principale è costituita dal fatto che nel caso un ABR non è necessariamente completo a sinistra, per cui alcune delle celle dell’array potrebbero riferirsi a dei nodi non presenti nell’albero (si veda

l’esempio nella figura seguente).

1. Si proponga un possibile descrittore albero_binario_in_array per memorizzare le informazioni necessarie a questo tipo di rappresentazione.

2. Si simuli l’operazione di inserimento dei valori chiave = 32, dato = 0.5 nell’albero e nella sua rappresentazione in array (suggerimento: che operazione è necessaria sull’array nel caso di introduzione di un nuovo livello?);

3. Si discuta, informalmente, la complessità spaziale necessaria per la memorizzazione di un ABR costituito da k livelli utilizzando questa rappresentazione.

4. Si implementi in pseudocodice o in linguaggio C la funzione

inserisci_albero_binario_in_array(albero_binario_in_array* a, int chiave, float dato). Qualora fosse necessario si assuma l’esistenza di funzioni di manipolazione delle strutture dati utilizzate adattate allo specifico tipo di

informazione memorizzata. In tal caso, si scrivano le dichiarazioni delle funzioni utilizzate.

Riferimenti

Documenti correlati

nella prima riga del foglio si deve scrivere il proprio nome, cognome e numero di matricola;. il quiz verra' comunicato via Zoom mediante la condivisione del desktop del docente,

Si considerino dei file bitmap organizzati come segue: la prima riga contiene, nell’ordine, i due numeri interi N e M che rappresentano il numero di righe e il numero di colonne

Vogliamo definire un tipo di dato astratto intervallo che rappresenti, in modo compatto, un singolo intervallo o un’unione di sotto-intervalli in modo da consentire

Si scriva un programma in linguaggio C che riceva sulla riga di comando i nomi di due file come sopra descritto (il primo il file che riporta lo stato attuale dei distributori,

Un secondo file contiene l’elenco dei prodotti venduti dal gestore e, per ciascuno, il numero di esemplari di cui ogni distributore che abbia in vendita tale

Si veda l’esempio a fianco di una lista multipla che consiste di 4 liste e in cui il peso della prima lista è 4, quello della seconda 4, della terza 0 e della quarta 6.. Le

Si scriva un programma in linguaggio C che riceva sulla riga di comando i nomi di due file come sopra descritto (il primo il file che riporta lo stato attuale dei distributori,

Un secondo file contiene l’elenco dei prodotti venduti dal gestore e, per ciascuno, il numero di esemplari di cui ogni distributore che abbia in vendita tale