Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Marzio-Pennisi
Argomenti trattati
A l g o r i t m i ; - - P r o p r i e t --d e g l i - A l g o r i t m i ; Descrizione; C o s t a n t i --e - V a r i a b i l i -
P r o p o s i z i o n i - e --P r e d i c a t i ; ---
D i a g r a m m i --a - b l o c c h i ; -
Algoritmo: definizione
Il procedimento di analisi e p r o g r a m m a z i o n e l'insieme di tutte quelle attivit
che servono per risolvere problemi utilizzando un elaboratore e che vanno dalla
formulazione del problema fino alla predisposizione dell'elaboratore.
Scopo dell'analisi quello di definire un algoritmo .
nell'algoritmo
!
Un algoritmo n o n pu essere eseguito direttamente da un elaboratore.
Programma: definizione
Scopo della programmazione quello di definire un
programma.
!
sui
Analogie tra
u o m o ed elaboratore
ANALISI
PROGRAMMAZIONE
ALGORITMO+DATI
PROGRAMMA+DATI
ESECUZIONE)DA)PARTE)
DELLUOMO)+)
MACCHINA)CALCOLATRICE)
RISULTATO
ESECUZIONE)DA)PARTE)
DELLELABORATORE)
RISULTATO
Analisi e p r o g r a m m a z i o n e
Schema)per)la)soluzione)di))
nuovi)classi)di)problemi
problema
ANALISI
algoritmo
PROGRAMMAZIONE
Schema)per)la)soluzione)
di)problemi)gi)risolti)
con)nuovi)dati
programma
dati-+-elaboratore
ELABORAZIONE
risultato
ordinare il mazzo di carte in modo che le cuori siano poste per prime,
seguite dalle quadri, dalle fiori e dalle picche. Le carte di uno stesso seme
sono ordinate dall'asso al re.
Algoritmo (possibile):
!
1. inizio dellalgoritmo;
2. Suddividere il mazzo in 4 mazzetti; ciascun mazzetto costituito da tutte le carte
dello stesso
seme;
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 ;
4. Se > 0 porre x1=[-b + () ] /2a e x2=[-b - () ] /2a e poi passare allistruzione 7 ;
5. Se = 0 porre x1=x2= -b /2a e poi passare allistruzione 7 ;
6. Se < 0 restituire il messaggio non esistono radici reali e poi passare allistruzione 8 ;
7. Restituire x1 e x2;
8. Fine dellalgoritmo.
!
operazioni da eseguire (ISTRUZIONI)
oggetti sui quali eseguire le operazioni al fine di ottenere i risultati (DATI).
!
Esempi sugli algoritmi appena visti:
!
!
ISTRUZIONI
DATI
!
calcola b2 - 4ac
4, a, b, c,
porre. =
x1 e x2
suddividere in quattro mazzetti mazzo di carte
!
!
!
costante: tipo di dato che rimane sempre lo stesso durante una
esecuzione dellalgoritmo e anche per esecuzioni diverse dello
stesso algoritmo.
Variabile: U n a variabile una coppia <nome,valore>. Essa pu
essere immaginata come una scatola sulla quale scritto un
nome. Questa scatola pu contenere u n valore che pu
cambiare durante lesecuzione dellalgoritmo.
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).
Listruzione di assegnamento
Listruzione di assegnamento (assegnazione) o, pi semplicemente, assegnamento quella
particolare istruzione che permette di definire il valore attuale di una variabile.
Quel valore resta inalterato finch una successiva assegnazione non modifica il
valore stesso.
L'assegnazione rappresentata da
!
!
Assegnazione (segue)
A d esempio,se abbiamo
!
!
6
b
!
!
!
!
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!!!
inizio dellalgoritmo;
Introdurre i valori di a, b e c;
Istruzione di input
Istruzione di salto
Istruzioni
Se = 0 porre x1 x2 -b /2a e poi passare allistruzione 7 ;
di
controllo
Istruzione di salto
Se < 0 restituire il messaggio non esistono radici reali e poi passare allistruzione 8 ;
Restituire x1 e x2;
Istruzione di output
Fine dellalgoritmo.
Proposizioni e predicati
Una proposizione un costrutto
se vero o falso. Ad esempio:
dire
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.
In forma pi concisa possiamo scrivere:
et < 30
base
>
altezza
Predicati composti
inoltre possibile utilizzare allinterno di un predicato i seguenti operatori booleani:
AND (indicato anche con ^ )
OR ( indicato anche con v )
NOT (indicato anche con il simbolo di soprasegnato)
I predicati nei quali compare almeno un simbolo NOT, AND, OR sono detti predicati composti.
La tavola di verit di un predicato composto un modo di descrivere il significato un predicato.
Essa consiste nello specificare il valore del predicato per ognuna delle possibili combinazioni
degli argomenti del predicato.
Le tavole di verit dei predicati p AND q e p OR q sono le seguenti:
p AND q
p OR q
vero
vero
vero
vero
vero
vero
falso
falso
falso
vero
falso
falso
falso
vero
falso
vero
vero
falso
vero
falso
falso
falso
vero
falso
Analisi di algoritmi
Un algoritmo si ottiene come risultato di un procedimento di analisi che
pu essere suddiviso in tre fasi:
!
Ciascun sottoproblema pu successivamente essere riformulato fornendo una
descrizione sempre pi dettagliata ottenendo cos una seconda scomposizione del problema,
una terza scomposizione del problema e cos via fino ad ottenere una scomposizione, detta
scomposizione finale del problema che contenga solo descrizioni di operazioni direttamente
eseguibili.
Questa successione di operazioni direttamente eseguibili lalgoritmo.
!
Nei problemi particolarmente semplici, la prima scomposizione pu essere
direttamente composta da operazioni direttamente eseguibili.
!
Il metodo delle scomposizioni successive risulta particolarmente utile quando i
problemi da risolvere sono complicati. Gli esempi successivi sono introdotti soprattutto a scopo
illustrativo.
!
Per molti problemi (ad esempio algoritmi di ordinamento e cammino
minimo) possibile utilizzare delle metodologie pi avanzate
!
La scomposizione del problema in sottoproblemi pi piccoli (e quindi pi
semplici da risolvere) o approccio top-down un possibile procedimento
per approcciarsi ad un problema. Questo tipo di approccio anche
conosciuto come divide et impera o divide and conquer
!
Un altro approccio di che pi essere utilizzato lapproccio bottom up, che
parte dal caso base (semplice) e costruisce via via una soluzione
generale.
26
Flowcharts
( diagrammi di flusso o a blocchi)
La diagrammazione a blocchi un possibile linguaggio
generalizzato per la rappresentazione degli algoritmi
!
Il diagramma a blocchi o flowchart permette di realizzare una
descrizione grafica di un algoritmo
!
Un diagramma a blocchi indica il flusso (cio la
sequenza) delle operazioni da eseguire per realizzare la
trasformazione, descritta nell'algoritmo, dei dati iniziali per
ottenere i risultati finali.
Flowcharts (segue)
Un particolare simbolo grafico, detto blocco
e l e m e n t a re o pi semplicemente blocco ,
associato ad ogni tipo di istruzione.
!
Flowcharts (segue)
a)
un blocco iniziale;
b)
un blocco finale;
c)
d)
Flowcharts (segue)
BEGIN
END
Blocco)di)inizio
Blocco)finale
A
Blocco)operativo
LEGGI-A
Blocco)di)I/O)(lettura)
falso
vero
Blocco)di)controllo
SCRIVI-A
Blocco)di)I/O)(scrittura)
Flowcharts (segue)
Esempio: Diagramma
M . C . D . (a,b)
a b l o c c h i d e l l ' a l g o r i t m o p e r il c a l c o l o
di
Flowcharts (segue)
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
assegnazioni
di
avrebbe
come
effetto
Schema di sequenza
Mette in evidenza la composizione di n schemi di
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.
I Cicli
Un ciclo rappresenta essenzialmente uno schema di iterazione (chiuso).
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.!
!
Algoritmi ricorsivi
Gli algoritmi ricorsivi sono algoritmi che richiamano se stessi per la risoluzione di un problema.!
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)
5-*-4-*-FATT(3)
n=1
5-*-4-*-3-*-FATT(2)
5-*-4-*-3-*-2-*-FATT(1)5-*-4-*-3-*-2-*1-
Ve t t o r i
valore
valore
valore
V
variabile
vettore v
valore
Vettori (segue)
!!
!!
Ve t t o ri (se gu e)
Vettori