agli Algoritmi
Marzio Pennisi
1
Argomenti trattati
Algoritmi;
P ropri e t degli Algoritmi;
Descrizione;
C o s t a n t i e V a ria bili;
Proposizioni e Predicati;
D i a g r a m m i a blocchi;
S c h e m i f o n d a m e n t a l i di
Composizione;
A l g o r i t m i i t e r a t i v i e A l g o r i t m i r i c o r s i v i
Algoritmo: definizione
ANALISI PROGRAMMAZIONE
ALGORITMO PROGRAMMA
+ +
DATI DATI
ESECUZIONE DA PARTE
ESECUZIONE DA PARTE
DELLUOMO +
DELLELABORATORE
MACCHINA CALCOLATRICE
RISULTATO RISULTATO
Analisi e p r o g r a m m a z i o n e
Schema per la soluzione di problema
nuovi classi di problemi
ANALISI
algoritmo
PROGRAMMAZIONE
ELABORAZIONE
risultato
Primi esempi di algoritmo
Esempio: Ordinamento di un mazzo di 40 carte
Algoritmo (possibile):
1. inizio dellalgoritmo;
4. Prendere nellordine il mazzetto dei cuori, dei quadri, dei fiori e delle picche;
5. fine dell'algoritmo.
Primi esempi di algoritmo (segue)
Esempio: Calcolo delle radici delle equazioni di secondo grado.
Problema: Determinare le radici x1, x2, dellequazione di secondo grado ax 2 +bx+ c=0. Il
procedimento prevede il calcolo del determinante =b 2 - 4ac. Se > 0 si hanno due radici
reali e distinte x1 e x2 = [-b () ] /2a. Se = 0 si hanno due radici reali coincidenti x1
e x2 = -b/2a. Se < 0 non si hanno radici nel campo dei numeri reali.
Algoritmo (possibile):
1. inizio dellalgoritmo;
2. Introdurre i valori di a, b e c;
3. Calcolare =b 2 - 4ac ;
6. Se < 0 restituire il messaggio non esistono radici reali e poi passare allistruzione 8 ;
7. Restituire x1 e x2;
8. Fine dellalgoritmo.
Algoritmo: istruzioni e dati
Fino ad adesso sono state utilizzate delle proposizioni per descrivere un algoritmo.
Le proposizioni sono composte di due parti:
ISTRUZIONI DATI
calcola b2 - 4ac 4, a, b, c,
porre.x1=x2 x1 e x2
suddividere in quattro mazzetti mazzo di carte
I DATI: Costanti e variabili
valore
nome
Costanti e variabili
Data una variabile <x,v> si dice che x il nome della variabile e che v il
valore attuale della variabile di nome x (oppure, pi semplicemente, che v il
valore di x).
Quel valore resta inalterato finch una successiva assegnazione non modifica il
valore stesso.
L'assegnazione rappresentata da
A d esempio,se abbiamo
b c
a b c
Utilit delle assegnazioni
Con l'utilizzo delle variabili e della assegnazione possibile esprimere in modo
pi conciso le azioni descritte in un algoritmo. Ad esempio, una operazione
come "calcolare il volume di un parallelepipedo per mezzo del prodotto dei
valori delle tre dimensioni" pu essere espressa come:
Ogni volta che una variabile compare a destra di una operazione di assegnazione
necessario che a quella variabile sia stato precedentemente gi associato un
valore!!!
Algoritmo: Tipi di istruzione
1. inizio dellalgoritmo;
Istruzione di inizio esecuzione
Esempio:
la variabile et minore di 30;
la variabile base ha un valore maggiore di quello della variabile altezza
Valutazione di un predicato
Valutazione del predicato l'operazione che permette di determinare se il
predicato vero o falso sostituendo alle variabili i loro valori attuali.
I due valori "vero" o "falso" sono detti valori logici o valori booleani.
p AND q p q p OR q p q
vero vero vero vero vero vero
1) Inizio dellalgoritmo
2) acquisire dallesterno il valore di n;
3) a 2n
4) b a - 1
5) c a + b
6) Restituire c
7) Fine dellalgoritmo
Analisi di algoritmi (segue)
Metodologie per la soluzione dei problemi
26
Flowcharts
( diagrammi di flusso o a blocchi)
a) un blocco iniziale;
b) un blocco finale;
c) un numero finito n (n 1) di blocchi di azione
e/ o di lettura-scrittura
d) un numero finito m (m 0) di blocchi di
controllo
Flowcharts (segue)
BEGIN END
falso vero
A
LEGGI A SCRIVI A
Si noti come l'operazione "scambiare i valori di a e b" stata realizzata con la sequenza di assegnazioni
Infatti per scambiare i valori di due variabili sempre necessaria una variabile di appoggio (in
questo caso x) in quanto l'assegnazione distruttiva nel senso che quando si assegna un nuovo
valore ad una variabile non si ha memoria del suo valore precedente. Pertanto se le variabili a e
b fossero:
una sequenza di
assegnazioni
N.B. Ogni schema fondamentale ha un unico punto di ingresso ed un unico punto di uscita.
Schema di sequenza
Mette in evidenza la composizione di n schemi di flusso che devono essere eseguiti
uno dopo l'altro. Graficamente appare come:
S c h e m i f o n d a m e n t a l i di c o m p o s i z i o n e (segue)
Schema di selezione
Esiste un blocco di controllo. La condizione indicata determina due diversi
comportamenti; uno da seguire nel caso che la condizione abbia valore di verit vero, laltro
nel caso abbia valore di verit falso.
Schemi di iterazione
Mette in evidenza il fatto che uno stesso schema S deve essere ripetutamente eseguito pi volte. Due possibili
modi di iterazione sono illustrati nellimmagine seguente:
a) lo schema S pu anche non essere mai eseguito, nel caso che la condizione C sia subito falsa
b) S eseguito sempre almeno una volta.
Gli schemi di flusso sono aperti quando si ha una sola esecuzione di una sequenza di blocchi elementari;
Gli schemi di flusso sono chiusi quando si pu avere pi di una esecuzione di una sequenza di blocchi elementari.
Un ciclo definito quando si conosce a priori il numero di volte che deve essere eseguito. Un ciclo
definito detto anche ciclo enumerativo.
In questo caso si usa la tecnica del contatore: una variabile, detta contatore del ciclo, che conta
quante volte istruzioni del ciclo sono state eseguite.
Decremento del contatore: il contatore viene inizializzato con un valore uguale al numero di volte
che il ciclo deve essere eseguito e decrementato di uno ogni volta che il ciclo eseguito. Si ha una
uscita quando il valore del contatore raggiunge il valore 0.
Un ciclo indefinito quando non possibile conoscere a priori quante volte deve essere eseguito.
In questo caso la condizione di fine ciclo viene fatta controllando valore di una o pi variabili. I valori di
queste variabili sono modificati da istruzioni che fanno parte della iterazione.
Algoritmi iterativi
Accade molto spesso che, per risolvere un problema, un lo stesso insieme di operazioni debba essere
eseguito un numero opportuno di volte.
Molto semplici da scrivere e pensare, ma meno efficienti sul calcolatore degli algoritmi iterativi.
L'algoritmo richiama se stesso generando una sequenza di chiamate che ha termine al verificarsi di
una condizione particolare che viene chiamata condizione di terminazione, che in genere si ha con
particolari valori di input.
Esempio: Calcolo del fattoriale n! (si ricorda che 0!=1, 1!=1 e n! = n *(n-1)*(n-2)*..*2*1).
FATT(5)
5 * FATT(4)
n=1
5 * 4 * FATT(3)
5 * 4 * 3 * FATT(2)
5 * 4 * 3 * 2 * FATT(1)
5 * 4 * 3 * 2 *1
NB: Ogni algoritmo ricorsivo pu essere convertito in un algoritmo iterativo.
Vettori (segue)
i <- i+1
Esercizio 1
Calcolare l a somma delle prime n potenze del 2 senza usare la formula:
Esercizio 2
Riscrivere lalgoritmo per il calcolo
del fattoriale esposto a fianco
utilizzando la tecnica del decremento
del contatore.
Esercizio 3
Scrivere un algoritmo che legge dei valori positivi in input fino allinserimento di un
valore minore o uguale a zero e li restituisce in ordine inverso (suggerimento: utilizzare i
vettori).