La Standard Template Library Heap, algoritmi e funtori
|
|
- Emma Brunelli
- 4 anni fa
- Visualizzazioni
Transcript
1 La Standard Template Library Heap, algoritmi e funtori Pericle Perazzo 27 maggio 2011
2 Riassunto contenitori e iteratori Un contenitore è un oggetto che contiene un insieme di altri oggetti di tipo omogeneo (=gli elementi del contenitore). Un iteratore è un oggetto che punta ad un elemento di un contenitore. 1
3 vector<int> Riassunto contenitori e iteratori set<int> deque<int> map<string, int> list<int> 2
4 Riassunto contenitori e iteratori Gli iteratori possono essere usati per visitare o fare operazioni più complesse sui contenitori. list <int > l; /... / list <int >:: iterator i; for (i = l. begin (); i!= l. end (); i ++) cout << *i << ; 3
5 Riassunto contenitori e iteratori Mobilità degli iteratori: Forward iterators: possono muoversi in avanti (++) Bidirectional iterators: possono muoversi avanti e indietro (++, --) list<>, set<>, map<> Random access iterators: possono fare salti e calcolare distanze (++, --, +=, -=, a-b) vector<>, deque<>, 4
6 Vincoli sulla genericità Un set<t> è un albero binario di ricerca di elementi di tipo T. Posso definire un set<t> per qualsiasi tipo T? No. Il tipo T deve essere ordinabile. Deve essere definito l operatore < tra due operandi di tipo T (vincolo sulla genericità di T). Per esempio, non può essere definito un set<> di numeri complessi. 5
7 Heap in C++ 6
8 priority queue<t> priority queue<t> realizza uno heap di oggetti di tipo T. Vincolo: T deve essere ordinabile ( operatore <). #include<queue> Usa la rappresentazione linearizzata e si appoggia ad un vector<t> per la memorizzazione. 7
9 priority queue<t> priority_queue::priority_queue() costruttore di default O(1) priority_queue::priority_queue(iter first, Iter last) costruttore che copia dalla sequenza [first, last) e costruisce lo heap O(n) int priority_queue::size() const O(1) bool priority_queue::empty() const O(1) const T& priority_queue::top() const O(1) void priority_queue::push(const T&) O(log n) void priority_queue::pop() elimina l elemento di cima O(log n) Non ci sono iteratori. 8
10 priority queue<t>: int main (){ priority_queue < string > q; q. push (" pippo "); q. push (" topolino "); q. push (" pluto "); q. push (" zapotec "); q. push (" minnie "); while (!q. empty ()) { cout << q. top () << " "; q. pop (); } cout << endl ; } esempio output: zapotec topolino pluto pippo minnie 9
11 Algoritmi in C++ 10
12 Algoritmi La Standard Template Library fornisce un insieme di algoritmi più comuni (quicksort, mergesort, ricerca binaria, etc.) #include<algorithm> Ogni algoritmo può essere applicato a molte strutture dati diverse (programmazione generica). 11
13 Sorting void sort(iter first, Iter last); Esegue quicksort sugli elementi della sequenza [first, last) ( O(n log n)). Vincoli sulla genericità: Gli elementi devono essere ordinabili (<). Gli iteratori devono essere random access (scelta del perno, riconoscimento caso base). vector<>, deque<> Ordinamento di un vettore: vector <int > v; /... / sort (v. begin (), v. end ()); 12
14 Sorting Per le liste si usa una speciale funzione membro: list <int > l; /... / l. sort (); Esegue mergesort su tutta la lista ( O(n log n)). Vincolo: Gli elementi devono essere ordinabili (<). 13
15 Ricerca lineare Iter find(iter first, Iter last, const T& val); Esegue una ricerca lineare sulla sequenza [first, last). Restituisce un iteratore al primo elemento trovato uguale a val, o last se l elemento non esiste. ( O(n)). Vincolo: Gli elementi devono essere confrontabili ( operatore ==). vector <int > v; /... / if( find (v. begin (), v. end (), 10)!= v. end ()) cout << "Ho trovato un 10! "; else cout << " Non ho trovato nessun 10. "; 14
16 Ricerca binaria bool binary search(iter first, Iter last, const T& val); Esegue una ricerca binaria sulla sequenza ordinata [first, last). Restituisce true se l elemento val è stato trovato, false altrimenti ( O(log n)). Vincoli sulla genericità: Elementi ordinabili (<). Iteratori random access. vector <int > v; /... / sort (v. begin (), v. end ()); if( binary_search (v. begin (), v. end (), 10)) cout << "Ho trovato un 10! "; else cout << " Non ho trovato nessun 10. "; 15
17 Ricerca binaria Se voglio ottenere un iteratore che punta all elemento trovato: Iter lower bound(iter first, Iter last, const T& val); Esegue una ricerca binaria sulla sequenza ordinata [first, last) ( O(log n)). 1. Se val esiste ed è unico: restituisce un iteratore a val. 2. Se esiste più di un val: restituisce un iteratore al primo val. 3. Se val non esiste: restituisce un iteratore all elemento immediatamente maggiore (o last se non esiste). 16
18 Ricerca binaria Ignora tutti gli elementi < val e prende l estremo inferiore dei rimanenti. val = Se 10 esiste ed è unico: 2. Se esiste più di un 10: 3. Se val non esiste: 17
19 Ricerca binaria Esempio: raddoppio tutti gli elementi che valgono 7: vector <int > v; /... / sort (v. begin (), v. end ()); vector <int >:: iterator i; i = lower_bound (v. begin (), v. end (), 7); // i 7 p o t r e b b e r o e s s e r e a l l a f i n e, // q u i n d i c o n t r o l l o anche che i non vada f u o r i d a l v e t t o r e : while (i!= v. end () && *i == 7) { *i *= 2; i ++; } 18
20 Algoritmi vari const T& max(const T& a, const T& b) const T& min(const T& a, const T& b) Restituiscono rispettivamente l elemento maggiore e minore. Vincolo: definito l operatore <. void swap(t& a, T& b) Scambia a con b. Ha complessità costante per i containers (string, vector<>, list<>). Iter max element(iter first, Iter last) Iter min element(iter first, Iter last) Restituiscono rispettivamente l iteratore all elemento massimo e all elemento minimo dell intervallo [first, last). Vincolo: definito l operatore <. Iter copy(iter first, Iter last, Iter to) Copia gli elementi dall intervallo sorgente [first, last) all intervallo destinazione che inizia da to. Restituisce un iteratore alla fine dell intervallo destinazione. 19
21 Algoritmi vari vector <int > a; vector <int > b; /... / copy (a. begin (), a. end (), b. begin ()); 20
22 Funtori 21
23 Funtori L invocazione di funzione è un operatore come tutti gli altri (operatore ()). nome f unzione(lista parametri) Posso implementare l operatore () in una classe: class A{ /... / public : int operator () ( int arg1, int arg2 ){ /... / } }; La classe A è un funtore (oggetto che rappresenta una funzione) ed è invocabile: int i; A a; i = a(2, 3); 22
24 Funtori void for each(iter first, Iter last, Funct f) Per ogni elemento nell intervallo [first, last) esegue f(elemento). Vincolo: f deve essere invocabile con un argomento di tipo T. void stampa ( int a){ if (a >= 0 && a <= 5) cout << a << endl ; } int main (){ vector <int > v; /... / for_each (v. begin (), v. end (), stampa ); } Se voglio stampare gli interi tra 6 e 10 devo dichiarare una nuova funzione. 23
25 Funtori Definisco un funtore: class StampaTra { int a, b; public : StampaTra ( int _a, int _b ){a = _a; b = _b ;} void operator () ( int num ){ if( num >= a && num <= b) cout << num << endl ; } }; int main (){ StampaTra f(0, 5); StampaTra f2 (6, 10); vector <int > v; /... / for_each (v. begin (), v. end (), f); for_each (v. begin (), v. end (), f2 ); } 24
26 Funtori void sort(iter first, Iter last, Funct less) Ordina [first, last) usando less come funzione di confronto. Vincolo: less deve essere invocabile con il seguente formato: bool less(const T& a, const T& b) Iter find if(iter first, Iter last, Funct test) Restituisce un iteratore al primo elemento di [first, last) su cui test ritorna true. Vincolo: test deve essere invocabile con il seguente formato: bool test(const T& a) 25
27 Funtori Esempio: Ordinare un vettore dal primo elemento che vale tra 1 e 5 in poi. vector <int > v (10); for ( int i = 0; i < 10; i ++) cin >> v[i]; Tra f(1, 5); // f u n t o r e che, i n v o c a t o, r e s t i t u i s c e // t r u e s e i l numero s t a t r a 1 e 5 vector <int >:: iterator j = find_if (v. begin (), v. end (), f); sort (j, v. end ()); 26
28 Funtori I funtori possono essere usati anche per modificare la struttura di alcuni containers. Esempio: set<string> con ordinamento case insensitive ( Pippo = pippo ). set<string, NoCaseLess> s; map<string, int, NoCaseLess> m; Vincolo: NoCaseLess invocabile con il formato: bool NoCaseLess(string, string). 27
29 Esercizio Scrivere un programma che fa le seguenti operazioni: 1. Prende da tastiera 10 interi e li memorizza su un vector<int> (usare un for o il for each). 2. Prende da tastiera un numero N > Ordina il vector con ordinamento modulo N: a < N b a N < b N (usare il sort a 3 argomenti). 4. Stampare su schermo il vettore ottenuto (usare un for o il for each). N=10 28
30 Esercizio - Soluzione / u t i l i p e r i l f o r e a c h / void prendi ( int & i){ cin >> i;} void stampa ( int i){ cout << i << ;} / F u n t o r e che, s e i n v o c a t o, t e s t a s e a è minore modulo N d i b / class LessModN { int N; public : LessModN ( int _N ){N = _N ;} bool operator ()( int a, int b){ return (a % N < b % N );} }; 29
31 int main (){ vector <int > v; int N; v. resize (10); // v e t t o r e d i 10 e l e m e n t i a 0 cout << " Vettore : "; for_each (v. begin (), v. end (), prendi ); cout << " Modulo di ordinamento : "; cin >> N; if(n <= 0) { cerr << " Errore : N deve essere > 0" << endl ; exit ( -1); } sort (v. begin (), v. end (), LessModN (N )); cout << " Vettore risultante : "; for_each (v. begin (), v. end (), stampa ); } 30
32 Esercizio 2 Scrivere un programma che fa le seguenti operazioni: 1. Prende da tastiera 10 interi e li memorizza su un vector<int> (usare un for o il for each). 2. Ordina i primi 5 elementi (usare il sort). 3. Ordina gli ultimi 5 elementi (usare il sort). 4. Stampa su schermo il vettore ottenuto (usare un for o il for each). 5. Copia gli 8 elementi centrali su una list<int> (usare il copy). 6. Stampa su schermo la lista ottenuta (usare un for o il for each). 31
33 Esercizio 2 - Soluzione int main ( int argc, char * argv []) { vector <int > v (10); vector <int >:: iterator i; for (i = v. begin (); i!= v. end (); i ++) cin >> *i; // punto 1 sort (v. begin (), v. begin () + 5); // punto 2 sort (v. begin () + 5, v. end ()); // punto 3 for (i = v. begin (); i!= v. end (); i ++) cout << *i << ; // punto 4 cout << endl ; list <int > l (8); copy (v. begin () + 1, v. end () - 1, l. begin ()); // punto 5 list <int >:: iterator j; for (j = l. begin (); j!= l. end (); j ++) cout << *j << ; // punto 6 cout << endl ; } 32
34 Esercizio 2 - Soluzione con for each void prendi ( int & num ){ cin >> num ;} void stampa ( int num ){ cout << num << ;} int main ( int argc, char * argv []) { vector <int > v (10); for_each (v. begin (), v. end (), prendi ); // punto 1 sort (v. begin (), v. begin () + 5); // punto 2 sort (v. begin () + 5, v. end ()); // punto 3 for_each (v. begin (), v. end (), stampa ); // punto 4 cout << endl ; list <int > l (8); copy (v. begin () + 1, v. end () - 1, l. begin ()); // punto 5 for_each (l. begin (), l. end (), stampa ); // punto 6 cout << endl ; } 33
Standard Template Library
Standard Template Library Standard Template Library Progettata per gestire insiemi di dati in modo comodo ed efficiente senza conoscere dettagli implementativi Fa parte dello standard C++ È basata a sulla
DettagliAlgoritmi e Strutture Dati. Lezione 1
Algoritmi e Strutture Dati Lezione 1 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Ma io so già programmare! Fondamenti I Sia dato un array contenente delle frasi. Scrivere un programma
DettagliLa programmazione Object Oriented e le sue applicazioni in Fisica.
La programmazione Object Oriented e le sue applicazioni in Fisica. Gabriella Cataldi, INFN Lecce Daniele Martello, dip. Fisica & INFN Lecce definizione di variabili Un metodo per automatizzare il processo
Dettaglicout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;
Funzioni int n, ris; cout n; ris = n*2; cout
DettagliLa classe std::vector della Standard Template Library del C++
La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente
DettagliAlgoritmi e Strutture Dati. Lezione 4
Algoritmi e Strutture Dati Lezione www.iet.unipi.it/a.virdis Antonio Virdis a.virdis@iet.unipi.it Sommario Heap Ordinamento tramite Heap Soluzioni Esercizi heap 3 5 6 7 8 0 9 3 5 3 heap 3 5 6 7 8 0 9 heap
DettagliVector v1,v2; cout << max(v1,v2) << endl;} T max( max( T p1, p1, T p2 p2 ) { int main() { Per il tipo T deve essere
Programmazione generica Programmazione generica INFN, Sezione di Napoli Programmazione generica Programmazione generica Il C++ fornisce un metodo per creare un polimorfismo parametrico. E possibile utilizzare
DettagliIntroduzione alla STL
Introduzione alla STL Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di: Giancarlo Cherchi Introduzione Cosa s intende per STL? STL? Standard Template Library E una libreria di programmazione
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione IX Tatiana Zolo zolo@cs.unipr.it 1 TIPI STRINGA Il C++ fornisce due rappresentazioni: stringa di caratteri stile C e la classe stringa introdotta nel C++ standard.
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Sottoprogrammi Parte 8 Dettagli e Approfondimenti versione 2.3 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima
DettagliPartiamo da un esempio: voglio realizzare un sw per la gestione dei miei contatti personali
C++: STL: CONTAINER STL: CONTAINER Partiamo da un esempio: voglio realizzare un sw per la gestione dei miei contatti personali Realizzo classe ElencoTelefonico che offre servizi per gestione dei record.
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliTipi di Dato Derivati
Un tipo di dato derivato è ottenuto a partire da tipi di dato predefiniti attraverso gli operatori *, &, [] definendo enumerazioni definendo struct I tipi di dato derivati non sono tipi di dati nuovi,
DettagliAlgoritmi e Strutture Dati. Lezione 3
Algoritmi e Strutture Dati Lezione 3 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Alberi Binari di Ricerca Gestione Stringhe Progettazione Esercizi 2 3 4 Alberi Binari 10
DettagliLezione 3 Tipi di Dato Derivati
Lezione 3 Un tipo di dato derivato è ottenuto a partire da tipi di dato predefiniti attraverso gli operatori *, &, [] definendo enumerazioni definendo struct I tipi di dato derivati non sono tipi di dati
DettagliCorso di Programmazione
Corso di Programmazione III Accertamento del 19 Giugno 2002 / A cognome e nome Risolvi i seguenti esercizi e riporta le soluzioni in modo chiaro su questo foglio, giustificando sinteticamente le risposte.
DettagliRicerca binaria (o dicotomica) di un elemento in un vettore
Ricerca binaria (o dicotomica) di un elemento in un La ricerca binaria o dicotomica è utilizzata per ricercare i dati in un ORDNATO. L algoritmo di ricerca binaria, dopo ogni confronto, scarta metà degli
DettagliLa funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre
La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre Unica particolarità: viene chiamata dal Sistema Operativo, appena il programma viene avviato Non
DettagliHo raggiunto la fine del file Provo a leggere un intero, ma il dato che prelevo dal file non è un intero
Stato di uno stream Uno stream possiede uno stato, che può essere corretto o errato. Quando lo stream è in stato di errore, non posso utilizzarlo. In lettura: Apertura di un file che non esiste X Ho raggiunto
DettagliAlgoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento
DettagliProgrammare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!
Programmare Hello1.c #include printf( \n Hello World! \n ); >> cc Hello1.c >> a.out Hello World! >> Hello1.c = file sorgente per scriverlo occorre un editor cc = compilatore per altri linguaggi
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min
DettagliNota: Si consideri il valore di pi greco.
ESERCIZIO 1 (Costrutti condizionali + Casting delle variabili) Realizzare un programma che, dato in ingresso un angolo specificato in gradi come un numero intero, fornisca la relativa conversione in radianti.
DettagliImplementazione dell albero binario in linguaggio C++
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
DettagliMetodi statici. Dichiarazione e chiamata di metodi statici
Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un
DettagliEsempio: quanto mi piace questo corso! qufuafantofo mifi pifiafacefe qufuefestofo coforsofo!
Esercizio 1 Scrivere un programma che acquisisca da tastiera una sequenza di caratteri terminata da! e riporti sul monitor una sequenza derivata dalla precedente secondo le regole dell alfabeto farfallino
DettagliAlgoritmi di Ordinamento Corso di Informatica Laurea in Fisica. prof. ing. Corrado Santoro
Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica prof. ing. Corrado Santoro ፫ Bubble Sort Se l i-esimo elemento è maggiore dell elemento i+-esimo, essi vengono scambiati. Si termina quando
DettagliOggetti funzione (1) Laboratorio di Informatica Antonio Monteleone 177
Oggetti funzione (1) In C++ è possibile ridefinire l operatore di chiamata a funzione operator() valore_di_ritorno operator() (lista_argomenti); Un oggetto funzione è l istanza di una classe per la quale
DettagliGestire le situazioni di errore
Gestire le situazioni di errore #include using namespace std; Classe VettoreDiInteri const int MAX = 10; class VettoreInteri { int v[max]; public: ; Gestire le situazioni di errore Ottenere
DettagliAlgoritmi e Strutture Dati. Lezione 2
Algoritmi e Strutture Dati Lezione 2 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Merge Sort Ordinamento STL Gestione Liste Esercizi 2 A metà Size Size/2 Size/2 3 A metà
DettagliEsercizi su programmazione ricorsiva 1. Pericle Perazzo 23 marzo 2012
su programmazione ricorsiva 1 Pericle Perazzo pericle.perazzo@iet.unipi.it http://info.iet.unipi.it/~fondii/ 23 marzo 2012 Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Algoritmo
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Dati Parte 4 Conclusioni versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca
DettagliUniversità di Roma Tor Vergata L16-1. Ricerca: esaminare una collezione di dati, cercando un particolare valore. nome e cognome
Università di Roma Tor Vergata L16-1 Ricerca: esaminare una collezione di dati, cercando un particolare valore (per: ) reperire informazione modificarla stamparla cancellarla esempio: archivio studenti
DettagliCorso di Fondamenti di Informatica Algoritmi su array / 1
Corso di Informatica Algoritmi su array / Anno Accademico 200/20 Francesco Tortorella Algoritmi su array Quando si usano gli array, si eseguono frequentemente alcune operazioni tipiche : inizializzazione
DettagliMetodi statci. Dichiarazione e chiamata di metodi statci
Metodi statci Dichiarazione e chiamata di metodi statci Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un
DettagliCorso di Grafica Computazionale
Corso di Grafica Computazionale STL & VCG Docente: Massimiliano Corsini Laurea Specialistica in Ing. Informatica Università degli Studi di Siena Introduzione Alla fine degli anni 70 Alexander Stepanov
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
DettagliLaboratorio di Algoritmi e Strutture Dati. Pile
Laboratorio di Algoritmi e Strutture Dati Pile Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso dal dott.
DettagliAlgoritmo di ordinamento per sostituzione. Esempio : dato l array :
Algoritmo di ordinamento per sostituzione Per ottenere un ordinamento crescente con l algoritmo di ordinamento per Sostituzione si confronta l elemento nella prima posizione con gli elementi nelle posizioni
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i
DettagliESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)
ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia) Scrivere una funzione per definire se un numero è primo e un programma principale minimale che ne testa la funzionalità. #include
DettagliProgrammazione template
Programmazione template Funzionalità ed operatori Anche se con comportamenti simili, i vari tipi (int, float, double) in C++ non sono interscambiabili automaticamente una medesima azione (es. la somma)
DettagliINFORMATICA 3 Prof.ssa Sara Comai
INFORMATICA 3 Prof.ssa Sara Comai ESERCIZI SESSIONE LIVE 3 Complessità, liste e alberi Ing. Paola Spoletini, Sara Comai. Complessità Si determini l ordine di grandezza Q della complessità temporale di
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista
DettagliProgrammazione generica
Programmazione generica Il C++ fornisce un metodo per creare un polimorfismo parametrico. E possibile utilizzare lo stesso codice per tipi differenti: il tipo della variabile diventa un parametro template
Dettaglia.a Codice corso: 21012
ESERCIZIO 1 Scrivere un programma in linguaggio C che lette dallo standard input due sequenze vettoriali ordinate di interi V1[n], V2[m] ne crei una terza V3[n+m] anch essa ordinata, che contenga tutti
DettagliC: panoramica. Violetta Lonati
C: panoramica 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 Violetta Lonati
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 2 Istruzioni Condizionali versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima
DettagliEsercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
DettagliAlgoritmi di ordinamento e ricerca. Classe SelSort.java
Classe SelSort.java public class SelSort Trova l elemento più piccolo nella porzione finale di un array. @param a l array da esplorare @param from la posizione iniziale dell intervallo @return la posizione
DettagliFile. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 14: ALGORITMI di ordinamento di array RICERCA sequenziale e binaria Array bidimensionali (matrici) Passaggio di argomenti al main Operazioni su array Un array
DettagliLaboratorio di Informatica
Strutture Dati in C++ Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Laboratorio di Informatica 4. Array e strutture in C++ Strutture
DettagliFondamenti di Informatica II 7. Array e Strutture in C++
Strutture Dati in C++ Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Fondamenti di Informatica II 7. Array e Strutture in C++ Strutture
DettagliPROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
DettagliLINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR
LINKEDLIST: iteratore Il metodo iterator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public Iterator iterator() { return new
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 3 Istruzioni Iterative (Cicli) versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima
DettagliClasse: vettore di interi
Classe: ettore di interi #include using namespace std; int main() { Oggetto VettoreInteri contenente 10 elementi di tipo intero VettoreInteri ett;... return 0; Se olessimo un ettore di 20 elementi?
DettagliCorso di Fondamenti di Informatica Prof. Aldo Franco Dragoni Prova scritta del 21/06/2010. Avvertenze. Specifiche
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da ambo le parti. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 2 Istruzioni Condizionali G. Mecca M. Samela Università della Basilicata Istruzioni Condizionali >> Sommario Sommario Introduzione
DettagliQuicksort e qsort() Alessio Orlandi. 28 marzo 2010
Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.
Dettaglitipi di dato astratti
tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica
Dettagliif else Fondamenti di Informatica (Modulo B) !""#$ % ( #if else ) " *+ #switch if (Condizione) Istruzione
#$ % '' # ( #if else ) *+ #switch 50 if else * if * # if (Condizione) Istruzione Condizione bool Istruzione ( Condizione true + Istruzione ( Condizione false + Istruzione +, -+.// x.//# if (x == 100) if
DettagliFondamenti di Informatica
Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste
DettagliADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)
ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI
DettagliFONDAMENTI DI INFORMATICA II (2h, punti 30/30) 26 Luglio 2011
FONDAMENTI DI INFORMATICA II (2h, punti 30/30) 26 Luglio 2011 Esercizio 2 PROGRAMMAZIONE IN C (punti 20) Si vogliono trovare gli elementi in comune a due file testo di parole (UNO.TXT e DUE.TXT), ordinarle
DettagliAlgoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati
Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il
DettagliLaboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
DettagliLaboratorio di Matematica e Informatica 1
Laboratorio di Matematica e Informatica 1 Matteo Mondini Antonio E. Porreca matteo.mondini@gmail.com porreca@disco.unimib.it Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi
DettagliEsercizi su programmazione ricorsiva 3
su programmazione ricorsiva 3 Pericle Perazzo pericle.perazzo@iet.unipi.it http://www.iet.unipi.it/p.perazzo/teaching/ http://lettieri.iet.unipi.it/mailman/listinfo/algoritmi_e_basi 10 maggio 2013 Alberi
DettagliLaboratorio di Algoritmi e Strutture Dati. Code con Priorità
Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliArray. Definizione e utilizzo di vettori
Array Definizione e utilizzo di vettori Array (1/2) Un array o vettore rappresenta un insieme di elementi dello stesso tipo. Sintassi per la creazione di un array: tipo_elementi[] nome; nome = new tipo_elementi[numero_elementi];
DettagliTipi strutturati - struct
Fondamenti di Programmazione A Appunti per le lezioni Gianfranco Rossi Tipi strutturati - struct Struttura dati (concreta) struct: sequenza di n elementi (n 0), rispettivamente di tipo t1,,tn (non necessariamente
DettagliFondamenti di Informatica
Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di
DettagliLa classe string. Tale classe evita agli utilizzatori tutte le problematiche di allocazione e de-allocazione dei buffer di caratteri
La classe string La libreria standard del del C++ definisce la classe string, dichiarata in , per la rappresentazione e manipolazione di stringhe. Tale classe evita agli utilizzatori tutte le problematiche
DettagliStrutture come parametri di funzioni
Strutture come parametri di funzioni int main() { struct PolReg { int numlati; float lunghezzalato; PolReg p1; p1.numlati = 3; p1.lunghezzalato = 10.0; float perimetro = p1.numlati * p1.lunghezzalato;
DettagliAmbienti di Programmazione per il Software di Base
Ambienti di Programmazione per il Software di Base Le Funzioni in C Esercizi sulle Funzioni svolti Esercizi sulle Funzioni da svolgere A.A. 2011/2012 Ambienti di Programmazione per il Software di Base
DettagliLaboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A
Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide
DettagliEsercizi vari. Alberto Montresor. 19 Agosto, 2014
Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni
DettagliFondamenti di Informatica 2008 corso prof. A. Picariello. Operazioni sui FILE in C++
Fondamenti di Informatica 2008 corso prof. A. Picariello Operazioni sui FILE in C++ Librerie di I/O per la gestione dei FILE Il C++ consente di utilizzare le librerie standard di I/O del C mette anche
DettagliUNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA
UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA Laboratorio di Programmazione e Calcolo A.A. 2018-19 Test Finale Roma, 17 gennaio 2019 1) Le variabili A, B e C sono dichiarate int.
DettagliLaboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome
Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011 Gruppo Cognome Riontino Nome Raffaele Cognome Nome TRACCIA 2 ARGOMENTO: LISTE TEMPO: 4h 1. Utilizzando Typedef definire un nuovo tipo di dato
DettagliPer implementare l Algoritmo si devono usare 2 coppie di indici :
Ordinamento di una per sostituzione Ordinamento di una per sostituzione Per ottenere un ordinamento crescente di una per Sostituzione, l algoritmo è identico a quello per l ordinamento di un vettore. Si
DettagliTela (Teaching Language)
Tela (Teaching Language) Paradigma imperativo Dichiarazioni di variabili, costanti, moduli Programma strutturato in moduli innestati Scope statico Passaggio dei parametri per valore Corpo del modulo =
DettagliFondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Dati Parte 1 Introduzione versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca
DettagliLaboratorio di Algoritmi e Strutture Dati
Realizzazione di Liste (II) Laboratorio di Algoritmi e Strutture Dati Domenico Redavid redavid@di.uniba.it Materiale di base gentilmente concesso dal dott. Nicola Di Mauro Ricercatore presso l'univ. di
DettagliSi descriva il comportamento del metodo main della classe ES2: cosa viene stampato sul video? Giustificare la risposta.
Esame scritto di: Fondamenti di Informatica - corsi 4 e 5 Data: 12 dicembre 2001 Traccia: B Tempo disponibile: 3 ore Cognome Nome Matricola Corso CORSO DI LAUREA Esercizio 1. Si consideri la seguente classe:
DettagliSommario. Le strutture dati elementari per implementare sequenze: Vettori Liste
Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro
DettagliAlgoritmi di Ordinamento
Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {
DettagliLE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
DettagliCorso di Fondamenti di Informatica Tipi strutturati: Stringhe
Corso di Fondamenti di Informatica Tipi strutturati: Stringhe Anno Accademico Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri
DettagliALGORITMI E STRUTTURE DATI
ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Introduzione al C + Array
Dettagliobiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati
obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati puntatori ( strutture dinamiche collegate) strutture dinamiche collegate (liste, pile,
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
Dettagli