PPTX - WordPress.com

annuncio pubblicitario
La rappresentazione degli
algoritmi
La rappresentazione degli
algoritmi
1
Algoritmo
• Un algoritmo è una successione finita
di tutte le operazioni da compiere per
risolvere un problema
2
Scrivere un algoritmo
• Abbiamo detto che possiamo utilizzare il
linguaggio naturale per descrivere un algoritmo
• Abbiamo anche detto che possiamo utilizzare un
linguaggio di programmazione
• Vediamo come schematizzare un algoritmo con
una rappresentazione che ci permetta di passare
dal linguaggio naturale a quello formale
3
Rappresentazione di una
algoritmo
• Un algoritmo può essere diviso in tre parti
Intestazione
Nome dell’algoritmo
Sezione
dichiarativa
Gli oggetti (dati) che vengono
usati dall’algoritmo
Sezione
esecutiva
Compresa tra le parole inizio e
fine: elenca le operazioni che
l’esecutore deve compiere
4
Intestazione
• Il titolo dell’algoritmo deve
essere significativo e deve
ricordare, anche a distanza
di tempo, l’obiettivo del
problema
• Esempi
– Se l’algoritmo calcola la somma tra due numeri,
un titolo giusto può essere SommaNumeri;
– Se l’algoritmo calcola l’area di un triangolo, un
nome appropriato può essere AreaTriangolo.
5
Sezione dichiarativa
• Sono elencati gli oggetti utilizzati dal
problema: notare che sono indicati i nomi e
non i valori degli oggetti perché vogliamo
costruire algoritmi che possono essere usati
più volte con valori diversi per gli oggetti
• Per questo motivo l’algoritmo
non contiene valori fissi, ma
nomi che fanno da segnaposto per i valori
effettivi, cioè contiene variabili.
6
Esempio sezione dichiarativa
• Le formule matematiche utilizzano
L’area A di un rettangolo si ottiene
variabili
moltiplicando b x h. Il valore effettivo
A=bxh
dell’area si ottiene sostituendo alle lettere
b e h i valori della base e dell’altezza di un
particolare rettangolo
• Quando il valore assunto da un oggetto
può cambiare da un’elaborazione all’altra,
si dice che l’oggetto è una variabile.
• Quando il valore assunto da un oggetto
non cambia da un’elaborazione all’altra, si
dice che l’oggetto è una costante.
7
Sezione esecutiva
• Indica all’esecutore il processo risolutivo,
quindi è necessario fornire l’elenco
dettagliato e finito delle operazioni da
compiere e l’ordine preciso con cui
devono essere svolte.
• Le operazioni è opportuno che siano
espresse sotto forma di di indicazioni
usando i verbi all’imperativo (dichiara,
immetti, assegna, controlla, scrivi,
stampa), cioè sotto forma di istruzioni.
8
Esempi di algoritmi
• Esempi elementari
– una ricetta di cucina;
– le istruzioni di utilizzo di
un elettrodomestico;
– le regole per eseguire la
divisione tra due numeri.
• Notare che è sempre
sottointesa la presenza
di un esecutore
9
Caratteristiche basilari di un
algoritmo
Finito
• Un algoritmo deve essere composto da un numero finito di
istruzioni e deve presentare un punto di inizio dove comincia il
procedimento risolutivo e un punto di fine, raggiunto il quale si
interrompe l’esecuzione delle istruzioni
Esaustivo
• Un algoritmo deve essere completo nel senso che, per tutti i casi
che si possono verificare durante l’esecuzione, deve essere
indicata la soluzione da seguire
Riproducibile
• Ogni successiva esecuzione dello stesso algoritmo con i
medesimi dati iniziali deve produrre sempre i medesimi risultati
finali
10
Il linguaggio della pseudocodifica
Descrizione
Parola chiave
Esempi
Sezione
dichiarativa
Dichiarare i dati da utilizzare
specificandone il nome e il tipo
dichiara
dichiara Lato come intero
dichiara Pi come costante
dichiara Raggio come reale
Sezione
esecutiva
Delimitare l’algoritmo
inizio
fine
Istruzione di acquisizione dati:
parola chiave seguita dal nome
della variabile da leggere.
immetti
(o leggi
o acquisisci)
leggi Nome
leggi Lato
immetti Raggio
Istruzione per la comunicazione
dei dati: parola chiave seguita
dal nome della variabile da
scrivere.
scrivi
(o comunica)
scrivi Lato
scrivi Raggio
Assegnare un valore a una
variabile
assegna (o
calcola)
(spesso la
parola chiave
non viene
scritta)
assegna A=B+C (il valore
calcolato B+C viene
assegnato alla variabile A,
assegnazione a sinistra)
11
Esempio di algoritmo
Scrivere un algoritmo per il calcolo del perimetro e dell’area
di un rettangolo
• Dati di input: la base, Base, e l’altezza del rettangolo,
Altezza. Entrambi sono di tipo reale (numero con la virgola).
• Dati di output: il perimetro, Perimetro, e l’area, Area.
Entrambi sono di tipo reale.
• Risoluzione:
– formula per il calcolo del perimetro:
Perimetro = 2*(Base + Altezza)
– formula per il calcolo dell’area: Area = Base * Altezza
• Nell’algoritmo si deve prevedere:
– l’acquisizione del valore della base e dell’altezza
– Il calcolo del perimetro e dell’area
– La comunicazione dei valori calcolati del perimetro e
dell’area.

12
Esempio di algoritmo (continua)
riga di intestazione
Algoritmo AreaRettangolo
sezione dichiarativa
variabili
dichiara Base, Altezza, Perimetro, Area come reali
sezione esecutiva
inizio
leggi Base
leggi Altezza
assegna Perimetro = 2*(Base + Altezza)
scrivi Perimetro
assegna Area = Base * Altezza
scrivi Area
fine.
13
Riepilogo
• Questa modalità di scrittura prende il
nome di linguaggio di pseudocodifica (o
linguaggio di progetto), perché serve a
descrivere l’algoritmo prima di tradurlo in
un linguaggio comprensibile alla
macchina, cioè prima della codifica.
• La traduzione dell’algoritmo in un
linguaggio comprensibile alla macchina si
chiama programma o codice e il
linguaggio utilizzato si chiama linguaggio
di programmazione.
14
Convenzioni
• Notare nella scrittura
dell’algoritmo
l’indentazione, cioè il
modo di scrivere alcune
righe più a destra di altre
in modo da evidenziarne
l’appartenenza a una
sezione o a un gruppo di
istruzioni.
• Scegliamo di indicare le variabili e il nome
dell’algoritmo con lettera iniziale maiuscola.
• Nel caso di nomi composti da più parole, le parole
sono scritte una di seguito all’altra con iniziali
maiuscole.
15
Operazioni frequenti
• Notare le seguenti istruzioni frequenti
– incremento di 1 di una variabile
assegna A = A + 1
– decremento di 1 di una variabile
assegna A = A − 1
• Il simbolo "=" non deve essere considerato
come l’operatore di uguaglianza tra due
espressioni, ma come assegnazione alla
variabile indicata a sinistra dell’espressione
calcolata a destra
16
Operatori
Operatori aritmetici
+ per l’addizione
Operatori di relazione
(per confrontare)
− per la sottrazione
= uguale
* Per la moltiplicazione
< minore
/ per la divisione
<= minore o uguale
^ per l’elevamento a potenza
> maggiore
Operatori logici
AND per il prodotto logico
>= maggiore o uguale
<> diverso
OR per la somma logica
NOT per la negazione
17
Il diagramma di flusso
• Un algoritmo può essere
descritto usando uno schema
grafico chiamato diagramma
di flusso (o flow-chart).
• La schematizzazione grafica è
più efficace nella
presentazione e rende più
facile la lettura e la
comprensione dell’algoritmo
18
Simboli standard
Inizio
Leggi
Fine
Scrivi
Simboli ovali per l’inizio e la fine
del diagramma.
Il parallelogramma per indicare
l’acquisizione o la comunicazione
dei dati in ingresso e uscita.
Il
rettangolo
per
indicare
un’operazione di assegnazione o
un calcolo.
sì
no
Il rombo per indicare la scelta tra
due possibilità (vero/falso, sì/no).
19
Esempio
Inizio
Leggi Base
Leggi Altezza
Perimetro = 2*(Base + Altezza)
Scrivi Perimetro
Area = Base * Altezza
Scrivi Area
Fine
20
Le strutture di controllo
All’interno di un algoritmo, le istruzioni sono
organizzate secondo schemi nel seguente modo
Sequenza
• Istruzioni che devono essere eseguite una dopo l’altra secondo l’ordine
con cui sono state scritte
Selezione
• Istruzioni raggruppate in alternativa con altre sulla base del controllo di
una condizione: se la condizione è vera si procede ad eseguire un certo
gruppo di istruzioni, se è falsa si esegue un altro gruppo di istruzioni
Iterazione
• Istruzioni che devono essere eseguite in ripetizione, cioè in modo
iterativo
21
Teorema di Böhm-Jacopini
• Qualsiasi algoritmo può essere scritto
utilizzando solamente tre strutture di
base: sequenza, selezione, iterazione.
• Queste tre strutture sono chiamate
strutture di controllo.
22
La sequenza
• La sequenza indica l’ordine in cui devono
essere eseguite le istruzioni.
• Nel linguaggio di pseudo codifica appare così
inizio
istruzione1
istruzione2
……
……
……
istruzionen
fine
23
La selezione binaria
• La selezione binaria (o alternativa)
consente di fare una scelta tra due
alternative.
se condizione
allora
istruzione1
altrimenti
istruzione2
fine se
Falso
istruzione2
condizione
Vero
istruzione1
24
La selezione binaria (continua)
• Le istruzione nei due rami vero/falso
possono essere più di una.
se condizione
allora
istruzione a1
istruzione a2
Falso
……
istruzione an
altrimenti
istruzione b1
istruzione b2
……
istruzione bn
fine se
condizione
Vero
istruzione b1
istruzione a1
istruzione bn
istruzione an
25
Esempio di selezione
• Il seguente frammento di pseudocodice
calcola il quadrato di un numero se è
positivo, altrimenti ne calcola il doppio
se A>0
allora
assegna B = A^2
scrivi B
altrimenti
assegna C = 2*A
scrivi C
fine se
26
Assenza di alternativa
• Se dobbiamo calcolare qualcosa solo in
una determinata condizione,
l’istruzione è la seguente
se condizione
allora
istruzione
fine se
condizione
Vero
istruzione1
Falso
27
La selezione multipla
• La struttura selezione multipla permette di
selezionare tra più di due alternative in base al
valore di una variabile di controllo della selettore
seleziona il valore del selettore
nel caso valore1
istruzione1
nel caso valore2
istruzione2
:::
nel caso valoren
istruzionen
fine se
28
La selezione multipla (continua)
• È possibile raggruppare più valori in un unico
caso separandoli con una virgola oppure indicare
un intervallo con valore iniziale e finale
seleziona il valore del selettore
nel caso valore1, valore2, valore3
istruzione
:::
fine se
oppure
seleziona il valore del selettore
nel caso da valore1 a valore2
istruzione
:::
fine se
29
L’iterazione
• La terza struttura di controllo
fondamentale per la costruzione di
algoritmi è l’iterazione (o ripetizione o
ciclo).
• Distinguiamo tre tipi di iterazione
– iterazione per falso
– iterazione per vero
– iterazione enumerativa (o con contatore)
30
Iterazione per falso
L’iterazione per falso indica fino a quando
un gruppo di istruzioni deve essere eseguito
esegui
istruzione1
Istruzione2
:::
istruzionen
ripeti finché condizione
istruzione1
Istruzione2
::::
istruzionen
condizione
Falso
Vero
Non si sa quante volte viene eseguito il ciclo.
Le istruzioni sono eseguite almeno una volta.
31
Esempio iterazione per falso
Controllare che il numero del mese inserito sia compreso tra 1 e 12
Dati in input: numero del mese M
Dati in output: numero inserito dopo il controllo
Risoluzione: dopo avere inserito il valore si controlla e si ripete la
richiesta fino a quando M è maggiore di 0 e minore di 13
Algoritmo Mesi riga di intestazione
sezione dichiarativa
variabili
dichiara M come intero
sezione esecutiva
inizio
esegui
leggi M
ripeti finché M>0 and M<13
scrivi M
fine
Inizio
leggi M
Falso
M>0 and
M<13
Vero
scrivi M
Fine
32
Iterazione per vero
L’iterazione per vero ripete l’esecuzione di un gruppo
di istruzioni mentre una condizione si mantiene vera
esegui mentre condizione
istruzione1
Istruzione2
:::
istruzionen
ripeti
condizione
Falso
Vero
Non si sa quante volte viene eseguito il ciclo. Le
istruzioni potrebbero non essere eseguite nemmeno
una volta.
33
Esempio iterazione per vero
Sottrarre ripetutamente 5€ da un importo se è superiore o uguale.
Dati in input: importo
Dati in output: /
Risoluzione: dopo avere inserito l’importo, se è superiore o uguale a
5, si sottrae 5 e si ripete mentre la condizione rimane vera
Algoritmo Sottrai riga di intestazione
variabili
sezione dichiarativa
dichiara Importo come reale
dichiara Quota = 5 come costante
sezione esecutiva
inizio
leggi Importo
esegui mentre Importo >= Quota
Importo = Importo − Quota
ripeti
fine
Inizio
leggi Importo
Importo >=
Quota
Falso
Vero
Importo = Importo − Quota
Fine
34
Iterazione enumerativa
L’iterazione enumerativa rappresenta in forma
compatta la ripetizione di un gruppo di istruzioni
nel caso di un numero prefissato di volte
per variabile = valore iniziale
fino a valore finale
istruzione1
Istruzione2
Simboli grafico per
:::
rappresentare
istruzionen l’iterazione
enumerativa
ripeti
istruzione1
Istruzione2
::::
istruzionen
Le istruzioni sono eseguite un numero
preciso di volte conosciuto in anticipo
35
Esempio iterazione enumerativa
Dati gli importi relativi agli incassi per ciascun mese
dell’anno, calcolare l’incasso totale e la media
mensile.
Dati in input: incasso di ciascun mese dell’anno
Dati in output: incasso totale dell’anno e incasso
medio mensile
Risoluzione: all’inizio viene azzerato il totale dell’anno;
con una ripetizione si acquisiscono i valori degli incassi
di ciascun mese e si sommano al totale. Alla fine della
ripetizione si calcola l’incasso medio (totale/12). I
risultati dell’alaborazione sono il totale dell’anno e
l’importo medio.

36
Esempio (continua)
riga di intestazione
Algoritmo Incassi
sezione dichiarativa
variabili
dichiara incasso, totale, media come numeri reali
inizio
sezione esecutiva
assegna totale = 0
per mese = 1 fino a 12
leggi incasso
assegna totale = totale + incasso
ripeti
assegna media = totale / 12
scrivi totale
scrivi media
fine

37
Esempio (continua)
Inizio
totale = 0
per mese = 1 fino a 12
leggi incasso
totale = totale + incasso
media = totale /12
scrivi totale
scrivi media
Fine
38
Dall’algoritmo al programma
• Un linguaggio di programmazione
viene utilizzato per tradurre l’algoritmo
• Il risultato è un programma
• La persona in grado di scrivere un
programma è detta programmatore
• Il programma si chiama anche codice,
per questo motivo la traduzione
dell’algoritmo in un programma si
indica con il termine codifica
39
Fasi di traduzione: il compilatore
Testo del programma
Analisi lessicale e sintattica
Programma compilato
Collegamento
Programma
eseguibile
Sorgente
Il testo di un programma è
detto sorgente
Compilatore
Il programma sorgente
viene tradotto in
linguaggio macchina
(tutte cifre 0 e 1) dal
compilatore
Oggetto
Linker
Alla fine si ottiene il
programma eseguibile
Il risultato della
compilazione si chiama
programma oggetto
La compilazione è seguita da una operazione di
collegamento (linking)
tra varie parti del codice
oggetto. È effettuata dal
linker
40
Tipi di errori
Errori lessicali
• Uso di termini non appartenenti al linguaggio
Errori sintattici
• Costruzione di frasi non corrette dal punto di vista delle regole
grammaticali
Errori logici
• Riguarda la correttezza dell’algoritmo: il programma non produce i
risultati attesi
Errori di runtime
• Situazioni che si possono verificare durante l’esecuzione del programma
sulla base di particolari valori delle variabili (esempio: divisione per 0)
41
L’interprete
• Per alcuni linguaggi di programmazione,
invece del compilatore, si usa un
programma traduttore detto interprete,
che trasforma il programma sorgente in
linguaggio macchina una istruzione alla
volta facendola eseguire subito dopo
averla trasformata.
42
Scarica