Coda su lista concatenata

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Coda su lista concatenata"

Transcript

1 Cosa studiare nel libro Capitolo 7: tutto tranne Argomenti avanzati 7.2 e 7.5 Capitolo 8: solo 8.5, 8.6, 8.7, 8.8 e Argomenti avanzati 8.1 Capitolo 9: tutto fino a 9.6 (escluso) Capitolo 10: tutto fino a 10.9 (escluso) Capitolo 11: tutto tranne 11.5 Capitolo 12: tutto tranne 12.5 Capitolo 13: tutto Capitolo 14: tutto Capitolo 15: 15.1, 15.3, 15.4 No Capitolo 16 Appendice H Coda su lista concatenata Analogamente a quanto fatto con la Pila, andiamo a realizzare la Coda tramite una lista concatenata. Utilizziamo due riferimenti: primo vede la testa della Coda e ultimo vede l ultimo elemento della Coda. Si inserisce con ultimo e si estrae con primo. Gli assiomi da realizzare sono: verifica se è vuota, estrai, inserisci, guarda la testa. verifica di Coda vuota: primo == null O(1) guarda la testa: se non è vuota primo.info O(1) primo primo estrai la testa: se non è vuota: primo = primo.next; O(1) primo inserisci in coda; si deve costruire il nuovo elemento: ElemIntero nuovo = new ElemIntero(); si assegnano i valori ai campi info e next: nuovo.info = elem; nuovo.next = null; //ultimo nodo si aggancia il nuovo elemento alla Coda (distinguendo due casi: la Coda è vuota oppure no) e tale elemento dovrà poi diventare l ultimo: ultimo = nuovo; 1

2 inserisci in coda I caso: Coda vuota se primo == null primo = nuovo O(1) inserisci in coda II caso: Coda non è vuota se primo null ultimo.next = nuovo O(1) primo primo nuovo primo ultimo ultimo nuovo Nella Coda, diversamente dalla Pila, la gestione dell inserimento del primo elemento è diversa: 1) se la Coda non è vuota ultimo.next = nuovo; 2) se la Coda è vuota primo = nuovo; public class CodaListaConc {/** Coda di realizzata con lista concatenata */ private ElemIntero primo = null; private ElemIntero ultimo = null; public boolean vuota() {//isempty: if(primo == null) return true; else return false; public void inserisci(int elem) { //enqueue ElemIntero nuovo = new ElemIntero(); nuovo.next = null; nuovo.info = elem; if (primo == null) primo = nuovo; else ultimo.next = nuovo; ultimo = nuovo; public void estrai(){//dequeue: if (!vuota() ) primo = primo.next; else throw new EmptyQueueException(); public int testa() {//front if (!vuota() ) return primo.info; else throw new EmptyQueueException(); 2

3 /** Classe interna: la classe e' privata ma le sue variabili d'istanza sono visibili ai metodi della classe CodaListaConc */ private class ElemIntero { int info; ElemIntero next; //fine CodaListaConc Interfaccia Queue Definizione dell interfaccia Queue: public interface Queue{ boolean isempty(); void enqueue(object obj); void dequeue(); Object front(); /* oppure Object dequeue()per restituire la testa */ Realizzazione dell interfaccia Queue Costruzione della Queue: public class QueueArray implements Queue { //codice relativo ad una Queue con //array public class QueueListC implements Queue { //codice relativo ad una Queue con //lista concatenata Realizzazione dell interfaccia Queue In maniera analoga a quanto fatto con lo Stack, nella classe di prova avremo: Queue quea = new QueueArray(); Queue quel = new QueueListC(); e costruiremo due Code ad esempio con stringhe:... while (line!= null) { quea.enqueue(line); quel.enqueue(line); line = in.readline(); Esercizio per casa Considerare la classe Stud della settimana 7, sovrascrivere tostring per stampare nome cognome e matricola dello studente, costruire uno Stack e una Queue (realizzate con lista concatenata) per studenti del corso23 (il cui numero di matricola finisce per 2 o per 3). Stampare lo Stack e la Queue. Lista Meditare sulle conversioni dei riferimenti. 3

4 Lista La Lista è un TDA che generalizza il concetto di sequenza: gli elementi hanno un ordine posizionale. Nella Lista tutti gli elementi sono accessibili. Come TDA la Lista è definita in una interfaccia e per poter accedere ad ogni elemento si utilizza l interfaccia IteratoresuLista che rappresenta la possibilità di attraversare la Lista, aggiungere e togliere elementi in ogni posizione. Ne vedremo la realizzazione su lista concatenata. GenericContainer Interface GenericContainer Abbiamo visto che TDA è un contenitore di informazioni e che deve essere inizializzato vuoto. Possiamo pensare che l essere un contenitore sia un proprietà e possiamo rappresentarla in una interfaccia: public interface GenericContainer{ boolean isempty(); void makeempty(); //si può aggiungere int getsize(); Interface GenericContainer Pertanto possiamo scrivere: public interface Stack extends GenericContainer{ //push, pop, top e la classe che implementa Stack dovrà realizzare anche i metodi dell interfaccia GenericContainer. Anche le interfacce possono essere estese ed ereditano i metodi della superinterfaccia. Archivio: esercizio tipico Archivio: esercizio tipico L archivio è un concetto noto della vita quotidiana; vogliamo catalogare delle informazioni vere: archivio musicale: memorizziamo il titolo della canzone, il nome del cantante, l autore, archivio studenti: nome, matricola, media, numero esami sostenuti, anagrafe comunale: nome, codice fiscale, indirizzo, professione, stato civile, biblioteca: titolo, autore, numero copie presenti, collocazione, 4

5 Archivio: esercizio tipico archivio patenti: numero patente, nome intestatario, numero punti, I dati veri saranno i nostri oggetti: costruiremo una classe avente per campi le informazioni da memorizzare, metodi di accesso ai campi, eventuali metodi di modifica dei campi. Quali operazioni facciamo su un archivio? Costruzione Stampa Aggiornamento: inserire, cancellare, modificare Archivio: esercizio tipico Stampare l archivio modificato Gestione di eventuali errori nei dati: al posto della media c è un carattere invece di un numero reale; non ci sono tutte le informazioni sulla riga, Come realizziamo l archivio? Su array ordinato oppure no (ricerca lineare e ricerca binaria; inserimento alla fine o in ordine) Su lista concatenata ordinata oppure no Su tavola hash Archivio: esercizio tipico Altre richieste: stampare in ordine decrescente di media i nomi degli studenti la cui media è superiore ad un valore fissato; stampa ricorsiva dell archivio; gestione di eventuale file non trovato Nella prima parte del corso abbiamo studiato: tipi base, oggetti, algoritmi di ordinamento e ricerca su array; nella seconda parte: eccezioni, ereditarietà, interfacce, lista concatenata. Archivio: esercizio tipico Per la gestione dell archivio occorre: sovrascrivere tostring, equals, realizzare compareto, fare il cast nel passaggio dei riferimenti, Altri esercizi riguardano la gestione di TDA: fusione di due Code ordinate, costruzione di un Lista ordinata di e successive modifiche, L archivio è un TDA? Esiste un TDA di nome dizionario che rappresenta l archivio: (chiave, informazione). Il dizionario è un TDA dove si vogliono eseguire ricerche dove l informazione è individuata da una chiave che è unica. La parola del TDA deriva proprio dal dizionario (vocabolario) nel quale: le parole sono le chiavi di accesso e sono tutte distinte la definizione che segue la parola (informazione associata alla parola, attributo) caratterizza la parola. 5

6 Il dizionario è un contenitore di coppie: Coppia = (chiave, attributo) la chiave è confrontabile intero tipo che realizza Comparable (String) la chiave è unica se si vuole inserire una chiave si deve verificare che non sia presente, in tale caso si esegue una sostituzione. Le operazioni del TDA sono: verifica se è vuoto inserimento ricerca cancellazione Possiamo descriverlo in una interfaccia e implementarlo su una delle strutture dati. public interface Dictionary{ boolean isempty(); void insert(comparable chiave, Object attributo); void remove(comparable chiave); Object find(comparable chiave); L informazione Coppia è un record perché contiene campi di tipo diverso; la rappresentiamo perciò con una classe del tipo: class Coppia implements Comparable{ Object attributo;... public int compareto(object x){... Dovremo perciò scegliere cosa significa che due Coppie sono confrontabili: stabilire un ordine. Non sempre è necessario che le Coppie siano ordinate: per il dizionario è sufficiente la ricerca e quindi è sufficiente sovrascrivere equals. Ad esempio: class Coppia{ Object attributo; //String, int... public boolean equals(object x){... Costruiamo un archivio di studenti realizzando un dizionario e facendo riferimento alla seguente classe: public class Studente { private String nome; private int matricola; public Studente (int m, String n){ nome = n; matricola = m; public int matricola () { return matricola; public String nome () { return nome; 6

7 public String tostring () { return matricola + ":" + nome; //fine Studente L archivio sarà una classe di nome ArchivioStudente e la matricola sarà sia chiave che campo dell attributo. Costruiamo la Coppia come classe interna: class Coppia implements Comparable{ int chiave; Studente attributo; Coppia (int codice, Studente att){ chiave = codice; attributo = att; public int compareto(object x){ Coppia c = (Coppia) x; if(this.chiave < c.chiave) return -1; if(chiave > c.chiave) return 1; return 0; //fine compareto //fine Coppia /**La classe costruisce un archivio di studenti utilizzando un array ridimensionabile*/ import java.util.nosuchelementexception; public class ArchivioStudente { private Coppia archivio[]; private int dim; public ArchivioStudente(){ archivio = new Coppia[1]; dim = 0; public boolean vuoto(){ return dim == 0; /**si aggiunge un nuovo studente, se necessario si ridimensiona*/ public void aggiungi(int codice, int matricola, String nome){ Studente stud = new Studente(matricola, nome); Coppia target = new Coppia(codice,stud); //gestione di coppia gia' presente int i=0; boolean trovato = false; while( i<dim &&!trovato) if(archivio[i].compareto(target)==0){ archivio[i] = target; trovato = true; 7

8 else i++; //fine while if (!trovato) { //eventuale ridimensionamento if (dim == archivio.length){ Coppia[] nuovoarc = new Coppia[2 * archivio.length]; for (i = 0; i < archivio.length;i++) nuovoarc[i] = archivio[i]; archivio = nuovoarc; archivio[dim] = target; dim++; //fine aggiungi public Studente ricerca(int codice) throws NoSuchElementException{ Studente stud = new Studente(0, null); Coppia target = new Coppia(codice, stud); //ricerca della coppia boolean trovato =false; int i=0; while( i<dim &&!trovato){ if(archivio[i].compareto(target)==0) trovato =true; else i++; //fine while if(!trovato) throw new NoSuchElementException(); else return archivio[i].attributo; //fine ricerca public void cancella (int codice) throws NoSuchElementException{ Studente stud = new Studente(0, null); Coppia target = new Coppia(codice, stud); //ricerca della coppia int i=0; boolean trovato =false; while( i<dim &&!trovato){ if(archivio[i].compareto(target)==0) trovato =true; else i++; //fine while if(!trovato) throw new NoSuchElementException(); else {//trovato in posizione i: //sostituzione con l'ultimo archivio[i]=archivio[dim-1]; dim--; // oppure costruzione di una copia //del dizionario senza l elemento //fine else //fine cancella 8

9 public String tostring () { String tmp = ""; for (int i = 0; i<dim; i++) tmp = tmp + archivio[i].chiave + " " + archivio[i].attributo + "\n"; return tmp; //fine tostring //... classe Coppia //fine ArchivioStudente Prestazioni di un Un dizionario si può realizzare con array non ordinato, array ordinato e lista concatenata. Array non ordinato. inserimento: dovendo verificare che la chiave non sia presente si effettua una ricerca lineare, O(n) e poi l inserimento all ultimo posto, O(1) in media per il raddoppio; ricerca: ricerca lineare, O(n) cancellazione: si effettua una ricerca, O(n), si sostituisce l ultimo al posto i-esimo, O(1), oppure si ricopiano gli elementi all indietro, O(n). Prestazioni di un Array ordinato. inserimento: dovendo verificare che la chiave non sia presente si effettua una ricerca binaria, O(log 2 n) e successivamente l inserimento in ordine, O(n), spostamento di dati; ricerca: ricerca binaria O(log 2 n); cancellazione: si effettua una ricerca, O(log 2 n) e poi si spostano gli elementi all indietro per mantenere l ordine, O(n). Prestazioni di un Lista concatenata inserimento: dovendo verificare che la chiave non sia presente si effettua una ricerca lineare e quindi è O(n); altrimenti l inserimento è in testa, O(1); ricerca: ricerca lineare O(n) cancellazione: si effettua una ricerca, O(n) e si esegue la cancellazione O(1). Scelte di programmazione Come si fa nei linguaggi non a oggetti a realizzare un archivio? Si costruisce un file (classe di prova) entro cui si inserisce il main, il record che rappresenta l informazione (classe con incapsulamento) e tutte le funzioni (metodi) per risolvere il problema: inserisci, cancella, ricerca, stampa, ecc. Non c è scelta per l accesso: è come se tutto fosse pubblico. Si può fare così anche in Java? Sì, naturalmente. Ma noi abbiamo fatto di più. Scelte di programmazione Potevamo scegliere di scrivere tutto in un unica classe, oppure in classi diverse, e tutto visibile e statico. Abbiamo scelto gli oggetti e i TDA: abbiamo voluto proteggere i dati abbiamo individuato in gruppi di metodi delle proprietà astratte da realizzare. In tale modo non solo abbiamo risolto problemi per noi ma abbiamo scritto codice generale e riusabile. 9

10 Gestione hash di un array di Vogliamo inserire dei numeri in un array e pensiamo ad una memorizzazione efficiente con lo scopo di ottimizzare successivamente la ricerca del numero. Esempio. Pensiamo di memorizzare in un array i numeri di matricola di un corso di n=120 studenti; alla matricola si possono poi far corrispondere ulteriori informazioni riguardanti lo studente. Oppure potremmo pensare di individuare lo studente tramite la sua postazione al PC del laboratorio: in questo caso avremo 120 numeri diversi per i 120 studenti. In questo secondo caso consideriamo un array di dimensione 120 e memorizziamo al posto i-esimo lo i-esimo studente: l indice dell array coincide con l informazione che vogliamo memorizzare: indice = informazione Se andiamo ad eseguire una ricerca il costo sarà sempre O(1); l accesso diretto alla posizione i- esima ci fornisce l informazione cercata: postazione[i] = i Potremmo pensare di risolvere in modo analogo il problema di memorizzare il numero di matricola, supponiamo compreso tra e Se avessimo a disposizione un array di componenti nuovamente troveremmo la matricola cercata in un tempo O(1) matricola[575231] = Possiamo vedere la matricola e la postazione come delle chiavi di accesso all informazione vera, costituita dai dati dello studente. Se l insieme delle possibili chiavi coincide con il numero di elementi che vogliamo rappresentare, come nel caso della postazione, allora la scelta è buona. Nel caso della matricola avremmo un notevole spreco di memoria: un array di componenti per memorizzare 120 dati. L idea pertanto è la seguente: lo spazio in più può dare dei vantaggi per non sprecarlo cerchiamo una funzione che trasformi la matricola (chiave) in un valore di indice possibile per un array di dimensione dim, con dim un po più grande di n=120. Vogliamo determinare una funzione h tale che, per ogni valore della chiave (matricola) si abbia: h(chiave) = posizione con 0 posizione dim-1 10

11 Una funzione di trasformazione può essere il calcolo del resto della divisione con dim: posizione = h(k) = k mod dim Si può dimostrare che, con questa scelta della funzione, è bene che sia dim n del 10-20% e che dim sia un numero primo. Infatti una buona scelta di h comporta che i resti siano, nella maggior parte dei casi, diversi tra loro. Se fosse dim=100, tutti i numeri del tipo , ,..., , ,..., avrebbero lo stesso resto. Non sempre le chiavi troveranno resti diversi: si parla allora di collisione dato che due chiavi dovrebbero andare nello stesso posto. Come risolvere il problema? Lo spazio nell array c è, visto che dim n, pertanto si effettua una scansione cercando un posto libero, provando con il successivo modulo dim: se posizione = k mod dim è occupata, allora si cerca in posizione = (posizione+1) mod dim Come abbiamo visto nella Coda, questa tecnica permette di fare il giro dell array. Esempio. Consideriamo i seguenti n=9 valori: 1, 3, 4, 15, 18, 20, 22, 35, 48 e proviamo ad inserirli con la tecnica del resto in un array di dim=11 elementi. Calcoliamo i resti: 1%11 = 1; 3%11 = 3; 4%11 = 4; 15%11 = 4 ma la posizione 4 è occupata Facciamo: (4+1)%11 = 5%11= 5 che è libera continuiamo: 18%11= 7; 20%11= 9; 22%11= 0; 35%11= 2; 48%11= 4 che è occupata: (4+1)%11 = 5%11= 5 che è occupata (5+1)%11 = 6%11= 6 che è libera I numeri nell array sono memorizzati in ordine diverso da quello di inserimento (rimescolati): Quanto costa inserire con questa tecnica? L inserimento di un numero che trova subito il suo posto è O(1): calcolo del resto invece di +1; quando c è una collisione si deve cercare il posto: se n=dim il caso peggiore è O(n), si fa tutto il giro; nel nostro caso abbiamo 12 confronti (per cercare il posto libero) per 9 elementi. Si può dimostrare che, se dim è buona, in media il costo è O(1). Proviamo ora ad effettuare una ricerca di un valore nell array. La tecnica per la ricerca sarà la stessa: calcolare il resto della divisione con dim: valore%dim fornisce l indice in cui cercare il valore (chiave). Il costo della ricerca di un valore presente è lo stesso di quello dell inserimento: in media O(1). Per un valore non presente il costo è superiore: può capitare di fare tutto il giro, O(n) nel caso peggiore. 11

12 Per costruire l array dobbiamo dare un significato al posto vuoto. Possiamo inizializzare l array con un valore non appartenente all universo delle chiavi; ad esempio 0 per le matricole, -1 per le postazioni dei PC, ecc. Durante la costruzione dell array il posto vuoto indica la posizione libera in cui poter inserire l elemento. Durante la ricerca il posto vuoto indica elemento non presente. Nel caso della ricerca si effettua la stessa scansione facendo il giro dell array. In caso di array pieno (n=dim) e di elemento non presente, si fa tutto il giro ritornando alla posizione iniziale senza trovarlo. Per gestire questa situazione, si salva il valore della chiave presente all indice chiave%dim in una variabile temporanea, si copia in tale posizione l elemento da cercare, si effettua la ricerca (che avrà esito positivo). Se l elemento viene trovato nella posizione iniziale (si è fatto tutto il giro) significa che non c è, altrimenti lo si è trovato più avanti e ciò significa che c era stata una collisione. Infine si ripristina il valore salvato. Si può ottimizzare la ricerca del caso non trovato, inserendo le chiavi in ordine: se si trova un elemento più grande ciò significa che quello più piccolo non c è. Tavola: dizionario con chiave intera Tavola: dizionario con chiave intera Vogliamo ora rappresentare un dizionario la cui chiave è un valore intero; le operazioni sono sempre: ricerca, inserisci, cancella. Si dà il nome di Tavola ad un dizionario a chiave intera: boolean isempty(); void insert(int chiave, Object attributo); void remove(int chiave); Object find(int chiave); 12

13 Dal momento che la chiave è intera possiamo pensare di utilizzare la tecnica vista prima per memorizzare la chiave. Però possiamo fare meglio. Il problema delle collisioni portava ad un sovradimensionamento della tavola; cerchiamo di risolverlo in altro modo: mantenere le stesse prestazioni e non sprecare spazio. L array offre con l accesso diretto O(1), la lista concatenata offre un inserimento O(1). Costruiamo un array di liste concatenate: la scelta dell indice nell array si effettua con chiave trasformata (ridotta) e la collisione si risolve con un inserimento in testa alla lista. Abbiamo quindi un Tavola realizzata tramite due strutture di dati che prende il nome di con bucket (bucket è la lista concatenata). Le prestazioni della Tavola dipendono dalla funzione hash e dalle chiavi. La funzione h potrebbe fornire sempre lo stesso valore di chiave ridotta: caso peggiore, O(n) coppia coppia coppia Caso favorevole: tutte le liste hanno la stessa lunghezza, n/dim, O(n/dim); se n~dim si ha circa O(1) coppia... coppia coppia Se le chiavi sono uniformemente distribuite, la funzione hash con il resto della divisione con dim è una buona scelta: anche le chiavi ridotte sono uniformemente distribuite. Dobbiamo usare solo i numeri o possiamo fare lo stesso anche con altri tipi Comparable? Proviamo con le stringhe. Dobbiamo associare ad una stringa un valore intero per poter poi calcolare il resto. Ricordiamo la notazione posizionale dei numeri: 257 = possiamo trasformare una stringa in un numero pensando alla base b=65536: ABC = A b 2 + B b 1 + C b 0 Sarebbe una buona idea, dato che in Java un char è anche un intero (short: numero d ordine nel codice UNICODE), ma si avrebbe un numero troppo elevato e spesso overflow. 13

14 La libreria standard usa per le stringhe il valore 31 (primo) come moltiplicatore, al posto di b: ABC = A B C 31 0 Possiamo quindi calcolare il valore hash per ABC : String s = ABC ; final int MOLTIPLICATORE = 31; int h=0; for(int i=0; i<s.length(); i++) h = MOLTIPLICATORE*h + s.charat(i); System.out.println( codice hash = + h); Il ciclo for utilizza per il calcolo di h la formula di Horner per il calcolo del valore di un polinomio: a 0 x n + a 1 x n a n-1 x + a n = = ( ((a 0 x + a 1 )x + a 2 )x +.+ a n-1 )x + a n il calcolo è più efficiente che non partire da a n e sommare calcolando le potenze x k = x k-1 x. Per gestire oggetti generici si può usare il metodo hascode() della classe Object che restituisce un int a partire dall indirizzo di memoria dell oggetto. Si può pertanto fare: int codicehash = oggetto.hascode(); e quindi: int posizione = codicehash%dim; Vogliamo costruire l archivio degli studenti: private static final int dimtabh = 7; private Elemento archivio[]; private int dim; public ArchivioTabh(){//costruttore archivio = new Elemento[dimTabh]; dim = 0; //numero di elementi inseriti Il nodo sarà una classe interna: private class Elemento{ Coppia info; Elemento next; La classe Coppia è la stessa dell archivio su array. Il metodo aggiungi calcola la posizione nella tavola e poi verifica se la lista (bucket) è vuota o se c è collisione. public void aggiungi(int codice, int matricola, String nome){ Studente stud = new Studente(matricola, nome); Coppia target = new Coppia(codice, stud); int i = hash(codice); if(archivio[i] == null){ //lista vuota archivio[i] = new Elemento(); archivio[i].info = target; archivio[i].next = null; dim++; 14

15 else{//collisione //cerca se la coppia e' gia' presente Elemento tmp = archivio[i]; boolean trovato = false; while( tmp!=null &&!trovato) if((tmp.info).compareto(target)==0){ //se presente si riassegna tmp.info = target; trovato =true; else tmp=tmp.next; //fine while //se la coppia non c'e', inserimento in // testa alla lista if (!trovato) {//push Elemento nuovo = new Elemento(); nuovo.info = target; nuovo.next = archivio[i]; archivio[i] = nuovo; dim++; //else collisione //fine aggiungi 15

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

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi 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

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo

Dettagli

Gestione di files Motivazioni

Gestione di files Motivazioni Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

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

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari Algoritmi e Strutture Dati Tipo di dato astratto e Strutture dati elementari 1 Argomenti della lezione Tipi di dato astratto Strutture dati elementari Liste o Implementazione di liste in Java Stack Code

Dettagli

3. Terza esercitazione autoguidata: progetto gestione voli

3. Terza esercitazione autoguidata: progetto gestione voli 9 3. Terza esercitazione autoguidata: progetto gestione voli Qui ci occupiamo di scrivere un programma abbastanza lungo, dedicato alla gestione di una tabella di dati. Una tabella e una struttura dati

Dettagli

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

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Tipi Tipo Astratto di Permette di specicare dati in modo astratto Astratto Indipendentemente

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 10 Strutture collegate - 2 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Strutture collegate - 2 1 Contenuti!Strutture

Dettagli

Esonero del corso di Programmazione a Oggetti

Esonero del corso di Programmazione a Oggetti Esonero del corso di Programmazione a Oggetti Roma, 1 dicembre 2005 Considerate le seguenti definizioni di classi e interfacce in Java: interface Fumetto{ void esclama(); void utile(); class Personaggio

Dettagli

Pile (stacks) e code (queues)

Pile (stacks) e code (queues) Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 Pile e Code Marco Antoniotti Pile (stacks) e code (queues) Tipi di dati fondamentali Applicazioni molteplici Le operazioni standard Aggiungi

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

COMPITO DI LABORATORIO DI PROGRAMMAZIONE 2001-2002 17 Luglio 2002. Soluzione degli Esercizi

COMPITO DI LABORATORIO DI PROGRAMMAZIONE 2001-2002 17 Luglio 2002. Soluzione degli Esercizi COMPITO DI LABORATORIO DI PROGRAMMAZIONE 2001-2002 17 Luglio 2002 degli Esercizi ESERCIZIO 1. Si consideri il seguente frammento di codice in linguaggio Java: int i=0, j=0; int[][] a=b; boolean trovato=false;

Dettagli

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012 Programmazione a oggetti e JAVA Prof. B.Buttarazzi A.A. 2011/2012 Sommario Variabili statiche Ereditarietà multipla Le interfacce Binding Esercizi Esercizio ContoCorrente Creare una classe ContoCorrente

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) 1) Si considerino le classi Java: Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) class Card Card (String seed, int value) this.seed=seed; this.value=value; String seed; int

Dettagli

Tipi di dati astratti e strutture dati (capitolo 14, e ancora capitolo 9)

Tipi di dati astratti e strutture dati (capitolo 14, e ancora capitolo 9) SETTIMANA 8 Tipi di dati astratti e strutture dati (capitolo 14, e ancora capitolo 9) Tipi di dati astratti Definizione una struttura dati (data structure) è un modo sistematico di organizzare i dati in

Dettagli

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola Politecnico di Milano Ingegneria del Software a.a. 2006/07 Appello del 14 settembre 2007 Cognome Nome Matricola Sezione (segnarne una) Baresi, Ghezzi, Morzenti, SanPietro Istruzioni 1. La mancata indicazione

Dettagli

Compito di Fondamenti di Informatica

Compito di Fondamenti di Informatica Compito di Fondamenti di Informatica In un magazzino viene utilizzato un archivio informatico, nel quale vengono memorizzate le informazioni relative ai prodotti contenuti nel magazzino e che ne permette

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2009-10 I scritto Febbraio 11 Febbraio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2009-10 I scritto Febbraio 11 Febbraio 2011 Cognome Matricola Nome Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2009-10 I scritto Febbraio 11 Febbraio 2011 Quesito La Biblioteca è costituita da due array: il primo

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il primo

Dettagli

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1 Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio

Dettagli

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

COGNOME E NOME (IN STAMPATELLO) MATRICOLA Politecnico di Milano Facoltà di Ingegneria dell Informazione Informatica 3 Proff. Ghezzi, Lanzi, Matera e Morzenti Seconda prova in itinere 4 Luglio 2005 COGNOME E NOME (IN STAMPATELLO) MATRICOLA Risolvere

Dettagli

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Si noti che le soluzioni ai quesiti saranno considerate

Dettagli

argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo <elemento, chiave>

argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo <elemento, chiave> argomenti Hashing! Hashing! Tabelle hash! Funzioni hash e metodi per generarle! Inserimento e risoluzione delle collisioni! Eliminazione! Funzioni hash per file! Hashing estendibile! Hashing lineare Hashing

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: Soluzioni Esercizi 13-23 Soluzione

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

Dettagli

Lezione 6 Le pile. Informatica. 28 Aprile 2016

Lezione 6 Le pile. Informatica. 28 Aprile 2016 Lezione 6 Le pile Informatica 28 Aprile 2016 Il porto di Anversa Il terminal del porto merci di Anversa usa delle gru a cavaliere per movimentare i container: I container arrivano per nave e vengono messi

Dettagli

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

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato. Il File System Il file system È quella parte del Sistema Operativo che fornisce i meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate in memoria di massa. Realizza i concetti

Dettagli

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html. Outline

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html. Outline Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html Ing. Francesco De Mola demola.francesco@unimore.it DII, Modena Via Vignolese (lab. Dottorandi

Dettagli

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002. INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002 Esercizio 4) import fiji.io.simplereader; class Programma{ public static

Dettagli

Parcheggio.rtf 1/8 6 gennaio 2009. Prova di programmazione: parcheggio a pagamento

Parcheggio.rtf 1/8 6 gennaio 2009. Prova di programmazione: parcheggio a pagamento Parcheggio.rtf 1/8 6 gennaio 2009 Prova di programmazione: parcheggio a pagamento Si sviluppi il codice per la gestione di un parcheggio a pagamento mediante la classe Parcheggio, che ospita le auto rappresentate

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico ISTITUTO TECNICO STATALE MARCHI FORTI Viale Guglielmo Marconi n 16-51017 PESCIA (PT) - ITALIA PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico Docente PARROTTA GIOVANNI

Dettagli

Prof. Pagani Corrado ESERCITAZIONI DIAGRAMMI DELLE CLASSI UML E JAVA

Prof. Pagani Corrado ESERCITAZIONI DIAGRAMMI DELLE CLASSI UML E JAVA Prof. Pagani Corrado ESERCITAZIONI DIAGRAMMI DELLE CLASSI UML E JAVA ES 02 - ORGANIZER Voglio un gestionale (organizer) che permetta a ciascun dipendente della mia azienda di inserire le attività che svolgono

Dettagli

Manuale Utente per la Gestione dei Revisori degli Enti Locali

Manuale Utente per la Gestione dei Revisori degli Enti Locali Manuale Utente per la Gestione dei Revisori degli Enti Locali INDICE DEI CONTENUTI 1 PRESENTAZIONE DEL DOCUMENTO 3 1.1 INTRODUZIONE NORMATIVA 3 1.2 DEFINIZIONE DEI TERMINI/GLOSSARIO 4 2 MODALITÀ DI ACCESSO

Dettagli

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

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa

Dettagli

ARRAY E STRINGHE. G. Frosini Slide 1

ARRAY E STRINGHE. G. Frosini Slide 1 ARRAY E STRINGHE G. Frosini Slide 1 Array: VARIABILI ARRAY struttura dati costituita da elementi (anche nessuno, array vuoto) dello stesso tipo; tipo array: tipo degli elementi, non numero degli elementi;

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007 Files in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Sintesi Motivazioni Definizione di file in C++ Un esempio Uso dei file Esempi Esercizi Motivazioni il programma in esecuzione legge (sequenzialmente)

Dettagli

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2007-08 Primo scritto 11 Gennaio 2008

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2007-08 Primo scritto 11 Gennaio 2008 Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2007-08 Primo scritto 11 Gennaio 2008 Si noti che le soluzioni ai quesiti saranno considerate valide

Dettagli

PSC Doc Manuale d uso

PSC Doc Manuale d uso PSC Doc Manuale d uso Questo manuale è di proprietà di Edirama di M. Rapparini - I contenuti non possono essere copiati, distribuiti o utilizzati per qualsiasi scopo. Contenuti Il manuale è strutturato

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Ruoli e Responsabilità: C# versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G.

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone. Linguaggio utilizzato: C# IDE utilizzato: Visual Studio 2010 Andreetta Stefano Argomenti trattati: Caricamento di un

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

3. La sintassi di Java

3. La sintassi di Java pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer

Dettagli

Java Native Interface Appunti

Java Native Interface Appunti Java Native Interface Appunti Riccardo Rizzo 1/8 Introduzione L'uso delle Java Native Interface e' giustificato tutte quelle volte che una applicazione non puo' essere scritta interamente in Java. Per

Dettagli

Definizione di classi con array di oggetti

Definizione di classi con array di oggetti Definizione di classi con array di oggetti 1. (Esame scritto del 18/9/2002, Esercizio 6.) La banca dati di un agenzia assicurativa per auto è caratterizzata da un insieme di polizze di assicurazioni per

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java Fondamenti di Informatica Ingegneria Gestionale Canale AL 1 Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il

Dettagli

RICHIESTA CERTIFICATO DI AGIBILITÀ IMPRESE CHE OCCUPANO LAVORATORI DEL SETTORE DELLO SPETTACOLO

RICHIESTA CERTIFICATO DI AGIBILITÀ IMPRESE CHE OCCUPANO LAVORATORI DEL SETTORE DELLO SPETTACOLO RICHIESTA CERTIFICATO DI AGIBILITÀ IMPRESE CHE OCCUPANO LAVORATORI DEL SETTORE DELLO SPETTACOLO MANUALE UTENTE Data di consegna 15/05/2015 Versione 1.0 - Pag. 1 1. Introduzione... 3 2. Scopo del documento...

Dettagli

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza(); // Fondamenti di Informatica/Informatica Grafica // Soluzione del compito del 21/03/2003 // per semplicità si è deciso di riportare in un unico file il testo // delle soluzioni degli esercizi 1, 2 e 3.

Dettagli

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

Dettagli

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008 Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 6 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

7) Strutture dati fondamentali

7) Strutture dati fondamentali Pag 78 7) Strutture dati fondamentali L algoritmo Heapsort che abbiamo illustrato nel capitolo precedente è un ottimo esempio di soluzione (al problema dell ordinamento, nel caso specifico) nella quale

Dettagli

Guida alla compilazione della domanda di partecipazione al concorso di Dottorato di Ricerca

Guida alla compilazione della domanda di partecipazione al concorso di Dottorato di Ricerca Guida alla compilazione della domanda di partecipazione al concorso di Dottorato di Ricerca La domanda per la partecipazione al concorso di ammissione per il Dottorato di ricerca deve essere inviata secondo

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

Dettagli

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x. Funzioni Esercizio 1 Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x. Creare un altra funzione, di nome float cube(float x), che restituisce invece il

Dettagli

Java. Linguaggi di Programmazione Linguaggi Speciali & Tecnologie dei Linguaggi di Programmazione: Scritto del 30 Giugno 2006

Java. Linguaggi di Programmazione Linguaggi Speciali & Tecnologie dei Linguaggi di Programmazione: Scritto del 30 Giugno 2006 Linguaggi di Programmazione Linguaggi Speciali & Tecnologie dei Linguaggi di Programmazione: Scritto del 30 Giugno 2006 Java Nome e Cognome: Matricola: Corso di Laurea: Date le classi seguenti: class Point

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

0.1 Esercizi calcolo combinatorio

0.1 Esercizi calcolo combinatorio 0.1 Esercizi calcolo combinatorio Esercizio 1. Sia T l insieme dei primi 100 numeri naturali. Calcolare: 1. Il numero di sottoinsiemi A di T che contengono esattamente 8 pari.. Il numero di coppie (A,

Dettagli

Flussi, lettori e scrittori

Flussi, lettori e scrittori Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Programmazione 1 A.A. 2015/2016

Programmazione 1 A.A. 2015/2016 Cognome e Nome Matricola (se disponibile) Programmazione 1 A.A. 2015/2016 Parziale del 4 Novembre 2015 Compito n 1 Esercizio 1 (4 punti) Convertire da base 16 a base 2 il numero FA1 Convertire da base

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

Dettagli

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala L algoritmo di ricerca binaria Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala L algoritmo di ricerca binaria (o dicotomica) In informatica,, la ricerca dicotomica

Dettagli

Informatica Teorica. Macchine a registri

Informatica Teorica. Macchine a registri Informatica Teorica Macchine a registri 1 Macchine a registri RAM (Random Access Machine) astrazione ragionevole di un calcolatore nastro di ingresso nastro di uscita unità centrale in grado di eseguire

Dettagli

Manuale LiveBox APPLICAZIONE ANDROID (V. 3.02.019) http://www.liveboxcloud.com

Manuale LiveBox APPLICAZIONE ANDROID (V. 3.02.019) http://www.liveboxcloud.com 2015 Manuale LiveBox APPLICAZIONE ANDROID (V. 3.02.019) http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi

Dettagli

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

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette. 3.5 STAMPA UNIONE Le funzioni della stampa unione (o stampa in serie) permettono di collegare un documento principale con un elenco di nominativi e indirizzi, creando così tanti esemplari uguali nel contenuto,

Dettagli

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione di Utilizzo ricorsione per processare dati in java vs. multipla

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni

Dettagli

Appello di Informatica B

Appello di Informatica B Politecnico di Milano Facoltà di Ingegneria Industriale 19 febbraio 2004 Appello di Informatica B Prof. Angelo Morzenti - Prof. Vincenzo Martena Cognome e nome: Matricola: Tipo di prova: recupero I prova

Dettagli

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro Laboratorio di Programmazione Lezione 1 Cristian Del Fabbro Reperibilità homepage corso: https://users.dimi.uniud.it/~cristian.delfabbro/teaching.php email: cristian.delfabbro@uniud.it telefono: 0432 558676

Dettagli

METODI DI CONVERSIONE FRA MISURE

METODI DI CONVERSIONE FRA MISURE METODI DI CONVERSIONE FRA MISURE Un problema molto frequente e delicato da risolvere è la conversione tra misure, già in parte introdotto a proposito delle conversioni tra multipli e sottomultipli delle

Dettagli

INDICE. PULSE Manuale Operativo Pag. 1

INDICE. PULSE Manuale Operativo Pag. 1 www.clsystem.it PULSE LE PRESENZE VIAGGIANO SUL WEB MANUALE OPERATIVO AZIENDA PULSE Manuale Operativo Pag. 1 INDICE ACCESSO AL PROGRAMMA Pag. 2 TABELLE Pag. 3 1 CALENDARIO Pag. 3 2 VOCI Pag. 4 3 C.C.N.L.

Dettagli

Il comando provoca il salvataggio dello stato e la terminazione dell esecuzione.

Il comando provoca il salvataggio dello stato e la terminazione dell esecuzione. Scrivere un programma per la gestione di una videoteca. Il programma deve essere in grado di tenere traccia dello stato corrente (presente/in prestito a x/smarrito da x/danneggiato da x a livello nn) e

Dettagli

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca) Ministero dell Istruzione, dell Università e della Ricerca Istituto Tecnico Industriale Statale Enrico Mattei Via Martiri di Cefalonia 46-20097 San Donato Milanese Tel. 0255691411 - Fax 025276676 itisando@tin.it

Dettagli

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC PROGRAMMAZIONE AVANZATA JAVA E C Massimiliano Redolfi Lezione 7: Code, Stack, Liste Ricerca 2 Ricerca Se dobbiamo cercare un elemento in un array possiamo trovarci in due situazioni Elementi non ordinati

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Moduli Bluetooth 03 - connessione seriale via BT

Moduli Bluetooth 03 - connessione seriale via BT Moduli Bluetooth 03 - connessione seriale via BT v 0.1 - Author: Mirco Piccin aka pitusso La connessione seriale ai moduli BT permette di inviare dati dal pc/smartphone/altro ad Arduino, in modalita wireless.

Dettagli

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

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

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli