Ricerca lineare: elementi ripetuti

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Ricerca lineare: elementi ripetuti"

Transcript

1 Ricerca lineare: elementi ripetuti Ricerca lineare: elementi ripetuti II caso. Supponiamo che gli elementi di A non siano tutti distinti tra loro e che vogliamo conoscere dove si trova l elemento: dovremo allora determinare il valore di tutti gli indici i per i quali si ha: a i = b Analisi. Cosa dobbiamo cambiare nell algoritmo? Ricerca lineare: elementi ripetuti La struttura iterativa dovrà proseguire fino alla fine della sequenza e non interrompersi con il primo valore trovato. Pertanto la variabile trovato non sarà più necessaria e rimarrà unicamente la condizione di esaminare tutti gli elementi dell array: il ciclo while dovrà essere sostituito con un ciclo for. Inoltre abbiamo bisogno di memorizzare i valori degli indici: pertanto utilizziamo un array. Ricerca lineare: elementi ripetuti Chiamiamo posiz l array che conterrà i valori degli indici. L array sarà di tipo intero (memorizziamo indici di array) e avrà la stessa dimensione dell arraya (gli elementi potrebbero essere tutti uguali). Scriviamo una variante dell algoritmo di ricerca lineare. Alla definizione delle variabili si dovrà aggiungere la definizione di una variabile k, indice dell arrayposiz. Ricerca lineare: elementi ripetuti Quando si memorizza un valore nell array posiz (ogni volta che il confronto a[i]==b è vero), si dovrà incrementare l indice k. Dobbiamo anche dare una risposta al caso non trovato. Dal momento che non abbiamo più la variabile trovato, dovremo esprimere il significato di elemento non presente mediante un altra variabile. Ricerca lineare: elementi ripetuti La variabile k viene inizializzata a 0; pertanto se k non varia dal suo valore iniziale significa che l elemento non è presente. Vediamo ora il progetto dell algoritmo. Algoritmo ricerca2 definizione variabili: a[100], b intero posiz[100], k, n, i //acquisire e stampare valori per b, n e a intero 1

2 Ricerca lineare: elementi ripetuti k 0 per i da primo a ultimo eseguire se a[i] == b allora k k+1 posiz[k] i //finescelta //fineciclo se k==0 allora stampa elemento non presente altrimenti stampare i primi k valori dell array posiz: posiz[1],, posiz[k] //finescelta Ricerca lineare: elementi ripetuti Codifica e implementazione. Scegliere i valori per primo e ultimo: acquisire i dati iniziando con l indice 0 oppure 1. La struttura iterativa da usare è il ciclo for (coerente con i valori scelti per primo e ultimo). Ricerca lineare: elementi ripetuti Esercizio: tradurre in C++ il progetto di algoritmo e scegliere dei casi di prova significativi: elemento non presente (posiz è vuoto) elemento presente al primo e all ultimo posto elementi tutti uguali (posiz contiene tutti gli indici di a) elemento presente una, due, volte in posizioni alterne. Eseguire la verifica con valori noti. Ricerca lineare: array ordinato III caso. Supponiamo ora che gli elementi dell array siano ordinati. Vediamo come cambia l algoritmo di ricerca. Analisi. Essendo gli elementi ordinati, ha senso solo considerare il caso di elementi distinti (gli eventuali elementi ripetuti sarebbero consecutivi e non distribuiti nell array): a primo < < a i < a i+1 <. < a ultimo Ricerca lineare: array ordinato Per prima cosa si deve verificare se la ricerca è compatibile con i dati; ha senso eseguire la ricerca solo se: a primo b a ultimo La struttura iterativa, vista nel primo algoritmo, cambia nuovamente, per tenere conto di questa nuova ipotesi di dati ordinati. Ricerca lineare: array ordinato Dato l ordinamento, se si trova un valore dell indice i per il quale si ha b < a i allora è inutile proseguire. Esempio. b=7 a= (1, 3, 6, 9, 11, 23, 45, 56, 57, 70, 102) dopo il confronto con il valore 9, i successivi confronti sono inutili (le operazioni inutili non si devono eseguire). 2

3 Ricerca lineare: array ordinato Consideriamo l algoritmo ricercalineare: l iterazione aveva le due istruzioni passare al successivo confronto a[i] == b Tale iterazione viene così modificata: se a i < b allora passare al successivo altrimenti se a i == b allora trovato vero altrimenti non è più trovabile Ricerca lineare: array ordinato Nel caso in cui non sia più trovabile, dobbiamo interrompere la ricerca. Possiamo usare ancora una variabile booleana: stabiliamo che il suo valore è vero, se la ricerca è possibile, e il suo valore diventa falso se a i > b. Il predicato è composto: tre predicati uniti con and. Esercizio: codifica e implementazione. Esercizi sull uso di cicli e array Problema1. Dati n numeri (distinti oppure no) a 1, a 2, a n determinare quanti sono minori di a 1. Analisi. Dobbiamo esaminare tutti gli elementi a partire dal secondo e quando un elemento verifica la condizione: a[i] < a[1] allora si incrementa un contatore. Esercizi sull uso di cicli e array Codifica..... //acquisire e stampare a[1],... a[n] int cont =0; for(i = 2; i <= n; i++) if(a[i]<a[1]) cont++; //fine if e fine for cout<<"ci sono "<< cont << " numeri piu piccoli di " <<a[1]<<endl;.... Esercizi sull uso di cicli e array Casi di prova. 1. a 1 è il più piccolo cont = 0 2. a 1 è il più grande cont = n-1 3. caso medio con a 1 che compare 2, 3,.. volte 4. elementi tutti uguali ad a 1 cont = 0 Esercizio. Implementare l algoritmo eseguire i casi di prova; provare a sostituire < con <= e vedere se e come cambia il valore di cont. Esercizi sull uso di cicli e array Problema2. Dati n numeri a 1, a 2,, a n determinare quanti sono minori di a 1, a 2,, a n Analisi. Ripetiamo ciò che è stato fatto per a 1 anche per gli altri elementi: quindi avremo una struttura iterativa che esamina gli n elementi e al suo interno una struttura iterativa analoga a quella del Problema1. Avendo bisogno di vari contatori, uno per ogni elemento dell array a, conviene utilizzare un array di contatori (di tipo intero e con dimensione uguale a quella di a). 3

4 Esercizi sull uso di cicli e array Codifica. for(int k = 1; k <= n; k++){ //contare quanti sono minori di a[k] cont[k] =0; for(int i = 1; i <= n; i++) if(a[i]<a[k]) cont[k] = cont[k]+1; //fine if }//fine for esterno //ciclo di stampa: ci sono << cont[i] << numeri piu piccoli di << a[i]; //i = k confronto inutile, ma conviene... Esercizi sull uso di cicli e array Casi di prova. 1. elementi distinti in ordine crescente il valore dei contatori sarà: 0,1, 2,, n-1 2. elementi distinti in ordine decrescente il valore dei contatori sarà: n-1, n-2,, 0 3. elementi tutti uguali tra loro e minori di un a i 4. caso medio con valori diversi Esercizio. Implementare l algoritmo eseguire i casi di prova; provare a sostituire < con <=. Complessità degli algoritmi L'efficienza di un algoritmo si valuta in base all'utilizzo che l'algoritmo fa delle risorse del calcolatore: CPU Memoria tempo spazio Algoritmi diversi, pur occupando lo stesso spazio, possono richiedere tempi diversi: due algoritmi richiedono l utilizzo di un array, ma uno richiede la scansione di tutto l array, e impiega un tempo t 1, l altro richiede la scansione solo di una parte dell array, e impiega un tempo t 2 <t 1. Si preferisce valutare l'efficienza in base al tempo impiegato per risolvere il problema. Come si può misurare il tempo impiegato dall algoritmo? Con un cronometro? Ogni linguaggio ammette delle funzioni per calcolare il tempo: in alcuni si accede ad un orologio della macchina; spesso viene fornito un tempo calcolato in secondi o millisecondi e viene indicato il tempo trascorso a partire da una data fissa. (Cap. 5) In questo caso per calcolare il tempo si effettuano due successive chiamate della funzione tempo e si fa la differenza tra le due misure di tempo ottenute. È una buona misurazione? Lo è solo in parte; non lo è in senso assoluto. 4

5 Infatti il tempo misurato in tale modo dipende: dal calcolatore usato dal linguaggio usato dai dati che sono elaborati in quel momento. Non ha perciò senso dire che l algoritmo di ricerca impiega 10 sec. ; il tempo dipende anche da fattori estranei all algoritmo. Se vogliamo confrontare algoritmi che risolvono lo stesso problema misurando il tempo che impiegano, dovremo: usare la stessa macchina usare lo stesso linguaggio usare gli stessi dati. Si potrà costruire un array di dati abbastanza grande; tale vettore sarà l unico ingresso per confrontare algoritmi che risolvono quel problema in prove eseguite sullo stesso calcolatore e con lo stesso linguaggio. Come possiamo stimare il tempo per l algoritmo in modo da avere una misura assoluta, vale a dire, una misura che dipenda solo dall algoritmo? Osserviamo che il tempo di esecuzione è una funzione crescente della dimensione dei dati di ingresso. Esempio. Sommare n numeri dove n può assumere i valori n = 10, 1000, Il tempo per calcolare la somma aumenta con n n + T(n) + Non per tutti gli algoritmi è così: nell algoritmo che calcola il massimo tra due numeri, in quello che calcola l area del trapezio, nell algoritmo che esegue delle prove sul troncamento della divisione tra interi, i dati di ingresso sono una quantità fissa e non variano di dimensione. Nel calcolo della somma e del massimo su n dati, nell algoritmo di ricerca, andiamo ad acquisire il valore di n e gli n valori dell array: la dimensione dei dati varia con n. Osserviamo che il numero dei dati di ingresso fa variare il numero di operazioni: n = 10 l algoritmo esegue 10 somme n = l algoritmo esegue somme Si chiama complessità computazionale la funzione F(n) che calcola il numero di operazioni eseguite dall algoritmo: n N dimensione dei dati di ingresso F(n) numero di operazioni n + F(n) + Ha interesse sapere come la funzione F(n) cresce, vale a dire quale è il suo ordine di infinito. 5

6 Confrontiamo le due funzioni y = x e y = x 2 osservando i valori che assumono per x = 5, 10, 100 x y = x y = x intuiamo che y=x 2 tende a + più rapidamente di y=x; y=x 2 ha un ordine di infinito maggiore di y=x. Quali sono le operazioni che un algoritmo esegue? operazioni elementari assegnazioni (accesso e assegnamento) confronti lettura/scrittura invocazione di funzioni (passaggio parametri e gruppi di istruzioni all interno della funzione) strutture di controllo Dobbiamo sommare i tempi delle varie istruzioni, in tale modo troviamo il tempo totale. Si valuta un tempo t a (assegnazione) e t c (confronto) indipendentemente dalla semplicità o meno dell espressione. Non dobbiamo però essere così possiamo fare delle semplificazioni. Le operazioni fondamentali sono: confronti e assegnazioni precisi: Si può anche calcolare il numero di accessi eseguiti per alcune variabili fondamentali nell algoritmo: contare quante volte la variabile compare in un confronto o in un assegnazione. Assegnazione. 1) a = 25; 2) a = sqrt(3*sin(x) + cos(y)/7); Queste due assegnazioni necessitano di due tempi diversi e sicuramente sarà: t 1 < t 2 perché l espressione 2) richiede più calcoli. Indichiamo con t a assegnazione. il tempo per una Sequenza di assegnazioni. <a 1 > <a 2 > k costante. <a k > non dipende da n il numero di istruzioni Sommiamo i tempi: k t a ~ t a k non dipende da n Se abbiamo due funzioni F 1 (n) F 2 (n) con lo stesso ordine di infinito, può essere importante stimare anche il valore di k. 6

7 Struttura condizionale. se P allora <a1> altrimenti <a2> //finese <a1> e <a2> rappresentano gruppi di istruzioni Il predicato P potrà essere: 1) a<b 2) (a<b) o (non S) e ((a==c) o (c!=h) Certamente si avrà t 1 < t 2 ma consideriamo t p il tempo per valutare un predicato. Avremo t p + t a1 t p + t a2 Se <a1> e <a2> non dipendono da n (sequenza di istruzioni) t p + t a1 ~ t p + t a2 ~ t p abbiamo un numero costante di operazioni, come nell algoritmo del max(a,b). Quali sono le strutture che variano con n? Quando eseguiamo una scansione di un array (lettura, stampa, somma, ricerca, ) consideriamo un numero n (n>0) di dati di ingresso. Struttura iterativa. Consideriamo un ciclo con incremento fisso e passo 1: per i da 1 a n eseguire iterazione //indipendente da n //fineper Indichiamo con t p il tempo per il predicato e con t i il tempo per l'iterazione (per ora indipendente da n): Avremo: t p : eseguito n+1 volte (n volte con P vero, 1 volta con P falso) t i : eseguito n volte (n+1) t p + n t i ~ n c c = costante: costo dell'iterazione: (n+1) t p + n t i = n t p + t p + n t i n t p + n t p + n t i = 2n t p + n t i = n ( 2 t p + t i ) = n c (n > 0 quindi n 1) Cosa cambia se anche l iterazione dipende da n? Supponiamo che l iterazione sia un ciclo dello stesso tipo, che viene eseguito n volte: 1. per i da 1 a n eseguire 2. per k da 1 a n eseguire iterazione //fineper //fineper (n+1) t p1 + ((n+1) t p2 + n t i ) n = = (n+1) t p1 + ((n+1) t p2 ) n + n 2 t i 2n t p1 + 2n t p2 n + n 2 t i n 2 (2 t p1 + 2 t p2 + t i ) = n 2 c avendo considerato: n+1 2n, 2n 2n 2 con n naturale (positivo) c= costante : costo dell'iterazione 7

8 Consideriamo delle funzioni di riferimento e calcoliamo la complessità degli algoritmi confrontandola con queste funzioni. y = log x y = x y = x log x y = x 2 y = 2 x y = e x y = x 2 e y = 2 x si incontrano per x=2 e x=4 Notazione O (o-grande), Ω, Θ. Ci interessa sapere come cresce F(n) al crescere di n, sempre nell ipotesi che F(n) + quando n + Sia f(n) la funzione di complessità che cerchiamo. Si dice che f(n) è O(g(n)) se c, n 0 > 0 n n 0 f(n) c g(n) Come ordine di infinito f non cresce più di g. Se f(n) = O(g(n)) significa che g(n) è una limitazione superiore per f(n): il calcolo esatto di f(n) è troppo complicato e ci limitiamo a stimarne una limitazione superiore. Esempio. n 2 + n è O(n 2 ) infatti: n 2 + n n 2 + n 2 = 2 n 2 Sia f(n) la funzione di complessità che cerchiamo. Si dice che f(n) è Ω(g(n)) se c, n 0 > 0 n n 0 c g(n) f(n) Come ordine di infinito f cresce almeno quanto g; g(n) è una limitazione inferiore per f(n). Esempio. n 2 + n è Ω(n) infatti: 2n = n + n n 2 + n Sia f(n) la funzione di complessità che cerchiamo. Si dice che f(n) èθ(g(n)) se c 1, c 2, n 0 > 0 n n 0 c 1 g(n) f(n) c 2 g(n) Come ordine di infinito f cresce quanto g. Esempio. n 2, 1000 n 2, 1/100 n 2 sono tutte Θ(n 2 ) varia solo la costante moltiplicativa. 8

9 Classi di complessità Quando scriviamo un algoritmo, vogliamo stimare la sua complessità cercando di individuare la funzione g(n) che approssima f(n). In tale modo gli algoritmi vengono suddivisi in classi di complessità: costanti k (non dipendono da n) logaritmo log n, log 2 n lineari n n log n polinomiali n k k = 2, 3, esponenziali n!, a n, n n a 0, 1 Casi di prova per stimare la complessità Quando si scrive un algoritmo si deve sempre dare una stima della limitazione superiore. È opportuno dare una stima della limitazione inferiore e sarebbe importante stimare anche un comportamento medio tra le due stime, ma questo spesso è difficile. O(g) limitazione superiore: sono richieste al più g(n) operazioni Ω(g) limitazione inferiore: sono richieste almeno g(n) operazioni. Casi di prova per stimare la complessità Casi di prova. Caso peggiore: i dati sui quali l algoritmo richiede il massimo numero di operazioni. Caso favorevole: i dati sui quali l algoritmo richiede il minor numero di operazioni. Caso medio: i dati che richiedono un numero medio di operazioni. Nel calcolo della complessità non si considerano i cicli per acquisire i dati: sono uguali per tutti gli algoritmi e sono Θ(n). ricerca lineare Caso I: elementi distinti. i 0 trovato falso mentre i n e non trovato eseguire i i+1 se a[i] == b allora trovato vero //fine //fine se trovato allora stampa trovato al posto i altrimenti stampa elemento non presente //fine ricerca lineare Caso favorevole. Si ha quando a[1] = b: primo elemento dell array: 2t a + t p + t a + t c + t a + t p + t c + t stampa inizio V i i+1 a[i] == b trovato F se risultato la funzione non dipende da n, quindi è costante: Ω(1) è il caso con il minimo numero di operazioni. ricerca lineare Caso peggiore. Si ha quando il ciclo viene eseguito fino in fondo. 1) l elemento non c è: 2t a + (n+1) t p + nt a + nt c + t c + t stampa inizio predicato i i+1 a[i] == b se risultato la funzione è del tipo c n, quindi O(n). 9

10 ricerca lineare 2) l elemento c è ed è l ultimo: a[n] = b 2t a + (n+1) t p + nt a + nt c + t a + t c + t stampa inizio predicato i i+1 a[i] == b trovato se risultato la funzione è del tipo c n, quindi O(n). Il massimo numero di operazioni è dato da una funzione lineare. ricerca lineare Caso II: elementi ripetuti. k 0 per i da 1 a n eseguire se a[i] == b allora k k+1 posiz[k] i //finescelta //fineciclo se k==0 allora stampa elemento non presente altrimenti stampare i primi k valori dell array posiz: posiz[1],, posiz[k] ricerca lineare La struttura iterativa for ( per ) viene eseguita sempre completamente. Caso peggiore. Gli elementi sono tutti uguali a b: ogni volta si assegna un valore a posiz t a + (n+1)t p + nt c + 2nt a + t c + t stampa O(n) Caso favorevole. L elemento non c è: il numero di assegnazioni è 0 t a + (n+1)t p + nt c + t c + t stampa Ω(n) Pertanto la complessità è: Θ(n) ricerca lineare Caso III. Ricerca su dati ordinati. La complessità è: Ω(1) nel caso favorevole (primo elemento) ed è O(n) nel caso peggiore (ultimo o mancante). Esercizio. Dimostrare l affermazione precedente. Con un array ordinato si ha anche un altro algoritmo che non esamina tutti gli elementi. Ricerca binaria (dicotomica) Supponiamo di cercare un nome in un elenco ordinato di nomi: vocabolario, elenco telefonico. Sfruttiamo l ordine lessicografico (alfabetico) e incominciamo a dividere l elenco in due parti pensando alla iniziale del nome, poi alla lettera successiva,... non iniziamo dalla prima parola dell elenco se cerchiamo un nome che inizia per M. Analogamente se pensiamo dei numeri appartenenti ad un intervallo sulla retta. Ricerca binaria (dicotomica) Analisi. Consideriamo l array a = (a 1, a 2, a n ) a 1 a im a n con im = (1+n)/2 indice di mezzo Esaminiamo a im : se b = a im allora abbiamo trovato l elemento, altrimenti vediamo se risulta b<a im oppure b>a im e proseguiamo la ricerca solo nella parte possibile. 10

11 Ricerca binaria (dicotomica) Caso b < a im Gli elementi di destra non si guardano a 1 b a im a n Caso b > a im Gli elementi di sinistra non si guardano a 1 a im b a n Ricerca binaria (dicotomica) Indichiamo con is e id gli estremi della parte di array che stiamo guardando: a is b a id. Tali valori vengono inizializzati con i valori della prima e dell ultima componente (prima =0,1; ultima = n-1, n). Si confronta b con a im e se risulta a im b cambiamo il valore degli estremi is e id; questo è il modo per non guardare più una parte di array: se b < a im cambierà id se b > a im cambierà is Perciò il valore di id diminuisce e quello di is aumenta: per proseguire la ricerca dovrà essere sempre is id. Ricerca binaria (dicotomica) Vediamo con un esempio che questo meccanismo funziona : a = ( 1, 5, 6, 8, 11, 15) n = 6 b = 5 1) is = 1 id = 6 im = (1+6)/2 = 7/2 = 3 a im = a 3 = 6 e 6 5 a im > b id varia e assume il valore im-1: id=2 2) is = 1 id = 2 im = (1+2)/2 = 3/2 = 1 a im = a 1 = 1 e 1 5 a im < b is varia e assume il valore im+1: is=2 3) a im = a 2 = 5 e 5=5 trovato= vero Ricerca binaria (dicotomica) Algoritmo ricerca binaria definizione variabili a array, b intero n, is, id, im intero trovato logico acquisire e stampare n, a, b se a[1] <= b e b <= a[n] allora //eseguire la ricerca is 1 id n trovato falso Ricerca binaria (dicotomica) mentre non trovato e is <= id eseguire im (is+id)/2 se a[im] == b allora trovato vero altrimenti //scegliere dove proseguire se b < a[im] allora id im-1 altrimenti is im+1 //finese //finese //finementre Ricerca binaria (dicotomica) se trovato allora stampa trovato al posto im altrimenti non trovato //finese altrimenti stampa b è esterno ad a //finese //fine algoritmo Calcoliamo la complessità di questo algoritmo. 11

12 ricerca binaria Il primo confronto a[1] <= b e b <= a[n] viene eseguito per verificare se è oppure no possibile eseguire la ricerca: nel caso in cui questo predicato fosse falso, non si esegue l algoritmo. Questo non viene considerato come caso favorevole, perché di fatto l algoritmo non inizia nemmeno. ricerca binaria Caso favorevole. L elemento viene trovato con un solo confronto; ma non è il primo elemento, è quello centrale: b = a[(1+n)/2] 3t a + t p + t a + t c + t a + t p + t c + t stampe a[im]==b trovato se numero costante di operazioni: Ω(1) ricerca binaria Caso peggiore. Si esegue l iterazione il massimo numero di volte quando: l elemento o è l ultimo guardato oppure non è presente. Quante operazioni ci sono nel ciclo? t a + t c + t c + t a numero costante a[im]==b a[im]>b is o id Quante iterazioni? Facciamo una stima del numero di iterazioni eseguite valutando quanti elementi restano ad ogni divisione dell array (gli elementi sono in numero finito). ricerca binaria Supponiamo che n = 2 k 1 a iterazione restano 2 k-1 elementi 2 a iterazione restano 2 k-2 elementi 3 a iterazione restano 2 k-3 elementi.. k-esima iterazione restano 2 k-k = 1 elementi: is=id (k+1)-esima iterazione: se l elemento è presente trovato diventa vero, altrimenti trovato è falso e is>id: il ciclo termina: O(k) con k = log 2 n : O(log 2 n) Si può dimostrare anche per valori di n qualunque (2 k-1 n 2 k ). Casi di prova Casi di prova Quando si vuole testare un algoritmo si devono costruire vari casi di prova. Invece di eseguire il programma più volte si può costruire un file di dati contenente tutti i casi che si vogliono provare. Esempio. Supponiamo di voler provare un algoritmo di ricerca: l array sarà uno solo e i casi di prova saranno costituiti da diversi valori di b (esterno, presente, presente più volte, ecc.) 12

13 Casi di prova Lo schema del programma sarà perciò del tipo: //acquisire e stampare l array //acquisire la quantità dei casi di prova: // numprove for(int k = 1; k <= numprove; k++){ //acquisire l elemento b da cercare //chiamare il metodo di ricerca //stampa risultati cout<< prova numero <<k << elemento cercato = <<b<<endl; } Casi di prova Il file dei dati avrà pertanto la seguente organizzazione: il valore di n e gli n elementi per l array il valore di numprove gli elementi da cercare (tanti quanto è il valore di numprove) Il programma viene eseguito una sola volta e produce i vari risultati dell esecuzione dell algoritmo, ottenuti con i diversi valori da cercare. Stringhe Stringhe Una costante stringa è rappresentata da un gruppo di caratteri racchiuso tra virgolette: "ciao a tutti" "a = " "123" Per definire in C++ una variabile di tipo stringa si definisce un array di caratteri: char nome[15]; Le stringhe possono anche essere considerate come una unità, oltre che un insieme di caratteri, e il C++ possiede delle funzioni particolari per gestire stringhe. Stringhe Una stringa possiede un carattere di terminazione, indicato con \0, che indica la fine della stringa; questo rappresenta il carattere null del codice ASCII (il primo carattere di posto 0). Consideriamo la stringa "ciao" Essa è composta da 4 caratteri più il carattere di terminazione e pertanto se vogliamo memorizzarne il valore in una variabile di nome saluto dobbiamo scrivere: char saluto[5]="ciao"; Consideriamo: Stringhe char vuota [1] = ""; cout<<"la stringa vuota ha lunghezza" <<strlen(vuota); //0 char elem [2] = "a"; cout<<"la stringa elem ha lunghezza" <<strlen(elem); //1 La dimensione dell array è la lunghezza +1 13

14 Stringhe Abbiamo utilizzato la funzione strlen(nomestringa) Questa funzione ha per argomento la stringa e restituisce un intero che rappresenta il numero di caratteri che compongono la stringa. Per poter utilizzare tale funzione si deve inserire il file di intestazione string.h : #include <string.h> Confrontare stringhe Abbiamo visto che per confrontare numeri interi si usa l operatore di uguaglianza ==. Abbiamo visto che anche i numeri reali si possono confrontare con lo stesso operatore == ma che a volte è preferibile usare un confronto del tipo fabs(a-b) < epsilon (con epsilon=10 -n e n compatibile con la precisione float o double), dato che i reali sono rappresentati in maniera approssimata. Confrontare stringhe Per confrontare stringhe si utilizza la funzione strcmp(stringa1,stringa2) che restituisce un valore intero: >0 se s1 segue s2 strcmp(s1, s2) =0 se s1 è uguale s2 <0 se s1 precede s2 Confrontare stringhe Pertanto, date le stringhe s1 e s2 : if(strcmp(s1,s2) > 0) //s1 è più grande di s2: s1 segue if(strcmp(s1,s2) < 0) //s1 è più piccola di s2: s1 precede if(strcmp(s1,s2) == 0) //s1 è uguale a s2 Confrontare stringhe Si effettua un confronto lessicografico secondo l ordine dei caratteri ASCII. Il confronto procede a partire dal primo carattere delle stringhe confrontando a due a due i caratteri nelle posizioni corrispondenti, finché una delle stringhe termina oppure due caratteri sono diversi: se una stringa termina, essa precede l altra se terminano entrambe, o sono uguali (ultimo) oppure, l ordinamento tra le due stringhe è uguale all ordinamento alfabetico tra i due caratteri diversi. Confrontare stringhe c a r t o l i n a c a r t o l a i o c a r t a c a r car < carta < cartolaio < cartolina < cartoline 14

15 Confrontare stringhe Il confronto lessicografico genera un ordinamento simile a quello di un dizionario: infatti l ordinamento tra caratteri ASCII è diverso perché tra i caratteri non ci sono solo le lettere, ed inoltre: i numeri precedono le lettere tutte le lettere maiuscole precedono tutte le lettere minuscole il carattere di spazio precede tutti gli altri caratteri. 15

Complessità degli algoritmi

Complessità degli algoritmi Complessità degli algoritmi L'efficienza di un algoritmo si valuta in base all'utilizzo che l'algoritmo fa delle risorse del calcolatore: CPU Memoria tempo spazio Algoritmi diversi, pur occupando lo stesso

Dettagli

Stringhe. Stringhe. Stringhe. Stringhe. Confrontare stringhe. Stringhe

Stringhe. Stringhe. Stringhe. Stringhe. Confrontare stringhe. Stringhe Stringhe Stringhe Una costante stringa è rappresentata da un gruppo di caratteri racchiuso tra virgolette: "ciao a tutti" "a = " "123" Per definire in C++ una variabile di tipo stringa si definisce un

Dettagli

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo 1 Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione dell informazione Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo

Dettagli

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Divide et impera. Divide et impera. Divide et impera. Divide et impera Divide et impera Divide et impera La tecnica detta divide et impera è una strategia generale per impostare algoritmi (par. 9.4). Consideriamo un problema P e sia n la dimensione dei dati, la strategia

Dettagli

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi

Dettagli

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Ω (grande omega) Diciamo che T(n) = Ω (f(n)), - leggiamo T(n) ha complessità

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare

Dettagli

Un esempio di calcolo di complessità: insertion sort

Un esempio di calcolo di complessità: insertion sort Un esempio di calcolo di complessità: insertion sort Vediamo su un esempio come si può calcolare la complessità di un algoritmo... L esempio è un metodo semplice per ordinare arrays: insertion sort, o

Dettagli

Esercizi sulla complessità di frammenti di pseudo-codice

Esercizi sulla complessità di frammenti di pseudo-codice Esercizi sulla complessità di frammenti di pseudo-codice Esercizio 1 Si determini la complessità temporale del seguente frammento di pseudo-codice in funzione di n. Il ciclo contiene solo istruzioni elementari;

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale Primo allenamento Olimpiadi Italiane di Informatica - Selezione territoriale Luca Chiodini luca@chiodini.org - l.chiodini@campus.unimib.it 10 marzo 2016 Programma 1. Lettura di un problema tratto dalle

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

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

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Analisi Asintotica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Un graduale processo di astrazione Passo 1: abbiamo ignorato il costo effettivo

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura

Dettagli

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4 Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4 Domanda n. 1 Argomento: Rappresentazione dell'informazione Domanda: Il numero binario

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Foglio Elettronico Lezione 1

Foglio Elettronico Lezione 1 - Introduzione - Celle e riferimenti - Formule - Approfondimenti - Funzioni logiche Sommario Introduzione - Foglio elettronico o foglio di calcolo - Cos'è? Strumento per raccogliere dati organizzati in

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

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile

Dettagli

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 11 Array A. Miola Dicembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Array 1 Contenuti Il problema degli studenti da promuovere

Dettagli

Rappresentazione dell Informazione

Rappresentazione dell Informazione Rappresentazione dell Informazione Rappresentazione delle informazioni in codice binario Caratteri Naturali e Reali positivi Interi Razionali Rappresentazione del testo Una stringa di bit per ogni simbolo

Dettagli

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Quanto costa? Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Cosa contribuisce

Dettagli

Somma di numeri binari

Somma di numeri binari Fondamenti di Informatica: Codifica Binaria dell Informazione 1 Somma di numeri binari 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Esempio: 10011011 + 00101011 = 11000110 in base e una base Fondamenti di

Dettagli

Informatica e Bioinformatica: Algoritmi

Informatica e Bioinformatica: Algoritmi Informatica e Bioinformatica: Algoritmi 20 Marzo 2014 Programmi Applicativi Programmi Applicativi Sistema Operativo (lezione 3) Macchina Hardware (lezione 1 e 2) La macchina hardware permette l esecuzione

Dettagli

ESPONENZIALI E LOGARITMI. chiameremo logaritmica (e si legge il logaritmo in base a di c è uguale a b ).

ESPONENZIALI E LOGARITMI. chiameremo logaritmica (e si legge il logaritmo in base a di c è uguale a b ). ESPONENZIALI E LOGARITMI Data una espressione del tipo a b = c, che chiameremo notazione esponenziale (e dove a>0), stabiliamo di scriverla anche in un modo diverso: log a c = b che chiameremo logaritmica

Dettagli

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative

Dettagli

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Esercizi vari. Alberto Montresor. 19 Agosto, 2014 Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni

Dettagli

Algoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica

Algoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica Algoritmi e strutture dati Analisi di algoritmi Funzioni di costo, notazione asintotica Alberto Montresor Università di Trento 2016/09/11 This work is licensed under a Creative Commons Attribution-ShareAlike

Dettagli

Unità aritmetica e logica

Unità aritmetica e logica Aritmetica del calcolatore Capitolo 9 Unità aritmetica e logica n Esegue le operazioni aritmetiche e logiche n Ogni altra componente nel calcolatore serve questa unità n Gestisce gli interi n Può gestire

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

Analisi asintotica della complessità di tempo degli algoritmi

Analisi asintotica della complessità di tempo degli algoritmi Analisi asintotica della complessità di tempo degli algoritmi Due esempi di funzioni di Python: 1. nel primo mettiamo in evidenza l importanza di una buona organizzazione dei dati in memoria, cioè di una

Dettagli

Strutture dati e algoritmi. Sommario

Strutture dati e algoritmi. Sommario Sommario Strutture dati e algoritmi: Ricerca (lineare e binaria) Ordinamento (per selezione) Strutture dati e algoritmi Come esempi concreti di applicazioni in C++ si useranno le strutture dati e gli algoritmi.

Dettagli

Caratteristiche di un linguaggio ad alto livello

Caratteristiche di un linguaggio ad alto livello Caratteristiche di un linguaggio ad alto livello Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono

Dettagli

Derivazione numerica. Introduzione al calcolo numerico. Derivazione numerica (II) Derivazione numerica (III)

Derivazione numerica. Introduzione al calcolo numerico. Derivazione numerica (II) Derivazione numerica (III) Derivazione numerica Introduzione al calcolo numerico Il calcolo della derivata di una funzione in un punto implica un processo al limite che può solo essere approssimato da un calcolatore. Supponiamo

Dettagli

Ordinamento per inserzione e per fusione

Ordinamento per inserzione e per fusione Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010 Fusione: problema Problema Siano A e B due array di n A e n B interi rispettivamente. Si supponga che A e B siano ordinati in modo

Dettagli

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1 Notazione asintotica Sebbene si possa talvolta determinare il tempo esatto di esecuzione di un algoritmo, l estrema precisione non giustifica lo sforzo del calcolo; infatti, per input sufficientemente

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Tempo e spazio di calcolo

Tempo e spazio di calcolo Tempo e spazio di calcolo Modelli di calcolo e metodologie di analisi F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) In quale modo stimiamo il tempo di calcolo? Possiamo considerare

Dettagli

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due Conversione di base Dato N>0 intero convertirlo in base b dividiamo N per b, otteniamo un quoto Q 0 ed un resto R 0 dividiamo Q 0 per b, otteniamo un quoto Q 1 ed un resto R 1 ripetiamo finché Q n < b

Dettagli

Precorso di Matematica

Precorso di Matematica UNIVERSITÀ DEGLI STUDI ROMA TRE FACOLTA DI ARCHITETTURA Precorso di Matematica Anna Scaramuzza Anno Accademico 2005-2006 4-10 Ottobre 2005 INDICE 1. ALGEBRA................................. 3 1.1 Equazioni

Dettagli

A lezione sono stati presentati i seguenti passi per risolvere un problema:

A lezione sono stati presentati i seguenti passi per risolvere un problema: Calcolo delle radici di un polinomio Problema: Dati i coefficienti a,b,c di un polinomio di 2 grado della forma: ax^2 + bx + c = 0, calcolare le radici. A lezione sono stati presentati i seguenti passi

Dettagli

Fondamenti di Informatica II 9. Complessità computazionale

Fondamenti di Informatica II 9. Complessità computazionale Scelta di un algoritmo Fondamenti di Informatica II 9. Complessità computazionale Dato un problema, esistono diversi algoritmi che permettono di risolverlo. I fattori che possono influenzare la scelta

Dettagli

Indice. Prefazione. 3 Oggetti e Java 53

Indice. Prefazione. 3 Oggetti e Java 53 Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

Tipi di dato primitivi

Tipi di dato primitivi Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso

Dettagli

Proprietà delle notazioni asintotiche

Proprietà delle notazioni asintotiche Proprietà delle notazioni asintotiche Punto della situazione Cos è un algoritmo Tempo di esecuzione T(n) Analisi di algoritmi: analisi asintotica di T(n) Notazioni asintotiche Argomento di oggi Proprietà

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 07/02/07 Nota Questi lucidi sono tratti

Dettagli

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Confronto di algoritmi Uno stesso problema può essere risolto in modi diversi,

Dettagli

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E07 Iterazione C. Limongelli Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Iterazione 1 Contenuti Si vogliono formalizzare

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Analisi di algoritmi Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Parte I Analisi

Dettagli

Studio degli algoritmi

Studio degli algoritmi COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi

Dettagli

La codifica digitale

La codifica digitale La codifica digitale Codifica digitale Il computer e il sistema binario Il computer elabora esclusivamente numeri. Ogni immagine, ogni suono, ogni informazione per essere compresa e rielaborata dal calcolatore

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Ciclo do while in FORTRAN

Ciclo do while in FORTRAN Ciclo do while in FORTRAN Vogliamo tradurre in linguaggio FORTRAN un algoritmo che risponde a questo tipo di struttura: Fino a quando e vera questa espressione logica allora: fai questo fai quest altro

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 05 Complessità C. Limongelli Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Complessita' 1 Contenuti!Costo computazionale

Dettagli

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Problemi, istanze, soluzioni

Problemi, istanze, soluzioni lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un

Dettagli

Esercizio 1. Tavola ordinata in memoria centrale

Esercizio 1. Tavola ordinata in memoria centrale Esercizio 1. Tavola ordinata in memoria centrale E dato un programma che realizza una rubrica telefonica come tavola in memoria centrale. In particolare, ogni elemento della tavola è caratterizzato dalle

Dettagli

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultima Modifica: 7 ottobre 202 Copyright Portions of this work are Copyright 202, Moreno Marzolla. This work is licensed

Dettagli

EQUAZIONI DISEQUAZIONI

EQUAZIONI DISEQUAZIONI EQUAZIONI DISEQUAZIONI Indice 1 Background 1 1.1 Proprietà delle potenze................................ 1 1.2 Prodotti notevoli................................... 1 2 Equazioni e disequazioni razionali

Dettagli

Limiti di successioni

Limiti di successioni Capitolo 5 Limiti di successioni 5.1 Successioni Quando l insieme di definizione di una funzione coincide con l insieme N costituito dagli infiniti numeri naturali 1, 2, 3,... talvolta si considera anche

Dettagli

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi Somma di numeri floating point Algoritmi di moltiplicazione e divisione per numeri interi Standard IEEE754 " Standard IEEE754: Singola precisione (32 bit) si riescono a rappresentare numeri 2.0 10 2-38

Dettagli

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 12 LA COMPLESSITA COMPUTAZIONALE Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna

Dettagli

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra

Dettagli

Progetto e analisi di algoritmi

Progetto e analisi di algoritmi Progetto e analisi di algoritmi Roberto Cordone DTI - Università degli Studi di Milano Polo Didattico e di Ricerca di Crema Tel. 0373 / 898089 E-mail: cordone@dti.unimi.it Ricevimento: su appuntamento

Dettagli

1 Esercizi in pseudocodice

1 Esercizi in pseudocodice Questa dispensa propone esercizi sulla scrittura di algoritmi in un linguaggio semiformale, utile all acquisizione delle abilità essenziali per implementare algoritmi in qualsiasi linguaggio di programmazione.

Dettagli

Calcolo del fattore di convergenza

Calcolo del fattore di convergenza Calcolo del fattore di convergenza Dato uno schema iterativo si ha: lim k x k+1 ξ x k ξ p = M p è l ordine di convergenza del metodo iterativo M è la costante asintotica dell errore o fattore di convergenza.

Dettagli

ESERCITAZIONE: ESPONENZIALI E LOGARITMI

ESERCITAZIONE: ESPONENZIALI E LOGARITMI ESERCITAZIONE: ESPONENZIALI E LOGARITMI e-mail: tommei@dm.unipi.it web: www.dm.unipi.it/ tommei Esercizio 1 In una coltura batterica, il numero di batteri triplica ogni ora. Se all inizio dell osservazione

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Cap. 2 - Rappresentazione in base 2 dei numeri interi Cap. 2 - Rappresentazione in base 2 dei numeri interi 2.1 I NUMERI INTERI RELATIVI I numeri relativi sono numeri con il segno: essi possono essere quindi positivi e negativi. Si dividono in due categorie:

Dettagli

A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.

A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5. A.A. 2015-2016. CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5. Esercizio 5.1. Determinare le ultime tre cifre di n = 13 1625. (Suggerimento. Sfruttare il Teorema di Eulero-Fermat)

Dettagli

Codice Gray. (versione Marzo 2007)

Codice Gray. (versione Marzo 2007) Codice Gray (versione Marzo 27) Data una formula booleana con n variabili, per costruire una tavola di verità per questa formula è necessario generare tutte le combinazioni di valori per le n variabili.

Dettagli

Anno 3. Funzioni esponenziali e logaritmi: le 4 operazioni

Anno 3. Funzioni esponenziali e logaritmi: le 4 operazioni Anno 3 Funzioni esponenziali e logaritmi: le 4 operazioni 1 Introduzione In questa lezione impareremo a conoscere le funzioni esponenziali e i logaritmi; ne descriveremo le principali caratteristiche e

Dettagli

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010 Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi

Dettagli

Lezione 5 Sottoarray di somma massima

Lezione 5 Sottoarray di somma massima Lezione 5 Sottoarray di somma massima Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 My strcat 1 Esercizio Implementare

Dettagli

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense. Fondamenti di Informatica - A. Fantechi Raccolta di esercizi Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Dettagli

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale Analogico vs. Digitale LEZIONE II La codifica binaria Analogico Segnale che può assumere infiniti valori con continuità Digitale Segnale che può assumere solo valori discreti Analogico vs digitale Il computer

Dettagli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Esercitazione 3. Espressioni booleane I comandi if-else e while Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if

Dettagli

Costo di esecuzione e complessità. Modello di costo e complessità di un algoritmo

Costo di esecuzione e complessità. Modello di costo e complessità di un algoritmo Costo di esecuzione e complessità Modello di costo e complessità di un algoritmo Il costo di esecuzione di un algoritmo quantifica le risorse necessarie per l esecuzione dell algoritmo stesso numero di

Dettagli

INFORMATICA. Strutture iterative

INFORMATICA. Strutture iterative INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Appunti sui Codici di Reed Muller. Giovanni Barbarino

Appunti sui Codici di Reed Muller. Giovanni Barbarino Appunti sui Codici di Reed Muller Giovanni Barbarino Capitolo 1 Codici di Reed-Muller I codici di Reed-Muller sono codici lineari su F q legati alle valutazioni dei polinomi sullo spazio affine. Per semplicità

Dettagli

Correttezza (prima parte)

Correttezza (prima parte) Fondamenti di informatica Oggetti e Java (prima parte) Capitolo 16 ottobre 2015 1 Contenuti Introduzione alla correttezza dei programmi specifica di un programma correttezza di un programma verifica di

Dettagli

Algoritmi in C++ (seconda parte)

Algoritmi in C++ (seconda parte) Algoritmi in C++ (seconda parte) Introduzione Obiettivo: imparare a risolvere problemi analitici con semplici programmi in C++. Nella prima parte abbiamo imparato: generazione di sequenze di numeri casuali

Dettagli

Annamaria Mazzia. Corso di Metodi Numerici per l Ingegneria dispense e altro materiale su

Annamaria Mazzia. Corso di Metodi Numerici per l Ingegneria dispense e altro materiale su Soluzione di un sistema non lineare con la Regula Falsi generalizzata per la determinazione degli angoli conico di taglio ed elicoidale di taglio di una cremagliera Annamaria Mazzia Dipartimento di Metodi

Dettagli

Cammini minimi fra tutte le coppie

Cammini minimi fra tutte le coppie Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)

Dettagli

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi. Stringhe. Stringhe Ricerca binaria Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli