Esercizi di Algoritmi e Strutture Dati
|
|
|
- Luca Poli
- 10 anni fa
- Просмотров:
Транскрипт
1 Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] 18 marzo 2011 Problema basato su 10.5 del libro di testo La CINA (Compagnia Italiana per il Noleggio di Automobili) dispone di k automobili, tutte disponibili per n giorni. Una stessa automobile può avere costo di affitto diverso in giorni diversi: indicheremo con c(a, g) il costo per il noleggio dell automobile a nel giorno g, dove 1 a k e 1 g n. Un cliente si rivolge alla CINA per procurarsi un mezzo di locomozione per l intero periodo (giorni da 1 a n, estremi inclusi). Per risparmiare e sfruttare i prezzi di noleggio migliori in ogni giornata il cliente è disposto a cambiare macchina da un giorno all altro. Per ottenere un cambio, però, è costretto dalla CINA a pagare una penale P, che si aggiunge al costo di noleggio. Il costo di una sequenza di noleggio è quindi dato dalla somma dei costi di noleggio e delle penali pagate per i cambi. Dati k, n, i costi c(a, g) e la penale P : 1. Calcolare il numero di possibili sequenze di noleggio diverse. 2. Scrivere un algoritmo che elenchi tutte le possibili sequenze di noleggio. Una sequenza di noleggio è un vettore di n numeri (v 1, v 2,... v n ) tale che per ogni i 1,... n, 1 v i k rappresenta il numero dell auto noleggiata nel giorno i. 3. Scrivere un algoritmo che calcoli la sequenza di noleggio di costo minimo, nell ipotesi in cui la penale P sia pari a zero. 4. Proporre un algoritmo che in tempo O(nk 2 ) calcoli la spesa minima per il cliente tra tutte le possibili sequenze di noleggio, assumendo una penale P > 0 (Suggerimento: usare la programmazione dinamica); 5. Modificare l algoritmo proposto al punto precedente in modo da avere in output la sequenza di noleggio di costo minimo. La modifica deve avere costo additivo O(nk). Soluzione 1. Il numero delle possibili sequenze di noleggio è k n. Quindi un eventuale algoritmo risolutivo che operi di forza bruta non sarebbe praticabile. 2. (Vedi programma Java) 3. In questo caso è possibile sviluppare una soluzione semplice: per ogni giorno, è sufficiente scegliere l auto che ha costo di noleggio minimo in quello specifico giorno. 4. Supponiamo che Cost(i, j) sia il costo minimo tra tutte le sequenze di noleggio durante i primi j giorni, che al giorno j-esimo usino l auto i, con 1 j n, e 1 i k. Considerando i noleggi solo per il primo giorno (j = 1), possiamo scrivere: Cost(i, 1) = c(i, 1), per ogni i = 1, 2,... k Nel caso di sequenze di noleggio che durano fino al giorno j, per j > 1, l acquirente ha a disposizione le seguenti alternative: 1
2 Può noleggiare la stessa audo i noleggiata nel giorno j 1. Il costo ottimo fino al giorno j 1 è Cost(i, j 1), a cui si somma il costo di noleggio della vettura i per il giorno j senza pagare alcuna penale. In tal caso si avrebbe: Cost(i, j) = Cost(i, j 1) + c(i, j) Può noleggiare un auto l i nel giorno j 1, e cambiare scegliendo l auto i nel giorno j. In tal caso il costo di noleggio Cost(i, j) diventa Cost(i, j) = Cost(l, j 1) + c(i, j) + P Il costo della sequenza ottima di noleggio Cost(i, j) che al giorno j usa l auto i sarà quindi il minimo tra le alternative descritte sopra, ossia: Cost(i, j) = mincost(i, j 1)+c(i, j), Cost(l, j 1)+c(i, j)+p per ogni l = 1, 2,... k, l i Il risultato del nostro problema, ossia il costo minimo tra tutte le sequenze di noleggio per tutti gli n giorni, è dato dal valore minimo dell ultima colonna della matrice Cost, ossia min Cost(i, n) 1 i k 5. Per determinare la sequenza che minimizza il costo di noleggio, una soluzione efficiente consiste nell utilizzare una matrice ausiliaria di dimensione k n che chiameremo prev(i, j), tale che prev(i, j) è l auto utilizzata il giorno j 1 per ottenere il costo Cost(i, j) al giorno j. La sequenza ottima di noleggio si ottiene ripercorrendo all indietro la matrice prev a partire dalla posizione nell ultima colonna che rappresenta l ultima vettura noleggiata; ricordiamo che l indice dell ultima vettura noleggiata è il valore di i che minimizza Cost(i, n). La soluzione con costo additivo O(nk) invece fa uso della sola tabella Cost(i, j) per calcolare la sequenza di noleggio, ripercorrendo la tabella a ritroso per ricostruire le scelte fatte. Consideriamo un semplice esempio con penale P = 0.5, k = 3, n = 4 e matrice dei costi giornalieri c(a, g) come segue: c(a, g) = Applicando l algoritmo descritto sopra, si ottiene la seguente matrice dei costi Cost(i, j): Cost(i, j) = e la seguente matrice prev: prev(i, j) = Il seguente programma Java risolve l esercizio proposto: / CINA.java calcola la sequenza ottima di noleggio. Questo programma risolve il problema 10.5 p. 275 di Demetrescu, Finocchi, Italiano, Algoritmi e strutture dati (seconda edizione ), McGraw Hill, Version 0.1 del 2010/02/24 Autore: Moreno Marzolla (marzolla (at) cs.unibo. it ) 2
3 This file has been released by the author in the Public Domain public class CINA int k; // numero di auto int n; // lunghezza del periodo, in giorni double c [][]; // C[i ][ m] e il costo di noleggio dell auto i nel giorno m double P; // penale da pagare per i cambi // tabella di programmazione dinamica: cost[ i,m] e il costo // minimo di tutte le sequenze di noleggio, fino al giorno m // compreso, che hanno l auto i come auto prenotata per il giorno // m double cost [][]; int prev [][]; // Assumendo di scegliere l auto i al giorno j, // prev[ i ][ j ] indica il numero di auto noleggiata il // giorno j 1 che consente di ottenere il costo // cost [ i ][ j ] dell intera sequenza di noleggio public CINA( int k, int n, double c [][], double P ) this.k = k; this.n = n; this.c = c; this.p = P; cost = new double[k][n]; prev = new int[k][n ]; Stampa il contenuto delle tabelle di programmazione dinamica. public void stampatabella( ) int i, j ; System.out. println ( cost[ i ][ j ] ); for ( i=0; i<k; ++i ) for ( j=0; j<n; ++j ) System.out. print (cost [ i ][ j]+ ); System.out. println (); System.out. println ( prev[ i ][ j ] ); for ( i=0; i<k; ++i ) for ( j=0; j<n; ++j ) System.out. print (prev[ i ][ j]+ ); System.out. println (); Stampa le informazioni di una singola sequenza di noleggio protected void stampasequenza( int s [] ) double tot=0.0; for ( int i=0; i<n; ++i ) System.out. print ( g= +i+ /a= +s[i]+ /c= +c[s[i]][i]+ ); tot += c[s[i ]][ i ]; if ( i>0 ) if (s[ i ]!= s[ i 1]) tot+=p; System.out. println ( Totale= +tot); 3
4 Data una sequenza di noleggio s [], modifica s [] per restituire la successiva sequenza di noleggio. Ritorno false se s [] era l ultima sequenza della serie, true altrimenti. public boolean incrementasequenza(int s [] ) int i=0; while( i<n && s[i] == k 1 ) s[ i ] = 0; ++i; if ( i<n ) s[ i ] += 1; return true; else return false ; Stampa tutte le possibili sequenze di noleggio public void stampatuttesequenze( ) int [] s = new int[n]; // s[ i ] indica l auto da noleggiare il giorno i int i ; int c=0; // numero di sequenze di noleggio // Inizializziamo la sequenza iniziale (0, 0,... 0) for ( i=0; i<n; ++i ) s[ i ] = 0; do ++c; stampasequenza(s); while(incrementasequenza(s)); System.out. println ( Ci sono +c+ sequenze di noleggio ); Stampa la sequenza ottima di noleggio, Prima di invocare questa funzione, e necessario aver invocato l operazione CalcolaSequenzaOttima(). public void stampasequenzaottima( ) int [] s = new int[n]; int imin = 0; double cmin = cost [0][ n 1]; for ( int tmp=1; tmp<k; ++tmp) if ( cost [tmp][n 1] < cmin ) cmin = cost[tmp][n 1]; s[n 1] = imin; for ( int j=n 2; j>=0; j) imin=prev[imin][ j+1]; s[ j]=imin; stampasequenza(s); Questa funzione calcola la sequenza ottima di noleggio, e restituisce il costo ottimo. public double CalcolaSequenzaOttima( ) 4
5 int i, j ; // inizializziamo la tabella. I costi al giorno 1 sono noti, e // sono pari al costo di noleggio delle vetture // // Quindi: cost [ i ][0] = c[i ][0] per ogni i=0..k 1 for ( i=0; i<k; ++i) cost [ i ][0] = c[i ][0]; prev[ i ][0] = 1; // non ci sono auto precedenti al giorno 0 // calcoliamo ora i valori degli altri elementi della tabella // di programmazione dinamica, procedendo una colonna alla // volta, da sinistra verso destra. // // Il costo minimo di tutte le sequenze di noleggio fino al giorno // j, che noleggiano l auto i al giorno j e dato dal minimo // tra i costi seguenti : // Il costo delle sequenze di noleggio che hanno l auto i anche // al giorno precedente j 1 (cost[ i ][ j 1]), sommato al costo // dell auto i al giorno j (c[ i ][ j ]). In questo caso non c e // altro da aggiungere, perche non si pagano penali // Il costo minimo considerando le sequenze di noleggio che // al giorno ( j 1) noleggiano un auto diversa da i, pagando // quindi una penale. Tale costo minimo sara // min per ogni l!= i cost [ l ][ j 1] + c[i ][ j ] + P // // L equazione e // cost [ i ][ j ] = min cost[ i ][ j 1] + c[i ][ j ], // cost [ l ][ j 1] + c[i ][ j ] + P per ogni l!=i for ( j=1; j<n; ++j) for ( i=0; i<k; ++i) int imin = i; // auto al giorno j 1 che minimizza il // costo al giorno j double cmin = cost[i ][ j 1]+c[i][ j ]; // costo minimo al giorno j for ( int tmp=0; tmp<k; ++tmp) if ( tmp!= i ) // il caso tmp == i e gia // stato considerato con // l inizializzazione di imin e // cmin if ( cost [tmp][j 1] + P + c[i][ j ] < cmin ) cmin = cost[tmp][j 1] + P + c[i][ j ]; imin = tmp; // riempiamo la entry della tabella di programmazione // dinamica. cost [ i ][ j ] = cmin; prev[ i ][ j ] = imin; // Il risultato finale e il minimo valore dell ultima colonn // della tabella di programmazione dinamica double cmin = cost [0][ n 1]; for ( int tmp=1; tmp<k; ++tmp) if ( cost [tmp][n 1] < cmin ) cmin = cost[tmp][n 1]; return cmin; public static void main( String [] args ) 5
6 double [][] c = 1, 1, 1, 2, 0.5, 1, 7, 4, 0.9, 1.2, 0.1, 10 ; CINA solver = new CINA(3, 4, c, 0.5); System.out. println ( Elenco di tutte le sequenze di noleggio ); solver.stampatuttesequenze(); System.out. println ( \ncosto sequenza di noleggio ottima ); System.out. println ( solver.calcolasequenzaottima()); System.out. println ( \ntabelle di programmazione dinamica ); solver.stampatabella(); System.out. println ( \nsequenza di noleggio ottima ); solver.stampasequenzaottima(); Problema basato sul problema 10.7 del libro di testo Si supponga di avere n files F 1, F 2,... F n in cui il file i occupa w(f i ) MB. Supponiamo che tutti i w(f i ) siano interi (ossia, ciascun file occupa un multiplo intero di un MB). Vogliamo individuare, se esiste, un sottoinsieme S di F 1, F 2,... F n tale che la dimensione dei files presenti in questo sottoinsieme sia esattamente pari a 650MB: w(f ) = 650 F S In caso tale sottoinsieme S esista, vogliamo anche sapere quali sono i files che vi appartengono. Soluzione Consideriamo una matrice B(i, j) tale che ogni elemento della matrice sia un valore booleano (vero o falso). In particolare, B(i, j) è vero se e solo se esiste un sottoinsieme di files S di F 1, F 2,... F i la cui dimensione totale sia esattamente pari a j; ossia: w(f ) = j F S Per definizione si ha che B(1, w(f 1 )) = true e B(i, 0) = true per ogni i = 1, 2,... n (il sottoinsieme vuoto ha dimensione zero). Inoltre risulta B(i, j) = B(i 1, j) B (i 1, j w(f i )) La spiegazione è la seguente: esiste un sottoinsieme S di F 1, F 2,... F i la cui dimensione è j se vale una tra le seguenti proprietà esiste un sottoinsieme S di F 1, F 2,... F i 1 tale che F S w(f ) = j. In tal caso S = S è la soluzione e il file F i non ne fa parte. esiste un sottoinsieme S di F 1, F 2,... F i 1 tale che F S w(f ) = j w(f i). In tal caso la soluzione al nostro problema è S = S F i, e il file F i fa parte di S. Questo suggerisce di calcolare la matrice B utilizzando la programmazione dinamica. Si presti attenzione che l indice j w(f j ) potrebbe diventare negativo. In tal caso si assume che il corrispondente valore B (i 1, j w(f i )) sia falso. Una volta calcolata la matrice B(i, j) per ogni i = 1, 2,... n e j = 0, , possiamo concludere the esiste un sottoinsieme di files la cui dimensione totale è 650MB se e solo se B(n, 650) ha valore true. Per determinare anche quali sono i files che fanno parte della soluzione (se esiste), è necessario usare un altra matrice booleana P (i, j), tale che P (i, j) vale true se e solo se il file i-isimo appartiene ad un sottoinsieme S di F 1, F 2,... F i la cui dimensione totale è pari a j (cioè F S w(f ) = j). Durante la costruzione di B(i, j) è possibile costruire la matrice P (i, j). L elenco dei files che appartengono alla soluzione può essere visualizzata con il seguente pseudocodice: 6
7 d:=650; i:=n; while (d>0) do if ( P(i,d) ) then stampa i; d := d - w(f_i); endif i := i-1; endwhile / Copiatutto. java determina se un insieme di files la cui dimensione complessiva e 1300MB puo essere suddivisa in due CDRom da 650MB ciascuno, e in caso affermativo stampa la suddivisione. Questo programma risolve il problema 10.7 p. 275 di Demetrescu, Finocchi, Italiano, Algoritmi e strutture dati (seconda edizione ), McGraw Hill, Version 0.1 del 2010/02/24 Autore: Moreno Marzolla (marzolla (at) cs.unibo. it ) This file has been released by the author in the Public Domain public class Copiatutto int [] w; // w[i ] e la dimensione ( in MB) del file i esimo int n; // numero di files boolean [][] B; // B[i ][ j ] = true sse e possibile riempire j MB di // spazio usando un sottoinsieme dei files 0, //... i boolean [][] P; // P[i ][ j ] = true sse il file i e nell insieme di // files la cui dimensione complessiva e j public Copiatutto( int w[] ) this.w = w; this.n = w.length; B = new boolean[n][651]; P = new boolean[n][651]; Stampa la lista dei files la cui dimensione complessiva e pari a 650MB. public void stampasoluzione( ) if (!B[n 1][650] ) return ; // non esiste soluzione int d=650; int i=n 1; System.out. println ( I seguenti files sono sul primo CD ROM ); while( d>0 ) if ( P[i ][ d] ) System.out. print ( i+ (s= +w[i]+ ) ); d =w[i]; i=i 1; System.out. println (); Risolve il seguente problema: dati n files le cui dimensioni 7
8 sono w[0], w[1],... w[n 1], esiste un sottoinsieme di tali files la cui dimensione sia esattamente pari a 650? Notare che se la dimensione complessiva di tutti i files e 1300MB, allora se questa funzione restituisce true e possibile copiare i files su due CDRom da 650MB senza spezzare nessun file. public boolean solve( ) int i, j ; // Inizializza B a false for ( i=0; i<n; ++i ) for ( j=0; j<651; ++j ) B[i ][ j ] = false ; P[i ][ j ] = false ; B[i ][0] = true; // Inizializza B[0][ w[0]] a true B[0][w[0]] = true; P [0][ w[0]] = true; for ( i=1; i<n; ++i ) for ( j=0; j<651; ++j) if ( B[i 1][j ] ) B[i ][ j ] = true; else if ( j >= w[i] && B[i 1][j w[i]] ) B[i ][ j ] = true; P[i ][ j ] = true; // aggiungi il file i esimo // alla soluzione // Restituisce la risposta return B[n 1][650]; public static void main( String [] args ) // Attenzione, la somma delle dimensioni NON e 1300MB; // l implementazione restituisce comunque true, poiche // risolve il problema che consiste nel trovare un sottinsieme // di files la cui dimensione complessiva e 650MB. int w[] = 330, 100, 310, 10, 80, 10 ; Copiatutto problema = new Copiatutto(w); if ( problema.solve ()) problema.stampasoluzione(); else System.out. println ( Il problema non ammette soluzione ); 8
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
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
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
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
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
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,
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera
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
Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza
Il problema di flusso di costo minimo (MCF) Dati : grafo orientato G = ( N, A ) i N, deficit del nodo i : b i (i, j) A u ij, capacità superiore (max quantità di flusso che può transitare) c ij, costo di
Esercizi Capitolo 6 - Alberi binari di ricerca
Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile
Programmazione dinamica
Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)
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
Algoritmi e Strutture Dati
Elementi di Programmazione Dinamica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema La CMC produce automobili in uno stabilimento
LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B
LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
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/
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
4. Operazioni elementari per righe e colonne
4. Operazioni elementari per righe e colonne Sia K un campo, e sia A una matrice m n a elementi in K. Una operazione elementare per righe sulla matrice A è una operazione di uno dei seguenti tre tipi:
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
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
Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
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
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
4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
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
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
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.
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
Introduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione
RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3
RICORSIVITA 1. Cos è la ricorsività? La ricorsività è un metodo di soluzione dei problemi che consiste nell esprimere la soluzione relativa al caso n in funzione della soluzione relativa al caso n-1. La
Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};
ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca
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
RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007
RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007 Rispondere alle seguenti domande marcando a penna la lettera corrispondente alla risposta ritenuta corretta (una sola tra quelle riportate). Se
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
Le variabili. Olga Scotti
Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.
ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];
ARRAY BIDIMENSIONALI Si possono definire array di qualunque tipo di dato, quindi anche di altre array float [][] mx = new float[3][4]; ovvero.. (float []) [] mx = new float[3][4]; La loro motivazione (storica)
Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante
Esercizio 0 Scambio lettere Scrivere la funzione void scambiolettere(char *dest, char *lettere, int p_o_d) che modifichi la stringa destinazione (dest), sostituendone i caratteri pari o dispari (a seconda
Verifica della correttezza formale del numero di partita IVA
Verifica della correttezza formale del numero di partita IVA A tutti i soggetti che intraprendono un attività rilevante ai fini Iva (impresa, arte, professione), al momento della presentazione della dichiarazione
NOZIONI BASE SHELL E SCRIPT LINUX
NOZIONI BASE SHELL E SCRIPT LINUX Aggiornato al 11 gennaio 2006 Ermes ZANNONI ([email protected]) (http://www.zannoni.to.it) Indice : 1. Introduzione 2. La Shell 2.1 Comandida Shell 2.1.1 File e directory
Esercizi della lezione 5 di Java
Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore
Sottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
Programmazione ad Oggetti: JAVA. Esercitazione
Programmazione ad Oggetti: JAVA Esercitazione Docente Ing. Mariateresa Celardo [email protected] Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore
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
INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI
INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
Esercizi per il corso di Algoritmi e Strutture Dati
1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi
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");
Semantica Assiomatica
Semantica Assiomatica Anche nella semantica assiomatica, così come in quella operazionale, il significato associato ad un comando C viene definito specificando la transizione tra stati (a partire, cioè,
Alberi binari di ricerca
Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario
Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di
Esercitazione n 4. Obiettivi
Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:
Il tipo di dato astratto Pila
Il tipo di dato astratto Pila Il tipo di dato Pila Una pila è una sequenza di elementi (tutti dello stesso tipo) in cui l inserimento e l eliminazione di elementi avvengono secondo la regola seguente:
La selezione binaria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per
Prova di Laboratorio di Programmazione
Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare
Un esercizio d esame. Flavio De Paoli
Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg
Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
Laboratorio di Informatica Lezione 2
Laboratorio di Informatica Lezione 2 Cristian Consonni 30 settembre 2015 Cristian Consonni Laboratorio di Informatica, Lezione 2 1 / 42 Outline 1 Commenti e Stampa a schermo 2 Strutture di controllo 3
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione
Ottava Esercitazione. introduzione ai thread java mutua esclusione
Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione
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
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E04 Esempi di algoritmi e programmi C. Limongelli - A. Miola Novembre 2011 1 Contenuti q Somma di una sequenza di numeri interi
4.1 Modelli di calcolo analisi asintotica e ricorrenze
4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...
Parte 1. Vettori di bit - AA. 2012/13 1.1
1.1 Parte 1 Vettori di bit 1.2 Notazione posizionale Ogni cifra assume un significato diverso a seconda della posizione in cui si trova Rappresentazione di un numero su n cifre in base b: Posizioni a n
Traccia di soluzione dell esercizio del 25/1/2005
Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello
Corso di Tecniche di Programmazione
Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe De Giacomo, Luca Iocchi, Domenico Lembo Dispensa : Algoritmi di Ordinamento
Dimensione di uno Spazio vettoriale
Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione
ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma
Calcolabilità problemi facili trovare la media di due numeri stampare le linee di un file che contengono una parola problemi difficili trovare il circuito minimo data una tabella determinare la migliore
Esercizi Capitolo 5 - Alberi
Esercizi Capitolo 5 - Alberi 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
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
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità
Struttura di un programma Java
Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che
Tipi di Dato Ricorsivi
Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi
TSP con eliminazione di sottocicli
TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 7-8 9 7 9-8 79
Descrizione di un algoritmo
Descrizione di un algoritmo Un algoritmo descrive due tipi fondamentali di oper: calcoli ottenibili tramite le oper primitive su tipi di dato (valutazione di espressioni) che consistono nella modifica
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
Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali
a Visual Basic Lezione 1 Concetti base e istruzioni condizionali Mario Alviano Introduzione all informatica Università della Calabria http://alviano.net/introinfo A.A. 2008/09 Introduzione Un esempio:
Sequenziamento a minimo costo di commutazione in macchine o celle con costo lineare e posizione home (In generale il metodo di ottimizzazione
Sequenziamento a minimo costo di commutazione in macchine o celle con costo lineare e posizione home (In generale il metodo di ottimizzazione presentato in questo file trova la seq. a costo minimo per
Prova d Esame 07.04.2006 Compito A
DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public
Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)
Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni
GESTIONE INFORMATICA DEI DATI AZIENDALI
GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy [email protected] Rudimenti di programmazione Programming
Testi di Esercizi e Quesiti 1
Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica
Esercizi sull Association Analysis
Data Mining: Esercizi sull Association Analysis 1 Esercizi sull Association Analysis 1. Si consideri il mining di association rule da un dataset T di transazioni, rispetto a delle soglie minsup e minconf.
Introduzione alla tecnica di Programmazione Dinamica
Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/37 Sommario della lezione Introduzione alla tecnica di Programmazione Dinamica Esempio di applicazione n. 1:
Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.
Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella [email protected] Prestazioni Si valutano in maniera diversa a seconda dell
Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015
Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015 Chi deve recuperare il progetto del modulo 1 ha 1 ora e 30 minuti per svolgere gli esercizi 1, 2, 3 Chi deve recuperare
Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)
Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando) Le basi della programmazione ad oggetti: per costruire in modo adeguato una applicazione basata sulla programmazione ad oggetti occorre
Esercizi su lineare indipendenza e generatori
Esercizi su lineare indipendenza e generatori Per tutto il seguito, se non specificato esplicitamente K indicherà un campo e V uno spazio vettoriale su K Cose da ricordare Definizione Dei vettori v,,v
Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza
Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.
Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo. public abstract class FiguraPiana2{ private double base; public FiguraPiana2(double
EXCEL FUNZIONI PRINCIPALI
EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")
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
I file di dati. Unità didattica D1 1
I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità
1 Giochi a due, con informazione perfetta e somma zero
1 Giochi a due, con informazione perfetta e somma zero Nel gioco del Nim, se semplificato all estremo, ci sono due giocatori I, II e una pila di 6 pedine identiche In ogni turno di gioco I rimuove una
(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)
(Esercizi Tratti da Temi d esame degli ordinamenti precedenti) Esercizio 1 L'agenzia viaggi GV - Grandi Viaggi vi commissiona l'implementazione della funzione AssegnaVolo. Tale funzione riceve due liste
