Laboratorio di Informatica

Documenti analoghi
Laboratorio di Informatica

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Programmazione modulare

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

Corso di Fondamenti di Informatica (M-Z) Prof. Aldo Franco Dragoni. Prova Scritta 19 aprile 2007

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Gestione di files Motivazioni

CORSO DI PROGRAMMAZIONE

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

PILE E CODE. Pile (stack):

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Programmazione Procedurale in Linguaggio C++

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Funzioni, Stack e Visibilità delle Variabili in C

Esercizi su strutture dati

La struttura dati CODA

Esercitazione 11. Liste semplici

Ricerca binaria (o dicotomica) di un elemento in un vettore

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Il paradigma OO e le Classi

Informatica! Appunti dal laboratorio 1!

Contenitori: Pile e Code

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

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

Ricerca sequenziale di un elemento in un vettore

Strutture Dinamiche. Fondamenti di Informatica

Implementazione dell albero binario in linguaggio C++

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

Cesare Rota. Programmare con C++

Linguaggio C. Esercizio 1

INFORMATICA - I puntatori Roberta Gerboni

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Grammatica di base: Pointers

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Algoritmi e Strutture Dati

Esercizi Strutture dati di tipo astratto

}; struct super{ int id_magazzino; string denominazione; string indirizzo; string citta; int superficie; struct prodotto Prodotti[MAX_PRODOTTI];

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

La programmazione ad oggetti (OOP)

Corso Programmazione 1 Capitolo 01: Concetti Elementari

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

Laboratorio di Algoritmi e Strutture Dati

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Gestione di stringhe. Le stringhe in C/C++

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Transcript:

Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna identificata con un nome l insieme dei campi è denominato record sintassi struct nome_struttura { tipo1 nome_variabile1;... tipon nome_variabilen; La struttura definisce un nuovo tipo di dato Corso di Laurea in Ingegneria Elettronica e Telecomunicazioni A.A. 2013-2014 2 Semestre Prof. Giovanni Pascoschi 2 Strutture di dati Strutture di dati Dopo aver definito una variabile struttura, si accede ai singoli campi mediante la notazione. (punto) i campi di una struttura possono essere usati come qualunque variabile dello stesso tipo esempio: cd.prezzo=10; cout<<cd.titolo; cd.copie++; Una volta definito un tipo dati struttura, essa si comporta come un qualsiasi altro tipo di dati. Si puo ad esempio: assegnare una variabile struttura ad un altra far si che una funzione restituisca una struttura alla funzione chiamante passare strutture sia per valore che per referenza (riferimento) 3 4

Esempi strutture di dati Tabelle di dati La tabella di dati è un array di strutture daticd cd1 = { Toccata e fuga, Bach, 30, sinfonia ; daticd cd2 = cd1; //uguaglianza tra strutture void stampa_cd(daticd x) { // passaggio per valore cout<< x.autore<<x.titolo<<x.prezzo<<x.genere<<endl; struct giorno { int gg; int mm; int aa; ; void prezzo_scontato(daticd& x) { x.prezzo=x.prezzo * 80/100; // passaggio per referenza struct daticd { string titolo; string autore; float prezzo; string genere; struct giorno giorno_vendita; ; struct daticd CD[100]; // tabella costituita da 100 CD 5 6 Istruzione typedef Accesso agli elementi di una Tabella per poter descrivere in maniera piu concisa un tipo struttura si puo usare la parola chiave typedef struct giorno { int gg; int mm; int aa; ; struct daticd { string titolo; string autore; float prezzo; string genere; struct giorno vendita; ; typedef struct daticd cddata; //non definisce un nuovo tipo, ma un sinonimo!!!! cddata CD[100]; // tabella costituita da 100 CD 7 L indice di una tabella puo essere una espressione costante intera o comunque una qualsiasi espressione intera Esempio di caricamento di una tabella: for (int i=0; i< 500; i++) { cin >> CD[i].titolo>> CD[i].autore >> CD[i].prezzo>> CD[i].genere; cin >> CD[i].vendita.gg >> CD[i].vendita.mm >> CD[i].vendita.aa ; 8

Array di oggetti Strutture dati complesse #include<iostream> using namespace std; class Persona { public: int id_persona; int anno_nasc; Persona() { id_persona = 0; anno_nasc = 0; Persona(int id_pers, int anno) { id-persona = id-pers; anno_nasc = anno; void stampa() { cout <<id-persona << " " << anno_nasc << "\n"; ; int main() { const int dim = 10; Persona a[dim]; // richiede il costruttore di default for (int i = 0; i < dim; i++) { a[i].id_persona = i; cin>>a[i].anno_nasc; for (int i = 0; i < dim; i++) { a[i].stampa(); system("pause"); Esempi di strutture dati complesse in C++: Pila (Stack) Coda (queue) Liste semplici (semplicemente linkate) (in seguito) Liste doppie (doppiamente linkate) (in seguito) 9 10 Pila (Stack) con array Pila (Stack) con array la Pila (Stack) è un insieme di dati che permette l inserimento di nuovi elementi e l estrazione degli elementi introdotti da un unica estremità il funzionamento della pila viene denominato LIFO (Last Input First Output) meccanismo utilizzato per gestire le chiamate alle funzioni (insieme degli indirizzi di rientro) oppure nel registro di stack (linguaggio assembly) operazione di inserimento di un dato push operazione di estrazione di un dato pop L implementazione di una pila puo essere fatta tramite un array (dimensione fissa) push A[0] A[1] A[2] pop testa = 0... A[MAX-1] testa = MAX 11 12

Esempio Pila Esempio Pila #include <iostream> using namespace std; const int MAX = 20; int Pila[MAX]; int testa; void clearpila( ); void pop( ); void push( ); void readpila( ); void menu( ); int main( ) { int scelta; clearpila( ); menu( ); cout<< Seleziona una voce ; cin>>scelta; while(scelta <1 scelta >5); switch(scelta) { case 1: clearpila( ); case 2: pop( ); case 3: push( ); case 4: readpila( ); while(scelta!=5); return 0; void pop( ) { if( testa == MAX) cout<< La pila e vuota. Impossibile estrarre un dato << endl; cout << Elemento estratto = << Pila[testa] << endl; testa++; void push( ) { int dato; if (testa == 0) cout<< La pila è piena. Impossibile inserire altri dati << endl; cout << dato da inserire = ; cin>> dato; testa- -; Pila[testa] = dato; 13 14 Esempio Pila Coda (Queue) con array void clearpila( ) { testa = MAX; cout<< Pila vuota << endl; void readpila( ) { for(int i=testa; i< MAX; i++) { cout<< Pila[i] << endl; la Coda (Queue) è un insieme di dati che permette l inserimento di nuovi elementi da una parte e l estrazione degli elementi introdotti dalla parte opposta il funzionamento della coda viene denominato FIFO (First Input First Output) operazione di inserimento di un dato push void menu( ) { cout << endl; cout << 1. Pulisci pila << endl; cout << 2. Estrai un dato << endl; cout << 3. Aggiungi un dato << endl; cout << 4. Leggi pila << endl; cout << 5. Fine << endl; operazione di estrazione di un dato pop 15 16

Coda (Queue) con array Esempio Coda L implementazione di una coda puo essere fatta tramite un array (dimensione fissa) pop A[0] A[1] A[MAX-1]... push #include <iostream> using namespace std; const int MAX = 20; int Coda[MAX]; int fine; void clearcoda( ); void pop( ); void push( ); void readcoda( ); void menu( ); menu( ); cout<< Seleziona una voce ; cin>>scelta; while(scelta <1 scelta >5); switch(scelta) { case 1: clearcoda( ); case 2: pop( ); fine = -1 fine = MAX-1 int main( ) { int scelta; clearcoda( ); case 3: case 4: push( ); readcoda( ); while(scelta!=5); return 0; 17 18 Esempio Coda Esempio Coda void pop( ) { if( fine ==-1) cout<< La coda e vuota. Impossibile estrarre un dato << endl; cout << Elemento estratto = << Coda[0] << endl; for(int i=1; i<= fine; i++) Coda[i-1] = Coda[i]; fine- -; void clearcoda( ) { fine = -1; cout<< Coda vuota << endl; void readcoda( ) { for(int i=0; i<= fine; i++) { cout<< Coda[i] << endl; void push( ) { int dato; if (fine == MAX-1) cout<< La coda è piena. Impossibile inserire altri dati << endl; cout << dato da inserire = ; cin>> dato; fine++; Coda[fine] = dato; void menu( ) { cout << endl; cout << 1. Pulisci coda << endl; cout << 2. Estrai un dato << endl; cout << 3. Aggiungi un dato << endl; cout << 4. Leggi coda << endl; cout << 5. Fine << endl; 19 20

Riepilogo della lezione Fine della lezione Funzioni in C++ Strutture di dati Tabelle di dati Array di oggetti Pila/Coda con array Domande? 21 22