Implementazione dell albero binario in linguaggio C++

Documenti analoghi
La struttura dati ad albero binario

Heap e code di priorità

Alberi binari di ricerca

ADT Coda con priorità

3. Terza esercitazione autoguidata: progetto gestione voli

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Gestione di files Motivazioni

Algoritmi e Strutture Dati. HeapSort

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Informatica d ufficio

VISUAL BASIC FOR APPLICATION

4 GLI ARRAY E LE STRINGHE

EXCEL: FORMATTAZIONE E FORMULE

Corso di Fondamenti di Informatica Classi di istruzioni 2

Oggetto: Utility per la variazione massiva del codice IVA.

Esame Informatica Generale 13/04/2016 Tema A

Definizione di metodi

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Programmazione Orientata agli Oggetti

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Funzioni condizionali

float somma_float(float a, float b) int get_ascii(char c)

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Strutture di accesso ai dati: B + -tree

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

Input/output in C e in C++

Ministero della Salute

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Files in C++ Fondamenti di Informatica. R. Basili. a.a

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Problema: calcolare il massimo tra K numeri

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Calcolo della Codeline Mod. F24

Grafici e Pagina web

Note_Batch_Application 04/02/2011

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

La disposizione estetica della lettera commerciale

Strutture dati dinamiche in C (III)

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

FILE E INDICI Architettura DBMS

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Alberi di ricerca binari

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Procedura operativa per la gestione della funzione di formazione classi prime

I grafici a torta. Laboratorio con EXCEL. 1 Come si costruisce un grafico a torta

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

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

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Esercizio 1: archivio CD e DVD

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

I Grafi ad Albero..Strumenti per aiutare a ragionare

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Esercitazione 4. Comandi iterativi for, while, do-while

Valutazione del personale

Traduzione e adattamento a cura di Gylas per Giochi Rari. Versione 1.1 Novembre

B2B. Manuale per l utilizzatore.

Indice. Ricerca richiesta d offerta. Risultati della ricerca Navigazione Stati

Informatica 3 secondo recupero 13 Settembre 2002

Programmazione Orientata agli Oggetti in Linguaggio Java

La segreteria didattica dovrà eseguire semplici operazioni per effettuare lo scrutinio:

COMPILAZIONE DELLA DOMANDA ON LINE

Importazione dati. e/fiscali Spesometro - Rel con gestionale e/satto. Gestionale e/satto

Fondamenti di Informatica

Fondamenti VBA. Che cos è VBA

WINDOWS Avviare Windows95. Avviare Windows95 non è un problema: parte. automaticamente all accensione del computer. 2. Barra delle applicazioni

AGGIORNAMENTO SOFTWARE

Aggiorna. La Funzione Aggiorna Listino Aggiornare Listino Pr7 / Le connessioni / Listino METEL. Aggiorna Lis no. Aggiornamento del listino

Uso di metodi statici. Walter Didimo

Come usare la piattaforma StartUp

LA MEMORIA NEL CALCOLATORE

MANUALE UTENTE. Sistemi Informativi CONSOB. DIF Dati Informativi Finanziari. Manuale Utente. Data : 03/05/2011 Versione : 1.4

M n a u n a u l a e l e o p o e p r e a r t a i t v i o v o Ver /12/2014

WINDOWS TERMINAL SERVER PER L ACCESSO REMOTO AL SISTEMA DI PROTOCOLLO INFORMATICO

Sottoprogrammi: astrazione procedurale

Array multidimensionali e stringhe

Mini-Corso di Informatica

REGISTRAZIONE E ACCESSO AL NETWORK ATTRAVERSO IL SISTEMA DI AUTENTICAZIONE DFP AUTH, GESTIONE DEL PROFILO PERSONALE

alberi binari e ricorsione

Guida a SacramentiWeb 1.2

Quick Print. Quick Print. Guida Utente. Copyright 2013 Hyperbolic Software.

Manuale utente Soggetto Promotore Erogatore Politiche Attive

GESTIONE BOLLE/DDT FORNITORI. Consente l inserimento, la modifica o l eliminazione di un D.d.t. fornitore.

DOCUMENTAZIONE WEB RAIN - ACCESSO CLIENTI

Il generatore di numeri casuali

Linguaggio C: introduzione

Architettura dei computer

Istruzioni per gli Imprenditori Agricoli

Corso di Fondamenti di Informatica

Compilazione on-line del Piano di Studio

Manuale d utilizzo. Indice:

Video Scrittura (MS Word) Lezione 2 Tabelle e Immagini

MANUALE UTENTE PROCEDURA PLANET WEB INTERPRISE (II edizione)

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Gruppo di lavoro h Scuola secondaria di primo grado S.G. Bosco Fara Gera d Adda

Transcript:

Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve consentire di creare l albero, aggiungendo nuovi nodi e di visualizzare i dati contenuti nella struttura in ordine di descrizione. I nodi dell albero contengono una parte con le informazioni (campo info) e i puntatori al sottoalbero sinistro e destro. Le informazioni sono strutture definite dal programmatore, costituite da un campo codice e da un campo descrizione. Pertanto la dichiarazione delle strutture in linguaggio C++ è la seguente: // struttura della parte informativa struct Dati int codice; string descrizione; ; // struttura per i nodi dell albero struct Nodo Dati info; Nodo* sx; Nodo* dx; ; Nodo* radice; // puntatore alla radice Il programma usa anche un enumerazione per rappresentare il risultati del confronto con gli altri elementi dell albero quando si inserisce un nuovo nodo. Questo può servire a rendere il codice più leggibile e autodocumentato. enum Confronti Precede=1, Segue, Uguali; Le funzioni per la gestione dell albero binario si possono classificare in quattro categorie: 1. funzioni che svolgono compiti di utilità; 2. funzioni che realizzano operazioni sui dati; 3. funzioni che realizzano operazioni sulla struttura; 4. funzioni che interfacciano il programma. Le funzioni di tipo 1 non intervengono sui dati ma servono a compiti generici. Non devono chiamare funzioni degli altri tipi. Le funzioni di tipo 2 conoscono la struttura dei singoli dati e permettono di stampare, leggere e modificare il contenuto della parte di nodo che contiene le informazioni (il campo info). Possono chiamare solo funzioni di tipo 1. Le funzioni di tipo 3 conoscono i dettagli della struttura ad albero impiegata, e permettono di aggiungere i nodi. Non devono invece accedere direttamente alla parte informativa dei nodi, ma solo usando le funzioni di tipo 2. Questa suddivisione permette di individuare con esattezza i punti da modificare qualora si debba cambiare la struttura delle informazioni o la struttura di supporto (l albero). Se si volesse per esempio aggiungere un campo informativo si dovrebbero solo modificare le funzioni di tipo 1, mentre se si volesse usare una struttura ad albero realizzata in modo differente si dovrebbe intervenire solo sulle funzioni di tipo 2. Infine, le funzioni di tipo 4 vengono chiamate dal programma principale e contengono le chiamate alle funzioni di tipo 1 e 2 che realizzano le funzionalità richieste. 1 Istituto Italiano Edizioni Atlas

Esaminiamo ora in dettaglio le diverse funzioni secondo la classificazione proposta. Funzioni di tipo 1: non devono contenere riferimenti ai dati o alla struttura, né a funzioni di altro tipo. La funzione Operazione scrive la descrizione dell operazione che si vuole eseguire. È una funzione comoda per dare all applicazione un aspetto omogeneo in tutte le circostanze senza dover riscrivere codice simile in tutte le funzioni. void Operazione(string testata) cout << endl << testata << endl; Funzioni di tipo 2: possono fare riferimento alla struttura interna dei dati, ma non alla struttura usata per ospitarli (albero). La funzione StampaDato viene richiamata nelle operazioni di stampa. void StampaDato(Dati d) cout << d.codice << ": " << d.descrizione << endl; La funzione ConfrontaDati stabilisce il criterio di ordinamento seguito entro la struttura. Confronti ConfrontaDati(Dati dato1, Dati dato2) Confronti c; if (dato1.descrizione == dato2.descrizione) c = Uguali; else if (dato1.descrizione < dato2.descrizione) c = Precede; else c = Segue; return c; La funzione LeggiDato acquisisce da tastiera un codice e una descrizione e restituisce un valore per il controllo di fine inserimento. int LeggiDato(Dati& d) int cod; cout << "Codice (0=fine): "; cin >> cod; if (cod!= 0) d.codice = cod; cout << "Descrizione: "; cin >> d.descrizione; return cod; 2 Istituto Italiano Edizioni Atlas

Funzioni di tipo 3: possono fare riferimento alla struttura dell albero e non alla struttura interna dei dati. La funzione Inizializza assegna il valore NULL al puntatore radice. void Inizializza() radice = NULL; La funzione GeneraNodo viene richiamata dalla funzione di creazione dell albero e consente l inserimento dei nodi. Nodo* GeneraNodo() Nodo* p = NULL; Dati d; int fine; fine = LeggiDato(d); while (fine!= 0) p = TrovaNodo(d, p); fine = LeggiDato(d); return p; La funzione TrovaNodo, richiamata dalla funzione GeneraNodo, è la funzione più importante del programma. Esegue tutti i movimenti sulla struttura e restituisce un puntatore al nodo che contiene il dato ricevuto nel primo parametro. La ricerca inizia dal nodo puntato dal puntatore p passato come secondo parametro ed è ricorsiva. Nodo* TrovaNodo(Dati dato, Nodo* p) if (p == NULL) p = new Nodo; p->info = dato; p->sx = NULL; p->dx = NULL; else // p diverso da NULL switch (ConfrontaDati(dato, p->info)) case Precede: p->sx = TrovaNodo(dato, p->sx); case Segue: p->dx = TrovaNodo(dato, p->dx); case Uguali: cout << dato duplicato, non inserito << endl; return p; 3 Istituto Italiano Edizioni Atlas

L operazione di stampa è ricorsiva e alla prima chiamata deve ricevere il puntatore radice. Essa realizza l attraversamento dell albero in ordine simmetrico (prima il sottoalbero di sinistra, poi la radice e infine il sottoalbero di destra). void StampaRicorsiva(Nodo* p) if (p!= NULL) StampaRicorsiva(p->sx); StampaDato(p->info); StampaRicorsiva(p->dx); Funzioni di tipo 4: non possono fare riferimento né alla struttura ad albero né alla struttura interna dei dati. Possono però usare le funzioni degli altri tipi. Queste sono le funzioni che attivano le operazioni implementate per la gestione dell albero binario: inserimento e stampa. void CreaAlbero() Operazione("Inserimento dei dati"); radice = GeneraNodo(); void StampaAlbero() Operazione("Stampa lista odinata"); StampaRicorsiva(radice); cout << endl; int PresentaMenu() int s; do cout << "1. Creazione di un albero" << endl; cout << "2. Stampa ordinata" << endl; cout << "3. Fine lavoro" << endl; cout << "Inserisci la tua scelta "; cin >> s; while (s<1 s>3); return s; 4 Istituto Italiano Edizioni Atlas

Le seguenti righe di codice riassumono i prototipi delle funzioni utilizzate nel programma: // prototipi delle funzioni void Inizializza(); void Operazione(string testata); Nodo* GeneraNodo(); Nodo* TrovaNodo(Dati dato, Nodo* p); Confronti ConfrontaDati(Dati dato1, Dati dato2); void CreaAlbero(); int LeggiDato(Dati& d); void StampaDato(Dati d); void StampaRicorsiva(Nodo* p); void StampaAlbero(); int PresentaMenu(); La funzione main del programma contiene infine il menu di scelte per l utente, che corrispondono alla chiamata delle funzioni viste precedentemente. // funzione principale int main() int scelta; Inizializza(); do scelta = PresentaMenu(); switch(scelta) case 1: CreaAlbero(); case 2: StampaAlbero(); while (scelta!= 3); // scelta dell utente // inserimento di nuovi dati // stampa ordinata del contenuto // dell albero return 0; Il programma presentato mantiene l albero in ordine alfabetico di descrizione. Per costruire l albero ordinato secondo il campo codice dei nodi, occorre semplicemente modificare la funzione ConfrontaDati, controllando l ordine dei codici. 5 Istituto Italiano Edizioni Atlas