Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Algoritmi
Definizione
Caratteristiche
Pianificazione e progettazione
Rappresentazione
Operazioni fondamentali
Teorema di Jacopini-Bhm
Diagrammi di flusso
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.
Torta
Prepara base
- setaccia farina
- aggiungi uova, acqua
prendi setaccio
versa la farina
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
10
Pianificazione e progettazione
Analizzare il problema
una
definizione precisa
quali sono gli input?
quali sono i dati? I formati?
quali devono essere gli output?
come elaborare i dati?
11
Pianificazione e progettazione
Progettare una soluzione
12
Pianificazione e progettazione
Validare il programma
13
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
14
Analizzare il problema
Input et di ogni persona presente
Output
Elaborazione
aggiungere 1 al gruppo di et per ogni
persona che rientra in quel gruppo
15
16
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
17
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.
Analisi e programmazione
Analisi e programmazione
Analisi e programmazione
es.: Effettuare un accredito
su un c/c bancario
Soluzione: Utilizzare un
programma che serva per
predisporre il calcolatore
allaccredito di una qualunque
cifra su un qualunque c/c;
cifra da accreditare e numero
di c/c sono i dati caratteristici
del problema
Algoritmo
Algoritmo deriva dal nome del matematico
arabo Al Khuwarizmi, vissuto nel IX secolo d.C.
Un algoritmo una successione di istruzioni o
passi che definiscono le operazioni da eseguire
sui dati per ottenere i risultati; un algoritmo
fornisce la soluzione ad una classe di
problemi
Lo schema di esecuzione di un algoritmo
specifica che i passi devono essere eseguiti in
sequenza, salvo diversa indicazione
25
Algoritmo
Ogni algoritmo concepito per interagire con
lambiente esterno per acquisire dati e
comunicare messaggi o risultati;
i dati su cui opera unistruzione sono forniti
dallesterno o sono frutto di istruzioni eseguite
in precedenza
26
Algoritmo
Algoritmo
Si vuole ricercare, allinterno di un mazzo di chiavi,
quella che apre un dato lucchetto
Algoritmo:
1) Si seleziona una chiave dal mazzo e la si marca con un
pennarello
2) Si tenta di aprire il lucchetto con la chiave appena
marcata; se funziona, si va al passo 4)
3) Altrimenti, si controlla la chiave successiva
3.1) Se non marcata, la si marca e si torna al passo 2)
3.2) Viceversa, si prende atto che nel mazzo non
presente la chiave che apre il lucchetto
4) Fine della ricerca
28
Algoritmo
Somma di un insieme di numeri
Dati da elaborare: un insieme di numeri (che sar noto
solo nel momento in cui lalgoritmo verr eseguito).
Risultato desiderato: la loro somma.
Un possibile algoritmo: scorrere la sequenza dei numeri,
dal primo allultimo, e addizionare ogni numero alla
somma di quelli precedenti
(che inizialmente sar pari a zero).
29
Algoritmo
Esempio: calcolare la somma dei numeri 5, 7, 4, 9, 2. Somma iniziale: 0
primo passo: 5, 7, 4, 9, 2 nuova somma parziale: 0 + 5 = 5
secondo passo: 5, 7, 4, 9, 2 nuova somma parziale: 5 + (7) = 2
terzo passo: 5, 7, 4, 9, 2 nuova somma parziale: 2 + 4 = 2
quarto passo: 5, 7, 4, 9, 2 nuova somma parziale: 2 + 9 = 11
quinto passo: 5, 7, 4, 9, 2 nuova somma parziale: 11 + (2) = 9
Risultato: 9.
30
Problemi e istanze
Unistanza di un problema corrisponde a un
particolare valore dei suoi dati dingresso.
Nellesempio precedente, i numeri 5, 7, 4, 9, 2
costituiscono una delle possibili istanze del problema
del calcolo della somma di un insieme di numeri.
Un algoritmo viene formulato per risolvere un
insieme di istanze di un dato problema, non per
una sola istanza.
In teoria un problema (come quello precedente) pu
avere infinite istanze.
31
Algoritmo
Problema: Calcolo delle radici reali di ax2+bx+c=0
Algoritmo:
1) Input coefficienti a,b,c
2) Calcolare = b24ac
3) Se <0 non esistono radici reali, eseguire listruzione 7)
4) Se =0, x1=x2=b/2a, poi eseguire listruzione 6)
5) x1=(b+)/2a, x2=(b)/2a
6) Output dei valori x1, x2
7) Fine
32
Algoritmo
es. Calcolare il M.C.D. di due interi a,b, con a>b
Algoritmo: Formalizzato da Euclide nel 300 a.C., si basa sul
fatto che:
ogni divisore comune ad a e b anche divisore del resto r
della divisione intera di a per b, quando a>b e r0;
se r=0, b il M.C.D.
MCD(a,b) = MCD(b,r), se r0
MCD(a,b)=b, se r=0
33
Algoritmo
es. Calcolare il M.C.D. di due interi a,b, con a>b
1) Acquisire i valori di a e b
2) Se b>a, scambiare i valori di a e b
3) Calcolare il resto r della divisione intera di a per b
4) Se r=0, MCD(a,b)=b; comunicare il risultato
allesterno; eseguire listruzione 6)
5) Se r0, sostituire il valore di a con il valore di b ed
il valore di b con il valore di r; tornare al passo 3)
6) Fine
34
35
Assegnazione
Listruzione di assegnazione definisce il valore attuale di
una variabile, che resta inalterato fino allassegnazione
successiva
Lassegnazione si rappresenta con i simboli o =:
nome di variabile espressione
nome di variabile = espressione
che si legge assegna alla variabile nome di variabile il
valore di espressione; lespressione a destra di
costituita da variabili, costanti e operatori
Lassegnazione viene cos eseguita:
a) si valuta lespressione a destra di , sostituendo ai nomi
di variabile i loro valori attuali; il risultato deve
appartenere allinsieme di definizione della variabile a
sinistra di | =
37
Assegnazione
I nomi delle variabili possono essere scelti in modo
arbitrario, ma opportuno selezionare nomi
significativi del contenuto della variabile
necessario rispettare la regola dellordinamento:
Quando una variabile appare a destra di in una
assegnazione deve essere gi istanziata
cio le deve essere gi stato assegnato un valore
38
Istruzioni
Istruzioni operative, che producono risultati
Istruzioni di controllo, che controllano il verificarsi di condizioni
specificate e, in base al risultato del controllo, determinano il flusso di
istruzioni da eseguire
Istruzioni di salto, che alterano il normale flusso di esecuzione
sequenziale delle istruzioni di un algoritmo, specificando quale sia la
successiva istruzione da eseguire
nelle istruzioni di salto condizionato, leffettiva esecuzione del salto
legata al verificarsi di una condizione specificata
listruzione di salto incondizionato produce sempre un salto
Istruzioni di Input/Output, che specificano come debba essere effettuata
una trasmissione di dati o messaggi fra lalgoritmo e lambiente esterno
Istruzioni di inizio/fine esecuzione, che indicano linizio/la fine
dellalgoritmo
39
Algoritmo
Problema: Calcolo delle radici reali di ax2+bx+c=0
Algoritmo:
1) Input coefficienti a,b,c
2) Calcolare = b24ac
3) Se <0 non esistono radici reali, eseguire listruzione 7)
4) Se =0, x1=x2=b/2a, poi eseguire listruzione 6)
5) x1=(b+)/2a, x2=(b)/2a
6) Output dei valori x1, x2
7) Fine
40
Proposizioni e predicati
Una proposizione un costrutto linguistico del quale si pu
asserire o negare la veridicit
Esempi
1) Roma la capitale della Gran Bretagna falsa
2) 3 un numero intero vera
Una proposizione un predicato se il suo valore di verit
dipende dallistanziazione di alcune variabili
Esempi
1) la variabile et minore di 30
2) la variabile base maggiore della variabile altezza
42
Proposizioni e predicati
La valutazione di un predicato loperazione che permette di
determinare se il predicato vero o falso, sostituendo alle
variabili i loro valori attuali
I valori vero e falso sono detti valori logici o booleani
Proposizioni e predicati possono essere espressi per mezzo
degli operatori relazionali:
= (uguale)
> (maggiore)
(maggiore o uguale)
(diverso)
< (minore)
(minore o uguale)
43
Proposizioni e predicati
Dato un predicato p, il predicato not p, detto opposto o
negazione logica di p, ha i valori di verit opposti rispetto a p;
Dati due predicati p e q, la congiunzione logica p and q un
predicato vero solo quando p e q sono entrambi veri, e falso
in tutti gli altri casi
Dati due predicati p e q, la disgiunzione logica p or q un
predicato falso solo quando p e q sono entrambi falsi, e vero
in tutti gli altri casi
I predicati nei quali compare almeno un operatore logico,
not, and, or, sono detti composti
La tavola di verit di un predicato composto specifica il valore
del predicato per ognuna delle possibili combinazioni dei suoi
argomenti
44
Predicati composti
not (base > altezza)
vero solo quando il valore di base minore o uguale
del valore di altezza
et > 30 and et < 50
vero solo quando il valore di et compreso tra 30 e
50 (esclusi)
base > altezza or base > 100
vero quando il valore di base maggiore del valore di
altezza, o quando il valore di base maggiore di 100, o
quando entrambe le condizioni sono verificate
45
46
47
48
49
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
50
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
51
Operazioni fondamentali
Algoritmo per sommare due numeri
5. se ci 10 ci = ci -10 e riporto = 1, altrimenti riporto = 0
5. se ci 10
ci = ci -10 e riporto = 1
altrimenti
riporto = 0
52
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
53
54
55
Teorema di Jacopini-Bhm
Qualunque algoritmo puo essere descritto utilizzando
soltanto le tre strutture fondamentali:
Sequenza
Diramazione
Iterazione
56
Esercizi
Scrivere un algoritmo che riceva in ingresso un dato
X e calcoli X2 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.
57
Stampa max
58
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
59
Diagrammi di flusso
START
Input/Output
istruzione
STOP
60
Diagrammi di flusso
vero
falso
proposizione
vero
proposizione
1
1
falso
61
Diagrammi di flusso
Falso
Vero
proposizione
sequenza
diramazione
IF THEN ELSE
62
Diagrammi di flusso
falso
proposizione
vero
proposizione
falso
vero
while
repeat until
63
Diagrammi di flusso
Un diagramma a blocchi un insieme di blocchi elementari
composto da:
un blocco iniziale
un blocco finale
un numero finito n (n1) di blocchi di azione e/o di blocchi di
lettura/scrittura
un numero finito m (m0) di blocchi di controllo
64
Diagrammi di flusso
Linsieme dei blocchi elementari che descrivono un algoritmo deve
soddisfare le seguenti condizioni:
ciascun blocco di azione o di lettura/scrittura ha una sola freccia
entrante ed una sola freccia uscente
ciascun blocco di controllo ha una sola freccia entrante e due
frecce uscenti
ciascuna freccia entra in un blocco oppure si innesta in unaltra
freccia
ciascun blocco raggiungibile dal blocco iniziale
il blocco finale raggiungibile da qualsiasi altro blocco
Un blocco B raggiungibile a partire da un blocco A se esiste una
sequenza di blocchi X1,X2,...,Xn, tali che A=X1, B=Xn, e Xi,
i=1,...,n1, Xi connesso con una freccia a Xi+1
65
analisi strutturata
I programmatori inesperti tendono ad aggrovigliare il
programma introducendo numerosi salti privi di regole (spaghetti
programming)
Lanalisi strutturata favorisce la descrizione di algoritmi
facilmente documentabili e comprensibili
I blocchi di un diagramma a blocchi strutturato sono collegati
secondo i seguenti schemi:
Schema di sequenza pi schemi di flusso sono eseguiti in
sequenza
Schema di selezione un blocco di controllo subordina
lesecuzione di due possibili schemi di flusso al verificarsi di una
condizione
Schema di iterazione si itera lesecuzione di un dato schema di
66
flusso
analisi strutturata
un diagramma a blocchi strutturato un diagramma a blocchi
nel quale gli schemi di flusso sono strutturati
Uno schema di flusso strutturato quando soddisfa una delle
seguenti propriet:
1) uno schema elementare o di sequenza
67
analisi strutturata
2) uno schema di selezione
analisi strutturata
3) uno schema di iterazione
analisi strutturata
Luso dellanalisi strutturata garantisce:
facilit di comprensione e modifica dei diagrammi a blocchi
maggiore uniformit nella descrizione degli algoritmi
analisi strutturata
teorema fondamentale della programmazione di Bohm
Jacopini, 1966:
ogni programma pu essere codificato riferendosi
esclusivamente ad un algoritmo strutturato e quindi
attenendosi alle tre strutture fondamentali:
Sequenziale
Iterativa
Condizionale
71
analisi strutturata
In un diagramma strutturato non apparir mai una
istruzione di salto incondizionato
I tre schemi fondamentali possono essere concatenati,
uno di seguito allaltro, o nidificati, uno dentro laltro; non
possono in nessun caso essere intrecciati o accavallati
72
analisi strutturata
Diagramma a blocchi per
la selezione, in un mazzo
di chiavi, di quella che
apre un lucchetto
1) Si seleziona una chiave dal mazzo e la si
marca con un pennarello
2) Si tenta di aprire il lucchetto con la chiave
appena marcata; se funziona, si va al passo 4)
3) Altrimenti, si controlla la chiave
successiva
3.1) Se non marcata, la si marca e si
torna al passo 2)
3.2) Viceversa, si prende atto che nel
mazzo non presente la chiave che
apre il lucchetto
4) Fine della ricerca
73
Esercizi
Rappresentare lalgoritmo per il calcolo della distribuzione
dellet.
Rappresentare lalgoritmo per il calcolo di xy.
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)
74
Pseudocodifica
La pseudocodifica un linguaggio per la descrizione di
algoritmi secondo le regole della programmazione strutturata
La descrizione di un algoritmo in pseudocodifica si compone
di due parti:
la dichiarazione delle variabili usate nellalgoritmo
descrizione delle azioni dellalgoritmo
75
Pseudocodifica
Tipo delle variabili
Il tipo di una variabile indica linsieme dei valori che possono
essere assegnati a quella variabile
integer, real, boolean, string
Su costanti e variabili di un tipo possibile effettuare le
operazioni che sono proprie di quel tipo
76
Pseudocodifica: Dichiarazione
delle variabili
Elenco, preceduto dalla parola var, delle variabili sulle quali
lalgoritmo opera
Le variabili sono suddivise per tipo: quelle dello stesso tipo sono
separate luna dallaltra da una ,
Lelenco delle variabili dello stesso tipo seguito dai : e
dallindicazione del tipo;
Esempio:
var i, j, a(20): integer;
p, q: real;
nome: string;
sw: boolean;
77
78
79
Esempio:
Esempio:
x.
1. Leggi in input un numero e chiama x il
numero letto;
2. Assegna il valore 1 alla variabile i;
3. Calcola xi e assegna alla variabile y il
risultato;
4. Stampa y;
5. Calcola i+1 e assegna alla variabile i il
risultato;
6. Se i10 allora vai al passo 3 altrimenti
prosegui;
7. Fermati.
Esercizio: rappresentare il flow-chart
utilizzando literazione per vero a
controllo iniziale
No
i>10
Si
Esempio:
massimo