Sei sulla pagina 1di 0

Algoritmi

2
Algoritmi
Definizione
Caratteristiche
Pianificazione e progettazione
Rappresentazione
Operazioni fondamentali
Teorema di Jacopini-Bhm
Diagrammi di flusso
3
Definizione
Intuitiva
Sequenza ordinata di istruzioni per risolvere
un problema.(Es. ricetta)
Formale
Insieme ordinato di operazioni non
ambigue, effettivamente eseguibili che
risolvono, in un tempo finito, tutti i
problemi di una determinata classe.
4
Caratteristiche degli algoritmi
Carattere deterministico (.. Insieme ordinato di
istruzioni non ambigue ..)

una istruzione e non ambigua se pu essere
direttamente eseguita dallagente di calcolo
(istruzione primitiva) e la sua interpretazione non
dipende dal contesto o dalla preparazione
dellagente. I risultati dellalgoritmo non
dipendono dalla macchina o persona che lo
esegue.

5
insieme ordinato non ambigue
Shampoo
Bagna i capelli
Insapona
Risciacqua
Ripeti (cosa?,
quante volte?)
Esegui A oppure B
(come stabilire se A o

B?)
Torta
Prepara base
- setaccia farina
- aggiungi uova, acqua
prendi setaccio
versa la farina
6
Caratteristiche degli algoritmi
Carattere di realizzabilit pratica
(..effettivamente eseguibili ..)
t ut t e l e i st ruzi oni che cost i t ui scono
lalgoritmo devono essere effettivamente
eseguibili
(Es. calcolare lesatto valore decimale di !.
Calcola tutti i numeri primi e stampa il primo
maggiore di 100)

7
Caratteristiche degli algoritmi
Carattere finito (.. risolvono in un tempo
finito )
il numero delle istruzioni che definiscono un
algoritmo e finito e queste vengono
eseguite un numero finito di volte.
(Es. calcolare tutti i numeri primi)
8
Carattere finito
Shampoo
1) Bagna i capelli
2) Contatore = 0
3) Ripeti passi da 4 a 6 finch contatore =2
4) Insapona i capelli
5) Risciacqua
6) Contatore = Contatore + 1
7) stop
9
Algoritmo per sommare due
numeri
c=a+b con a e b numeri formati da m cifre
c
m
c
m-1
c
m-2
.. c
0
= a
m-1
a
m-2
..a
0
+ b
m-1
b
m-2
..b
0
1 riporto = 0
2 i = 0
3 ripeti passi 4 6 finch i diventa > m -1
4 somma a
i
e b
i
al riporto per ottenere c
i
10
Algoritmo per sommare due
numeri
5 se c
i
" 10 c
i
= c
i
-10 e riporto = 1, altrimenti
riporto = 0
6 i = i + 1
7 c
m
= riporto
8 stampa risultato
9 stop
11
Pianificazione e progettazione
Analizzare il problema

comprendere a fondo il problema e darne una


definizione precisa

quali sono gli input?

quali sono i dati? I formati?

quali devono essere gli output?

come elaborare i dati?


12
Pianificazione e progettazione
Progettare una soluzione
Definire i passi da applicare per risolvere il
problema
Passi dettagliati, non ambigui e finiti
Verifica della soluzione
Codificare il programma e documentarlo
Testare il programma
Singole parti del codice (moduli)
13
Pianificazione e progettazione
Validare il programma
Serie estesa di prove
Input non validi
Valutazioni sullinterfaccia utente (sono
sufficienti le indicazioni fornite?)
14
Esempio
Determinare in un gruppo di persone la
percentuale di presenze divisa nei seguenti
gruppi di et:
0-5
6-12
13-19
20-64
> 65
15
Analizzare il problema
Input et di ogni persona presente
Output percentuale di presenze in ogni
gruppo di et
Elaborazione aggiungere 1 al gruppo di et
per ogni persona che rientra in quel gruppo
16
Progettare una soluzione
1) Richiedere let della persona
2) Aggiungerla al gruppo corrispondente
3) Ripeti per tutte le persone i passi 1-2
4) Calcola la percentuale per ogni gruppo
4.1) Determina il numero totale di persone
4.2) Dividi i totali parziali per il totale globale
5) Output risultato
17
Esercizi
Modificare lalgoritmo della somma in modo
che non stampi gli zero non significativi
Eseguire la moltiplicazione mediante
laddizione ripetuta
Eseguire la divisione mediante la sottrazione
ripetuta
Caratteristiche di un
calcolatore elettronico

velocissimo

Non intelligente

Non in grado di compiere deduzioni o


ragionamenti in modo autonomo.

Non in grado di capire un problema.

Non in grado di capire se il risultato


raggiunto la soluzione del problema.
Capacit del calcolatore

Sa leggere le informazioni dallesterno (input).

Sa memorizzare le informazioni.

Sa eseguire alcune operazioni elementari: addizione,


sottrazione, prodotto e rapporto fra numeri,
concatenazione di parole.

Sa eseguire il confronto fra informazioni dello stesso


tipo: (es.: a>b, a=b, a#b e luguaglianza fra due parole).

Sa memorizzare sequenze di istruzioni elementari


(programma) e le sa eseguire secondo un ordine
stabilito dal programma stesso.

Sa scrivere le informazioni allesterno (output).


Compiti del programmatore

Analizzare il problema riducendolo in


termini astratti e formulare un modello del
problema.

Individuare una strategia risolutiva

Codificare lalgoritmo - renderlo


comprensibile al calcolatore.

Analizzare il risultato dellelaborazione


evidenziando eventuali errori nella
formulazione del problema, nella strategia
risolutiva, nella codifica dellalgoritmo.
21
Rappresentazione degli algoritmi
Gli algoritmi devono essere descritti in
modo chiaro, preciso e non ambiguo.
1 Linguaggio naturale. Testi non strutturati
difficili da seguire (saggi), linterpretazione
dipende inoltre dal contesto e dalla
esperienza del lettore (poesie).
22
Rappresentazione degli algoritmi
2 Linguaggio di programmazione formale
quando si progetta un algoritmo si parte da
livello elevato di astrazione, senza doversi
concentrare sulla punteggiatura, sulla
grammatica e sintassi.
23
Rappresentazione degli algoritmi
3 Pseudocodice
linguaggio di programmazione senza
regole grammaticali,
facilmente leggibile.

24
Rappresentazione degli algoritmi
4 Diagrammi di flusso (flow chart)
Rappresentazione in forma schematica della
logica e della struttura dellalgoritmo.
Ad ogni istruzione corrisponde un simbolo grafico
la cui forma dipende dal tipo di istruzione
considerata.
Eff i cace mezzo di comuni cazi one t ra i
programmatori e chi e coinvolto nelluso del
programma
25
Operazioni fondamentali
Operazioni sequenziali descrivono un
singolo compito ben definito
Input inserimento dei dati da elaborare
Output visualizzare i risultati
Elaborazione
x = 0
aggiungere due uova
26
Operazioni fondamentali
Operazioni condizionali consentono di
alterare il normale flusso sequenziale.
Si pone una domanda e in base alla risposta
si determina la successiva operazione da
eseguire
Se condizione (vera/falsa) vera allora
esegui queste operazioni
altrimenti
esegui queste operazioni
27
Operazioni fondamentali
Algoritmo per sommare due numeri
5 se c
i
" 10 c
i
= c
i
-10 e riporto = 1, altrimenti
riporto = 0
5 se c
i
" 10
c
i
= c
i
-10 e riporto = 1
altrimenti
riporto = 0
28
Operazioni fondamentali
Operazioni iterative (ciclo) ripetizione di un
blocco di istruzioni
Ripeti dal passo i al passo j fino a che
condizione (vera/falsa) diventa vera
Algoritmo per sommare due numeri
3 ripeti passi 4 6 finch i diventa > m -1
29
Iterazioni per falso
Ciclo repeat
Il corpo del ciclo viene eseguito almeno una
volta (iterazione a condizione finale)
Ripeti dal passo i al passo j fino a che
condizione (vera/falsa) diventa vera
30
Iterazioni per vero
Ciclo while
Il corpo del ciclo viene eseguito 0,1 o pi volte
(iterazione a condizione iniziale)
Mentre condizione (vera/falsa) rimane vera
esegui
corpo del ciclo
fine del ciclo
31
Teorema di Jacopini-Bhm
Qualunque algoritmo puo essere descritto
ut i l i zzando sol t ant o l e t r e st r ut t ur e
fondamentali:
Sequenza
Diramazione
Iterazione
32
Esercizi
Scrivere un algoritmo che riceva in ingresso un dato
X e calcoli X
2
e 1/X fino a che X = 0.
Scrivere un algoritmo che riceva in ingresso N
numeri interi e determini se tra questi e presente il
numero X e la sua posizione.
Scrivere un algoritmo che riceva in ingresso N
numeri interi e determini il pi grande.
Scrivere un algoritmo per il calcolo del fattoriale di
N.
33
Algoritmo trova il maggiore
1 Input N (numero elementi)
2 Input A
i
.. A
N
3 Poni max = A
1
4 Poni i = 2
5 Ripeti fino a che i > N
5.1 se A
i
> max allora poni max = A
i
5.2 poni i = i + 1
5.3 fine ciclo
6 Stampa max
34
Diagrammi di flusso
Ad ogni istruzione corrisponde un simbolo
grafico la cui forma dipende dal tipo di
istruzione considerata.
Tali simboli sono collegati tra loro, dallalto
verso il basso, da segmenti orientati,
rappresentanti lordine di esecuzione delle
istruzioni corrispondenti
35
Diagrammi di flusso
START
STOP
Input/Output
istruzione
36
Diagrammi di flusso
proposizione
vero
falso
proposizione
vero
falso
1 1
37
Diagrammi di flusso
sequenza
proposizione
A
B
diramazione
IF THEN ELSE
Vero
Falso
38
Diagrammi di flusso
proposizione
vero
falso
while
proposizione
falso
vero
repeat until
39
Esercizi
Rappresentare lalgoritmo per il calcolo della
distribuzione dellet.
Rappresentare lalgoritmo per il calcolo di x
y
.
Rappresentare lalgoritmo per il calcolo dei
primi N numeri di Fibonacci. (1 1 2 3 5 8..)
Rappresentare lalgoritmo per ordinare in
ordine crescente N numeri (bubble sort)
Esempio: stampare i primi 10 multipli di x.
Problema semplice e chiaro: un solo dato in
input (un parametro che caratterizza listanza del
problema): la base costituita dal numero x;
1 La strategia risolutiva la seguente: iniziando
dal numero x letto in input, per 10 volte verr
calcolato e stampato il multiplo di x,
moltiplicando x per una variabile i il cui valore
verr incrementato di una unit ad ogni passo,
da 1 fino a 10.
Esempio: stampare i primi 10 multipli
di x.
Leggi in input un numero e chiama x il
numero
letto;
1. Assegna il valore 1 alla variabile i;
2. Calcola xi e assegna alla variabile y il
risultato;
3. Stampa y;
4. Calcola i+1 e assegna alla variabile i il
risultato;
5. Se i#10 allora vai al passo 3 altrimenti
prosegui;
6. Fermati.
Esercizio: rappresentare il flow-chart
utilizzando literazione per vero a
controllo iniziale
i>10
No
Si
Esempio: letti due numeri stampare il
massimo
letti in input 3 numeri stampare il massimo.
Letti in input n numeri stampare
il massimo
non possibile
adottare la stessa
strategia: dovremmo
utilizzare troppe
variabili (quante?)
1 necessario adottare
una diversa strategia:
individuare una
operazione semplice
che ripetuta pi volte
porti alla soluzione.
Esercizio: rappresentare il flow-
chart utilizzando literazione per
vero a controllo iniziale
No
Si
i>=n
Sottoprogrammi:
esempio Somma di n numeri
1. Input: un naturale n; Output: la somma degli n
naturali
2. Leggi n
3. sum = 0
mentre (n>0) fai
3.1 leggi x
3.2 sum = sum + x
3.3 n = n-1
4. stampa sum
Calcolare la media aritmetica
di n naturali
Sottoprogrammi
Per calcolare la media aritmetica fra n naturali
sarebbe comodo riutilizzare il codice per la somma
di numeri naturali.
I sottoprogrammi permettono di scrivere codice

modulare

leggibile

riutilizzabile
Sottoprogrammi
In un sottoprogramma necessario definire quali
sono i parametri di input e i parametri di output
(definizione dellinterfaccia)
Tali parametri sono chiamati parametri formali.
Sottoprogramma <nome sottoprg> (in: x1, x2,... xn;
out: y1,y2,... ym)
Blocco
Sottoprogramma
definizione
sottoprogramma somma (in:n; out: sum)
{
1. sum = 0
2. mentre (n>0) fai {
2.1 leggi x
2.2 sum = sum + x
2.3 n = n-1
}
}
Sottoprogramma
chiamata
Un sottoprogramma per essere eseguito deve
essere chiamato da unaltro programma che lo
utilizza esplicitando la lista di parametri di input e
output (parametri attuali).
I nomi dei parametri formali e attuali possono essere
distinti. Al momento della chiamata vengono messi in
corrispondenza in base allordine in cui sono stati
dichiarati.
nomesottoprg(in:a1,...,an; out:b1,...,bm)
Media aritmetica
leggi n1
1.somma(in:n1,out: sum1)
2.media = sum1/n1
3.stampa media