Informatica di base A.A. 2003/2004 Algoritmi e programmi.
-
Upload
maso-molinari -
Category
Documents
-
view
227 -
download
1
Transcript of Informatica di base A.A. 2003/2004 Algoritmi e programmi.
![Page 1: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/1.jpg)
Informatica di base A.A. 2003/2004
Algoritmi e programmi
![Page 2: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/2.jpg)
2
Algoritmi
Algoritmo: procedura per risolvere una classe di problemiDa algoritmo a programmaCaratteristiche di un algoritmo efficace:
Generale: deve funzionare per tutti i problemiNon ambiguo: unica interpretazione dei passiEseguibile: i passi devono poter essere fatti in tempo finito
![Page 3: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/3.jpg)
3
Programmazione
Disciplina che dice come definire gli algoritmi in modo che possano essere eseguiti da un calcolatoreProgramma: definizione di un algoritmo, scritto secondo certe regole sintatticheFasi di sviluppo di un programma:
Definizione: specifica del problema + algoritmoRealizzazione: scrittura del programma che corrisponde all’algoritmoManutenzione: modifiche del programma e/o dell’algoritmo
![Page 4: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/4.jpg)
4
Caratteristiche di un programma
Efficienza: risolvere un problema nel minimo tempo e con le risorse (memoria) a disposizione
Leggibilita’: scritto in modo chiaro e documentato, per agevolare la manutenzione
Modificabilita’: Facilita’ di modificarlo
![Page 5: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/5.jpg)
5
Efficienza – esempio:somma dei primi n numeri 1, ..., n
1. Leggi n2. Inizializza S a 03. Inizializza I a 14. Esegui S = S+I5. Incrementa I (I=I+1)6. Se I<n torna a 4, altrimenti se I=n esegui 77. Stampa SRichiede n somme
![Page 6: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/6.jpg)
6
Secondo algoritmo
Uso la proprieta’ S = n x (n+1) /21. Leggi n2. Calcola S = n x (n+1)/23. Stampa SUna sola somma, 1 prodotto, 1 divisione: solo 3 operazioni aritmetiche piu’ efficiente
![Page 7: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/7.jpg)
7
Sviluppo di un algoritmo
Diagrammi di flusso: rappresentazione grafica per mostrare l’ordine logico delle operazioniRettangolo: operazione da svolgereRombo: scelta fra due rami dell’algoritmo (salto condizionato)
![Page 8: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/8.jpg)
8
Strategia top-down
Suddividere il problema in sottoproblemi indipendenti pezzi con un punto di ingresso e uno di uscitaComporre i pezzi dei sottoproblemi per ottenere l‘intero algoritmoVantaggi:
Scrivere i vari pezzi separatamenteProgrammi leggibiliErrori localizzati e semplice trovarliPiu’ programmatoriPochi salti intrecciati
Programmazione strutturata
![Page 9: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/9.jpg)
9
Linguaggi di programmazione
Linguaggi ad alto livello (rispetto all’Assembler)Linguaggi imperativi: rispecchiano le operazioni reali nell’architettura di Von Neumann
Scrivere un valore in una cella di memoria o in un registro
Es.: Fortran (Formula Translator), 1954Algol, Cobol, APL, LISP (’60), Pascal, Prolog (’71), C (’74), Ada (’79), C++ (’85), Java (’94)
![Page 10: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/10.jpg)
10
Elementi dei linguaggi di programmazione
Alfabeto: alfabeto inglese, cifre decimali (0,1,...,9), punteggiatura (;), simboli di operazioni (+,-,*,...)Parole chiave: es. IF, THEN, WHILE, ...Operatori: aritmetici, logici (and, not, or, ...), relazionali (<, >, =, ...)Tipi di dati: interi, reali, caratteri, ...Sintassi: regole per scrivere un programmaSemantica: significato dell’esecuzione di un programma
![Page 11: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/11.jpg)
11
Variabili e assegnamenti
Variabile: nome associato ad una cella di memoriaPuo’ assumere un valore (quello contenuto nella cella)Istruzione di assegnamento per dare un valore ad una variabileValore ottenuto calcolando un’espressione (es: A+3)Es. (Pascal): X := Y+3Es. (C): X = Y+3Es. (C): X=X+1 (X da entrambe le parti!)
![Page 12: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/12.jpg)
12
Costrutti di programmazione
SequenzaSelezioneIterazioneSalto incondizionatoProcedura rientranteFunzione ricorsiva
![Page 13: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/13.jpg)
13
Sequenza
Istruzioni eseguite in sequenzaEs: S1;S2;S3; ...; Sk;Es. (Pascal):
BeginX:=Y+3;Z:=X+4End
Es. (C):{X=Y+3;Z=X+4;}
S1
Sk
S2
![Page 14: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/14.jpg)
14
Selezione (uno o due rami)
Se E e’ vera, esegui S1 (altrimenti esegui S2)E espressione Booleana (vera o falsa)Es.: A < BCostrutto IF THEN ELSEEs.: (Pascal)
If a > 0 then a: a-1 else b:=aEs. (C):
If (a >0) a=a-1 else b=a
E
S1V
F
E
S1
V F
S2
![Page 15: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/15.jpg)
15
Selezione (piu’ di due rami)
Condizione non Booleana piu’ valori piu’ ramiCostrutto CASEEs. (Pascal):
Case veicolo ofBicicletta: tassa:=0;Motociclo: tassa:=30;Auto: tassa:=100End;
![Page 16: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/16.jpg)
16
Iterazione - while
Per ripetere un gruppo di comandi finche’ non si verifica una certa condizioneCostrutto WHILE: finche’ E e’ vera ripeti STest prima del ciclo (loop) se E e’ falsa all’inizio, S non viene mai eseguitoEs. (Pascal):
i:=1;While i <= 100 doBegin ... i:=i+1 end;
Es. (C):I=1;While (i<=100) { ... I++;}
E
S1V
F
![Page 17: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/17.jpg)
17
Iterazione -repeat
Costrutto REPEAT: ripeti S fino a che E e’ falsaTest dopo il loop S viene sempre seguito almeno una voltaEs. (Pascal):
I:=1;Repeat...I:=i+1Until i> 100;Es. (C): I=1;Do{...I++;} while (i<=100);
E
S1
V
F
![Page 18: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/18.jpg)
18
Iterazione -for
Costrutto FOR: ripeti S n volte Non c’e bisogno di una condizione, so gia’ quante volte eseguire SEs. (Pascal):
For i:=1 to 100 do
Begin ... End
Es. (C): For (i=1;i<=100,i++)
{ ... }
![Page 19: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/19.jpg)
19
Salto incondizionato
Per saltare ad una qualunque istruzione che non sia la seguente
Costrutto GOTO
Contrasta con la programmazione strutturata (effetto spaghetti)
Usare solo se assolutamente necessario!
![Page 20: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/20.jpg)
20
Gruppi di aula informatica
Gruppo 1 (matematici): Martedi’ 4 Novembre 14:00
Mercoledi’ 12 Novembre 14:00
Venerdi’ 21 Novembre 11:20
Venerdi’ 28 Novembre 11:20
![Page 21: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/21.jpg)
21
Gruppi di aula informatica
Gruppo 2: Mercoledi’ 5 Novembre 14:00
Givedi’ 13 Novembre 11:20
Giovedi’ 20 Novembre 11:20
Martedi’ 25 Novembre 14:00
![Page 22: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/22.jpg)
22
Gruppi di aula informatica
Gruppo 3: Giovedi’ 6 Novembre 11:20
Venerdi’ 14 Novembre 11:20
Martedi’ 18 Novembre 14:00
Mercoledi’ 26 Novembre 14:00
![Page 23: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/23.jpg)
23
Gruppi di aula informatica
Gruppo 4: Venerdi’ 7 Novembre 11:20
Martedi’ 11 Novembre 14:00
Mercoledi’ 19 Novembre 14:00
Giovedi’ 27 Novembre 11:20
![Page 24: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/24.jpg)
24
Esercizio: programma per somma (C++)
Main(){Int X=10, Y=25, Zero=0;X=X+Y;If (X > Zero) Y=X);}
Dichiarazioni: utili per sapere quanto spazio allocare
per questi nomi
Nome funzione principale
Dichiarazioni
Sequenza
![Page 25: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/25.jpg)
25
Esercizio: minimo esponente e tale che 2 alla e superi X (C++)
Main(){ Int X=10, p=1, e=0; While (X>p) { p=p*2; esponente++; }}
Nome funzione principale
Dichiarazioni
Sequenza
![Page 26: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/26.jpg)
26
Struttura di un programma (C)
Intestazione Dichiarazione variabiliComandi (corpo) programma principaleFunzione 1Funzione 2...Funzione n
![Page 27: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/27.jpg)
27
Esempio: stampa dei numeri da 1 a 10
main() { Int i; For (i=0;i<10;i++) Printf(“%d\n,i+1); }
![Page 28: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/28.jpg)
28
Procedura rientrante (o sottoprogramma)
Pezzo di programma con un nome e una lista di variabili (argomenti o parametri) Scritto una volta solo, ma posso ‘’chiamarlo’’ piu’ volte e con dati diversiAnche risultati dal sottoprogramma al programma chiamante (funzione)Quando lo chiamo (call), salto alla prima istruzione del sottoprogramma e salvo l’indirizzo della prossima istruzioneQuando finisce, ritorno al punto in cui ero (quello salvato)
![Page 29: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/29.jpg)
29
Esempio: funzione per xy (in Pascal)
Function potenza (base: real, esponente: integer): real;Var risultato: real;begin risultato := 1; While (esponente >0) begin Risultato := risultato * base; Esponente := esponente –1; End; Potenza : = risultatoEnd;
![Page 30: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/30.jpg)
30
Esempio: funzione per xy (in C)
Float potenza (float base, int esponente){ Float risultato = 1.0; While (esponente >0) { Risultato = risultato * base; Esponente = esponente –1; } Return risultato;}
Es. di chiamata: z = potenza(x,3);
![Page 31: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/31.jpg)
31
Struttura delle chiamate –1
Programma
Call A
Call B
Call C
Call B
Funzione A
Fine AFunzione B
Fine B
Fine C
Funzione C
![Page 32: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/32.jpg)
32
Struttura delle chiamate - 2
Programma
Call A
Call A
Funzione A
Call B
Fine C
Funzione C
Funzione B
Call C
Fine B
Fine A
![Page 33: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/33.jpg)
33
Funzioni ricorsive
Definizione ricorsiva: in termini di se’ stessoFunzione ricorsiva: chiama se’ stessa al suo internoEsempio: funzione fattoriale (fatt)
0! = 1N! = 1*2*3*4*...*n
Definizione iterativa:If (n=0 or n=1) then fatt = 1else {fatt = 1; for i=2 to n fatt = fatt*i}return fatt
![Page 34: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/34.jpg)
34
Funzioni ricorsive
Definizione ricorsiva: in termini di se’ stessoFunzione ricorsiva: Chiama se’ stessa al suo internoEsempio: funzione fattoriale (fatt)
0! = 1N! = 1*2*3*4*...*n
Definizione ricorsiva: 0! = 1N! = n*(n-1)!
Funzione ricorsiva:If (n=1 or n=0) then fatt = 1Else {fatt = 1; fatt = n*fatt(n-1)}Return fatt
![Page 35: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/35.jpg)
35
Da linguaggio X a linguaggio macchina
Se X= Assembler assemblatoreSe X piu’ ad alto livello compilatore o interpreteFasi di un compilatore:
Analisi lessicale: da caratteri a nomi, operatori, parole chiave, ... (tokens)Analisi sintattica/semantica: da tokens a costrutti (if then else, while, ...)
Generazione codice oggetto in linguaggio macchinaLinker/loader: collegamento tra vari Programmi e scelta degli indirizzi di RAM
Codice oggetto
eseguibile
compilatore
linker
loader
Programma
Programma in ling. macchina in RAM
![Page 36: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/36.jpg)
36
Esempio
p := p + r * 60 sequenza di caratteriAnalisi lessicale: id1 := id2 + id3 * 60 sequenza di tokensAnalisi sintattica/semanticaGenerazione codice intermedio:
Temp1 := 60Temp2 := id3*temp1Temp3 := id2 + temp2Id1 := temp3
Ottimizzazione codice:Temp1 := id3 * 60Id1 := id2 + temp1
Generazione codice oggetto:MOVE id3 R2MULT R2 60MOVE id2 R1ADD R1 R2MOVE R1 id1
:=
id1
id2
id3 60
+
*
![Page 37: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/37.jpg)
37
Tipi di dati
I programmi possono gestire dati di diverso tipo:
Numerici: interi e realiNon numerici: booleani e caratteri
Inoltre, i dati possono essere:semplici (es. Un numero singolo o un carattere) strutturati (es. Ora: ore, minuti, secondi)
![Page 38: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/38.jpg)
38
Tipi di dato strutturati
ArrayRecordCodaPilaLista
![Page 39: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/39.jpg)
39
Array
Sequenza finite di dati omogeneiPer indicare un elemento: nome dell’intero array + indice(i)
Indice: posizione rispetto al primo elementoUn indice vettore (array monodimensionale). Es.: V[3]Due o piu’ indici matrice. Es.: V[3,2]
Dichiarazione di un array: nome + numero dimensioni + tipo elementi + numero elementi in ogni dimensione. Es.: int V[100];In memoria: celle contigue a partire da B, N elementi, ognuno lungo L indirizzo elemento i: B+ixLLimiti: dimensione fissa e dati omogeneiVantaggio: accesso diretto con tempo fisso
V
V[i]
V[1]
B+ixL
B L
![Page 40: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/40.jpg)
40
Esempio (C)
Inizializzazione a 0 degli elementi di una matrice 20x20#define Max 20#define zero 0.0;main(){ int i,j; float A[Max][Max]; for (i=0;i<Max;i++) for j=0; j<Max; J++) A[i][j] = zero}
Macro: ogni occorrenza di Max e zero viene sostituita con 20 e 0.0 prima di iniziare a compilare (pre-processore)
![Page 41: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/41.jpg)
41
Esempio (C++): determinare la posizione del massimo in un array di interi (while)
#include <iostream> il pre-processore include la libreria di funzioni iostream main(){ int a[]={10,0,5,-12,45,-9,23}; int i=1, max=A[0], pos_max=0; while (i<7) { if (A[i]>max) { max=A[i]; pos_max=i; } i++; } cout<<‘’Il massimo e’:’’<<max<<‘’ in posizione:’’ <<pos_max<<endI;}
Output standard (video)
Funzione << di scrittura
![Page 42: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/42.jpg)
42
Esempio (C++): determinare la posizione del massimo in un array di interi (for)
#include <iostream>main(){ int a[]={10,0,5,-12,45,-9,23}; int max=A[0], pos_max=0; for (int i=1;i<7;i++) if (A[i]>max) { max=A[i]; pos_max=i; } cout<<‘’Il massimo e’:’’<<max<<‘’ in posizione:’’ <<pos_max<< endI;}
![Page 43: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/43.jpg)
43
Esempio (C): prodotto degli elementi di un vettore di interi
main(){ int num[100]={10,0,5,-12,45,-9,23, ...}; float prod = 1.0; for (i=0;i<100;i++) prod= prod*num[i]; printf(“il Prodotto e’”,prod);}
![Page 44: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/44.jpg)
44
Esempio (C): minimo e massimo di un vettore
main(){ int V[10]={10,0,5,-12,45,-9,23,8,10,9}; int min=max=V[0]; for (i=1;i<10;i++) { if (V[i]<min) min=V[i]; if (V[i]>max) max=V[i]; }}
![Page 45: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/45.jpg)
45
Esempio (C): trovare la posizione di un elemento in un vettore
main(){ int val = 45, pos, i, T[10]={10,0,5,-12,45,-9,23,8,10,9}; pos=-1; i=0; do { if (val ==T[i]) pos=i; i++; }}
Numero di confronti O(n): 1 nel caso migliore, n nel caso pessimo (val non e’ contenuto in T)
![Page 46: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/46.jpg)
46
Esempio (C): trovare la posizione di un elemento in un vettore ordinato – metodo dicotomico
main(){ int sn, dx, ct, N=10, val = 45, pos, i, T[10]={10,0,5,-12,45, 9,23,8,10,9}; pos=-1; sn = 0; dx = N-1; do { ct = (sn+dx+1)/2; if (val ==T[ct]) pos = ct; if (val < T[ct]) dx = ct-1 else sn=ct+1; } while (sn<=dx);}
Numero di confronti O(log2(n))
![Page 47: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/47.jpg)
47
Esempio (C++): numero di elementi <0 in un array
main(){ int num=0,T[10]={10,0,5,-12,45, 9,23,8,10,9}; for (i=0;i<10;i++) if (T[i] < 0) num=num+1;}
![Page 48: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/48.jpg)
48
Record
Composto da campi contenenti dati possibilmente di tipo diversoEs.: elenco del telefono, ogni riga e’ un record con
Cognome: sequenza di caratteriNome: sequenza di caratteriNumero telefono: intero
Struttura dati staticaAccesso direttoCome un array, ma con elementi di tipo diverso e indicati con nome invece che indice. Es.: riga.cognome = RossiEs. (C):
struct riga{
char cognome[20];char nome[20];int numero_telefono;
}
![Page 49: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/49.jpg)
49
Lista
Struttura dinamica: oltre a leggere e scrivere elementi, anche inserimento e cancellazioneOgni elemento ha due parti: dato + indirizzo (puntatore) elemento successivo elemento successivi possono essere in posizioni lontane di memoriaPer accedere all’elemento i-esimo: scansione sequenziale dall’indirizzo del primo elemento tempo variabileInserzione di E tra Ei e Ei+1:
Scansione fino a EiLink(E) = link(Ei)Link(Ei)= ind(E)
Eliminazione di Ei:Scansione fino a Ei-1Link(Ei-1) = link(Ei)
E1 E2 En
![Page 50: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/50.jpg)
50
Coda e pila
Dati ordinati in sequenzaStrutture dinamiche Coda: meccanismo FIFO (first in, first out)
Inserzione in fondoEliminazione in cima
Pila: estrazione e inserzione dalla stessa parte (LIFO: last in, first out)Celle contigue di memoriaPer una coda, basta un array (se si conosce la dimensione max.) e il puntatore al primo elementoPer la pila, lista con inizio pila = inizio lista no scansionePila usata per gestione memoria dei sottoprogrammi
coda pila
![Page 51: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/51.jpg)
51
Domande – algoritmi e programmi
Cos’e’ un algoritmo?
Che differenza c’e’ tra un algoritmo e un programma?
Come si misura l’efficienza di un algoritmo?
Un algoritmo che ha complessita’ O(n) e’ piu’ o meno efficiente di uno che ha complessita’ O(logn)? E di uno che e’ O(n2) o O(2n)?
Cosa sono le parole chiave di un linguaggio di programmazione?
![Page 52: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/52.jpg)
52
Domande – linguaggi
Cos’e’ la sintassi di un linguaggio di programmazione? E la semantica?
Cosa si intende per linguaggi imperativi?
Cos’e’ una variabile?
Cos’e’ un’espressione Booleana?
Cos’e’ un assegnamento?
![Page 53: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/53.jpg)
53
Domande – costrutti e sottoprogrammi
Descrivere il costrutto di selezione a uno, due o piu’ rami
Descrivere i tre costrutti per l’iterazione, specificando le loro differenze
A cosa servono le dichiarazioni in un programma?
Cos’e’ un sottoprogramma?
Che differenza c’e’ tra una procedura e una funzione?
Cosa succede quando viene chiamato un sottoprogramma?
Cosa si intende per sottoprogramma ricorsivo?
![Page 54: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/54.jpg)
54
Domande – compilatori e tipi di dato
Qual e’ la funzione di un compilatore?
Cosa succede durante la fase di analisi lessicale?
E quella di analisi sintattica?
Fare degli esempi di tipi di dati semplici
Cosa sono i tipi di dati strutturati? Fare degli esempi
Quali sono le principali caratteristiche di un array?
Cosa contiene la dichiarazione di un array?
Quali sono le principali differenze tra array e record?
![Page 55: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/55.jpg)
55
Domande - liste
Quali sono le principali caratteristiche delle liste, e le differenze con gli array?
A parita’ di dati memorizzati, occupa piu’ spazio un array o una lista?
Quali sono le operazioni necessarie per inserire un nuovo elemento in una lista?
E per cancellare un elemento?
![Page 56: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/56.jpg)
56
Cosa contengono le variabili d, n, e i alla fine dell’esecuzione del seguente programma?
Dato un qualunque array a, cosa calcola il programma nella variabile d? main();{ int n=0, a[] = {11, 3, 2, 4, 5}; float d = 0.0; for (i=0;i<5;i++) { d = d+a[i]; n=n+1; } d=d/n;}
Esercizio
d=5.0, n=5, i=4
d calcola la media degli elementi dell’array a
![Page 57: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/57.jpg)
57
Esercizio: trovare il minimo e il massimo di una matrice
main(){ int V[10][20]={10,0,5, ...}; int min=max=V[0][0]; for (i=0;i<10;i++) for (j=0;j<20;j++) { if (V[i][j]<min) min=V[i][j]; if (V[i][j]>max) max=V[i][j]; }}
![Page 58: Informatica di base A.A. 2003/2004 Algoritmi e programmi.](https://reader036.fdocuments.net/reader036/viewer/2022062303/5542eb4f497959361e8bf2d0/html5/thumbnails/58.jpg)
58
Esercizio: inizializzare una matrice a righe crescenti
main(){ int V[4][4]; for (i=0;i<4;i++) for (j=0;j<4;j++) { V[i][j] = j +1 + i*4; }}
9 10 11 12
5 6 7 8
1 2 3 4
13 14 15 16