Ricerca lineare: elementi ripetuti
|
|
- Lamberto Bellucci
- 7 anni fa
- Visualizzazioni
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 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
DettagliStringhe. 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
DettagliAlgoritmi 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
DettagliDivide 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
DettagliNell 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
DettagliCOMPLESSITÀ 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à
DettagliArray 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
DettagliEsercizi 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
DettagliAlgoritmi 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
DettagliUn 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
DettagliEsercizi 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;
DettagliFondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
DettagliPrimo 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
DettagliCalcolare 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
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliEsempio: 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
DettagliAlgoritmi 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
DettagliSviluppo 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
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliFondamenti 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
DettagliCorso: 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
DettagliSTRUTTURE 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
DettagliFoglio 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
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliIntroduzione 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
DettagliDati 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
DettagliArray. 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
DettagliRappresentazione 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
DettagliCosto 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
DettagliSomma 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
DettagliInformatica 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
DettagliESPONENZIALI 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
DettagliLinguaggio 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
DettagliEsercizi vari. Alberto Montresor. 19 Agosto, 2014
Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni
DettagliAlgoritmi 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
DettagliUnità 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
DettagliEsercizi 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,
DettagliEsercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
DettagliAnalisi 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
DettagliStrutture 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.
DettagliCaratteristiche 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
DettagliDerivazione 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
DettagliOrdinamento 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
DettagliNotazione 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
DettagliCorso 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
DettagliTempo 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
DettagliConversione 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
DettagliPrecorso 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
DettagliA 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
DettagliFondamenti 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
DettagliIndice. 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
DettagliEsercizi 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
DettagliTipi 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
DettagliProprietà 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à
DettagliLaboratorio 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
DettagliCOMPLESSITÀ 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,
DettagliIterazione. 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
DettagliVBA è 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?
DettagliAlgoritmi 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
DettagliStudio 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
DettagliLa 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
DettagliEsercitazione 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
DettagliCiclo 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
DettagliCorso 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
DettagliUn 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
DettagliProgramma 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
DettagliProblemi, 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
DettagliEsercizio 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
DettagliTipi 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
DettagliEsercizi 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
DettagliEQUAZIONI DISEQUAZIONI
EQUAZIONI DISEQUAZIONI Indice 1 Background 1 1.1 Proprietà delle potenze................................ 1 1.2 Prodotti notevoli................................... 1 2 Equazioni e disequazioni razionali
DettagliLimiti 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
DettagliSomma 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
DettagliPrincipali 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
DettagliDiagramma 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
DettagliProgetto 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
Dettagli1 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.
DettagliCalcolo 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.
DettagliESERCITAZIONE: 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
DettagliCostanti 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
DettagliProgrammazione 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,
DettagliCap. 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:
DettagliA.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)
DettagliCodice 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.
DettagliAnno 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
DettagliTipi 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
DettagliLezione 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
DettagliPer 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.
DettagliAnalogico 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
DettagliEsercitazione 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
DettagliCosto 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
DettagliINFORMATICA. 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
DettagliERRATA 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
DettagliAppunti 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à
DettagliCorrettezza (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
DettagliAlgoritmi 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
DettagliAnnamaria 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
DettagliCammini 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)
DettagliEsercizi. 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)
DettagliProgrammazione 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