Presentazione di PowerPoint - Università degli Studi di Parma

Il problema di fondo
Dipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
Laboratorio di Programmazione

Descrizione di un problema
Laurea in Ingegneria Civile e Ambientale
individuazione di una soluzione

Algoritmi e Programmazione
Algebra di Boole


Quale è il giusto punto di partenza? Cioè, di quali
dati abbiamo bisogno ?
Quali metodologie o tecniche utilizzare?
In quale ordine eseguire le operazioni consentite
da tali tecniche ?
Stefano Cagnoni
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Algoritmo
2
Algoritmo: esempio
Problema generale: Calcolare la somma di un numero
arbitrario N di numeri


Dall'arabo al-Khuwarizmi, e dal greco arithmós
Se ho a disposizione l’operazione di somma fra 2
numeri posso risolvere il problema per qualsiasi valore
di N con una stessa sequenza di operazioni.
Un algoritmo è un metodo generale che risolve
in un tempo finito e con una sequenza finita di
passi qualsiasi istanza di un dato problema.
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Ad ogni valore di N corrisponde una diversa istanza
del problema generale, ma tutte le istanze possono
essere risolte mediante lo stesso algoritmo:
Poni totale=0;
Per N volte: somma un nuovo addendo a totale.
3
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
4
1
Algoritmo

Codifica di un algoritmo
E’ possibile definire algoritmi anche per la
risoluzione di problemi non informatici

Fase di descrizione (scrittura) di un algoritmo
attraverso un insieme ordinato (sequenziale) di
codici (istruzioni, ciascuno dei quali rappresenta
un’operazione), appartenenti a un qualche
linguaggio di programmazione, che specificano
le azioni da compiere e l’ordine in cui devono
essere eseguite

Il prodotto della codifica è un programma
Esempi:
 Descrivere come raggiungere una destinazione
 Istruzioni per il montaggio di un mobile
 Istruzioni per la realizzazione di una torta

Non sempre la soluzione di un problema può essere
descritta tramite un algoritmo.


Il calcolo di p non è un algoritmo (non ha fine)
Il calcolo di p fino alla decima cifra decimale è un algoritmo
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Programma



Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
5
6
Programma
Testo scritto in accordo alla sintassi (insieme di
regole sulla formazione delle espressioni in un
linguaggio) e alla semantica (insieme di regole che
consentono l’interpretazione del significato del testo)
di un linguaggio di programmazione
Un programma rappresenta l’insieme delle istruzioni
che descrivono un processo computazionale,
espresse in un qualche linguaggio
Un processo trasforma un insieme di dati iniziali nei
risultati finali mediante una successione di azioni
elementari (operazioni)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
7

Un programma può non descrivere un algoritmo
(basta che la sequenza di operazioni non sia
finita cioè che il programma non termini) …

... tuttavia può essere molto utile
Es. gestione semafori, non ha fine poiché ripete
indefinitamente la stessa sequenza
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
8
2
Esecuzione
Algoritmo



L’esecuzione delle azioni nell’ordine specificato
dall’algoritmo consente di ottenere i risultati che
risolvono il problema a partire dai dati in
ingresso
 algoritmo
 programma
Metodo
risolutivo


Codifica del
metodo in un
linguaggio di
programmazione
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione





Non ambiguità (determinismo): i risultati non variano in
funzione della macchina/persona che esegue
l'algoritmo.
Realizzabilità: deve essere eseguibile con le risorse a
disposizione.
Efficienza (auspicabile): deve eseguire il minimo
numero possibile di operazioni
10
Il crivello di Eratostene
Per definire un algoritmo è necessario:

Finitezza: composto da un numero finito di passi
elementari.
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
9
Algoritmo

Un algoritmo deve avere le seguenti proprietà:
1. Si costruisce una sequenza ordinata dei numeri
fra 2 e n.
Condurre un'attenta analisi del problema ed
eventualmente suddividere il problema in
sottoproblemi più piccoli.
Individuare i dati disponibili in ingresso (input) e
precisare le uscite prodotte (output), cioè definire i
dati di input e di output.
Definire completamente e dettagliatamente la
sequenza dei passi che portano alla soluzione.
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Si vogliono trovare tutti i numeri primi compresi
fra 2 e n (in modo efficiente).
2. Si estrae il primo numero dalla sequenza. E’
necessariamente un numero primo.
3. Si eliminano dalla sequenza tutti i multipli del
numero estratto al passo 2.
4. Se la sequenza non è vuota si torna al passo 2,
altrimenti si termina.
11
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
12
3
Il crivello di Eratostene
Diagrammi di flusso (Flow Chart)
Esempio : trovare i numeri primi compresi fra 2 a 20

Sequenza iniziale:
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

2 è primo; lo elimino con tutti i suoi multipli:

3,5,7,9,11,13,15,17,19

3 è primo; lo elimino con tutti i suoi multipli:
I diagrammi di flusso sono un formalismo grafico per
descrivere gli algoritmi.
I diagrammi di flusso visualizzano graficamente i
passi da cui sono formati gli algoritmi e l’ordine in
cui devono essere eseguiti.
5,7,11,13,17,19

5 è primo; lo elimino con tutti i suoi multipli:

…

19 è primo, la sequenza è vuota, termino.
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione





Ingresso/Uscita dati (rappresentate come schede)
Un diagramma di flusso è costituito da due tipi di entità:
 Nodi

Operazioni sui dati (rappresentate come rettangoli)
 Trasferimento di informazione (Assegnamenti)
 Calcolo di espressioni aritmetiche e logiche

rappresentano le operazioni e gli stati di inizio e fine
dell’algoritmo
Archi orientati (di solito in realtà sono segmenti di retta
orientati secondo la direzione di una freccia)
 Collegano fra loro i nodi, rappresentando con frecce il
‘flusso’ dei dati, cioè la sequenza delle operazioni:
l’istruzione contenuta in un nodo è seguita
dall’esecuzione dell’operazione contenuta nel nodo a
cui punta l’arco uscente da esso
Verifica di condizioni (rappresentate come rombi)
Assunzione di decisioni o cicli (combinazioni di
rettangoli e rombi).
Possono utilizzare costanti e variabili

Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
14
Diagrammi di flusso
Operazioni rappresentabili in un diagramma di flusso:

Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
13
Diagrammi di flusso

Un diagramma di flusso è una descrizione formale,
(cioè rispetta una precisa sintassi), più efficace e
meno ambigua di una descrizione a parole.
15
Una struttura di questo tipo è detta grafo (orientato)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
16
4
Tipi di Nodi
Esempio
Start
Var1
Var1  Espr1
Inizio
Lettura dati
Elaborazione / Assegnamento
Var1
Stop
Fine
Scrittura dati
Sì
No
Espr1
Espr1
Espr1
Espr1
Espr1
Espr1
=

>

<

Espr2
Espr2
Espr2
Espr2
Espr2
Espr2
Var1
Leggi un valore (ad es. 10) che sarà
assegnato alla variabile Var1
Var1
Stampa il contenuto di Var1 (stampa 10)
Fine
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
17
Esempio 2
Inizio
Var1
Leggi un valore (ad es. 10) e inseriscilo
nella locazione di memoria
corrispondente alla variabile var1
Start
Inizio
Var1
Leggi Var1
Var1 > 10
Aggiungi 1 a quel valore
No
Var1  Var1 + 1
Sì
Var1
Stop
18
Esempio 3
Start
Var1  Var1 + 1
Inizio
Stop
Decisione
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Start
Stampa il nuovo valore (stampa il
contenuto di
var1 cioè 11)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Stop
19
stampa Var1
Altrimenti
Var1
Fine
Se Var1 <= 10
incrementa di 1 Var1
e poi stampa Var1
Fine
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
20
5
Strutture di Controllo
Sì
O1
C
No
O
No
C
O2
Programmazione Strutturata
Sì
No
O
C
If - Then - Else
Se C è vera esegue
l’operazione (o
sequenza) O1,
altrimenti esegue
O2
Ripete una stessa
operazione (o
sequenza) O finché
la condizione C
resta vera
Ogni diagramma ha esattamente un ingresso ed
una uscita.

Ogni azione può essere


Un’operazione semplice
Un’ azione composta da altri diagrammi strutturati
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
21
Esempio: Somma di due Numeri
Var2

Sì
Ripete una stessa
operazione (o
sequenza) O finché
la condizione C non
diventa vera
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Var1
Si compone di sequenze di azioni, decisioni (if
then, if then else) e cicli (while-do, repeat until).
Ciclo Repeat - Until
Ciclo While
Ciclo For
Start

22
Esempio: Somma di N Numeri
Start
Somma  Var1 +Var2
No
N
Somma
I0
Somma  0
Stop
Sì
I<N
Var
Somma  Somma + Var
Somma
II+1
Stop
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
23
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
24
6
Algebra di Boole



Algebra di Boole
L’algebra di Boole è un formalismo che opera su variabili
(dette variabili booleane o variabili logiche o asserzioni)
che possono assumere due soli valori:
 Vero
 Falso
L’algebra booleana nasce come tentativo di definire in
forma algebrica processi di tipo logico-deduttivo
Tuttavia, poiché di fatto l’algebra di Boole opera su
variabili binarie (vero e falso sono i 2 soli simboli), i suoi
operatori possono essere inclusi fra gli operatori
dell’algebra binaria.
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione


X1
X2
X3
F
0
0
0
1
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
1
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
26
NOT - AND - OR
Fra le funzioni definibili tramite l’algebra di Boole alcune
hanno particolare importanza per il loro significato logico
e sono usate come operatori di base:
 AND (indicato in genere dal simbolo × )
 OR (indicato in genere dal simbolo + )
 NOT (indicato in genere dal simbolo - )
 XOR (indicato in genere dal simbolo  )
 NAND (indicato in genere dal simbolo  )
 NOR (indicato in genere dal simbolo  )
In realtà, qualunque funzione booleana può essere
realizzata utilizzando 2 soli operatori: AND e NOT oppure
OR e NOT
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione

Sulle variabili booleane è possibile
definire delle funzioni (dette
funzioni booleane o logiche)
f (X1,…,XN) : {0,1}N
{0,1}
Possono essere definite tramite le
tabelle di verità.
Una tabella di verità di una
funzione di N variabili ha 2N righe,
una
per
ogni
possibile
combinazione delle variabili, e N+1
colonne, che rappresentano i valori
delle N variabili più il valore della
funzione
25
Operatori ed Espressioni Booleane


27
X
NOT
0
1
1
0
X1
X2
AND
0
0
0
0
1
0
1
0
0
1
1
1
NOT (X): il risultato è la
negazione della variabile
AND(X1,X2): il risultato è 1 (Vero)
se entrambe le variabili hanno
valore 1
OR(X1,X2): il risultato è 1 (Vero)
se almeno una delle variabili ha
valore 1
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
X1
X2
OR
0
0
0
0
1
1
1
0
1
1
1
1
28
7
XOR - NAND - NOR
X1
X2
XOR
0
0
0
0
1
1
1
0
1
1
1
0
X1
X2
NAND
0
0
1
0
1
1
1
0
1
1
1
0
Interpretazione logica degli operatori
XOR (X1, X2): il risultato è 1 (Vero)
se una sola delle due variabili ha
valore 1
Se si ha una operazione del tipo:
A* B
(* indica una generica operazione),
il risultato è vero se:
NAND (X1, X2) = NOT (AND (X1,X2))
NOR (X1, X2) = NOT (OR (X1, X2))
X1
X2
NOR
0
0
1
0
1
0
1
0
0
1
1
0
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
*
condizione
OR
A o B (o entrambe) sono vere
AND
sia A che B sono vere
XOR
A o B (ma non entrambe) sono vere
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
29
Operatori ed Espressioni Booleane


Espressioni equivalenti
Questi operatori possono essere combinati in
espressioni booleane che rappresentano
funzioni booleane e si compongono con le
stesse regole utilizzate per l’algebra tradizionale.

Due espressioni si dicono equivalenti quando
producono lo stesso risultato per ogni
combinazione dei valori delle variabili
Esempio
F(x1, x2, x3)= ((NOT x1) AND x2) OR x3


Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
30
31
ab
axb+axb
a XOR b
(a AND (NOT b)) OR
((NOT a) AND b)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
32
8
Espressioni complementari
T1 e T2 sono complementari se per quelle
combinazioni in cui T1 risulta 1 T2 risulta 0 e
viceversa
Esempio


T1 = (a x c) + (a x b)

T2 = (a x c) + (a x b)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
33
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
34
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
35
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
36
9
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
37
38
Esercizi

Sulla base di quanto visto per la somma di N numeri



Definire un algoritmo per il calcolo del prodotto di N
numeri
Descriverlo attraverso un opportuno diagramma di
flusso
Verificare se le seguenti coppie di funzioni booleane
sono equivalenti (cioè hanno la stessa tabella di verità):
C AND (A OR NOT B)
A AND (B AND NOT C)
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
39
e
(B AND (NOT A)) OR (NOT C)
e (NOT A) OR (C OR (NOT B))
Lab. Programmazione 2010/11 - Algoritmi e
Programmazione
40
10