DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come affrontare un
problema…
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 24 Agosto 2015
Massimo Comune Divisore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Definizione
 Dicesi Massimo Comune Divisore (M.C.D.)
il piu’ grande tra i divisori comuni a due o
piu’ numeri
• Il nostro problema:
 Dati due numeri interi, si trovi il MCD
2
Parte 0/4: La brutta notizia!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Abbiamo un problema!!!!
 Dati due numeri interi, si trovi il MCD
how to solve it di Poyla G. - http://math.hawaii.edu/home/pdf/putnam/PolyaHowToSolveIt.pdf
3
Come realizzare un algoritmo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Parte 1/4: Capire il problema
 Quale e’ il problema generale che si scerca
di risolvere?
4
Parte 1/4: Capire il problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Abbiamo un solo problema?
 Dati due numeri interi, si trovi il MCD
• P1: Ci servono due numeri interi
• P2: Dobbiamo trovare il MCD di due
numeri
5
Abbiamo solo P1 e P2?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Dati due numeri interi, si trovi il MCD
• P1: Ci servono due numeri interi
 P1.1: Ci servono due scatole per salvare i due numeri
 P1.2: I numeri devono essere maggiori uguali a 1
• P2: Dobbiamo trovare il MCD di due numeri
 P2.1: Dobbiamo trovare tutti i divisori di un numero (X)
 P2.2: Dobbiamo trovare tutti i numeri {C} in comune a due
sequenze {S1, S2} di numeri
 P2.3: Dobbiamo trovare il maggiore tra N numeri
6
Come realizzare un algoritmo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•Parte 2/4: Fare/creare un piano
 Ci possono essere diverse strategie per
risolvere lo stesso problema
•
•
•
•
Ipotizzare e verificare
Cercare dei pattern
Risolvere problemi più piccoli
Disegnare uno schema
7
Parte 2/4: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Dati due numeri interi, si trovi il MCD
• P1: Ci servono due numeri interi
 P1.1: Ci servono due scatole per salvare i due numeri
 P1.2: I numeri devono essere maggiori uguali a 1
• P2: Dobbiamo trovare il MCD di due numeri
 P2.1: Dobbiamo trovare tutti i divisori di un numero (X)
 P2.2: Dobbiamo trovare tutti i numeri {C} in comune a due
sequenze {S1, S2} di numeri
 P2.3: Dobbiamo trovare il maggiore tra N numeri
8
P1: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P1: Ci servono due numeri interi
 P1.1: Ci servono due scatole per salvare i
due numeri
• Di che tipo sono i numeri che ci servono?
 P1.2: I numeri devono essere maggiori
uguali A 1
• Come facciamo a garantire che il numero
inserito sia maggiore uguale a 1?
9
P1.2: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P1.2: I numeri devono essere maggiori
uguale a 1
 Come facciamo a garantire che il numero
inserito sia maggiore uguale a 1?
A. Inserisci il numero
B. Il numero è maggiore o uguale a 1
a. Se si FINE
b. Se no, torna a A
10
P1.2: Chiariamo meglio…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P1.2: I numeri devono essere maggiori
uguale a 1
 Come facciamo a garantire che il numero
inserito sia maggiore uguale a 1?
A. Inserisci il numero
B. Finché Il numero è minore di 1, torna ad A
11
P1.1+P1.2: P1 risolto
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1. P1.1: Leggo un dato intero N1
2. P1.2: Finché N1 è minore di 1, torna
ad 1
3. P1.1: Leggo un dato intero N2
4. P1.2: Finché N2 è minore di 1, torna
ad 3
12
P2: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2: Dobbiamo trovare il MCD di due
numeri
 P2.1: Dobbiamo trovare tutti i divisori di un
numero (X)
 P2.2: Dobbiamo trovare tutti i numeri {C} in
comune a due sequenze {S1, S2} di numeri
 P2.3: Dobbiamo trovare il maggiore tra N
numeri
13
P2.1: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.1: Dobbiamo trovare tutti i divisori di
un numero (X)
 Definisco D come numero che varia tra 1 e
X
• Dati X e D, interi positivi
• se X/D da resto 0,
– D è divisore di X
14
P2.2: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.2: Dobbiamo trovare tutti i numeri {C}
in comune a due sequenze {S1, S2} di
numeri
 Dato X1 appartenente a S1
 Dato X2 appartenente a S2
 Se X1 è uguale a X2 allora il valore è comune
a S1 e S2
15
P2.3: Chiariamo meglio…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.3: Dobbiamo trovare il maggiore tra N
numeri
1. Il maggiore è il primo numero di N
2. Vi è un altro numero in N?
A. Si
a.
b.
c.
d.
Confronto il maggiore con il successivo
Il successivo è maggiore?
Si: il maggiore diventa il successivo
Vado a 2
B. No: vado a 3
3. Il maggiore è maggiore
16
P2.3: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.3: Dobbiamo trovare il maggiore tra N
numeri
1. Il maggiore è il primo numero di N
2. Finché vi sono numeri in N?
a.
b.
c.
d.
Confronto il maggiore con il successivo
Il successivo è maggiore?
Si: il maggiore diventa il successivo
Vado a 2
3. Il maggiore è maggiore
17
P2.1+P2.2: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.1: Dobbiamo trovare tutti i divisori di un
numero
• P2.2: Dobbiamo trovare tutti i numeri {C}
in comune a due sequenze {S1, S2} di
numeri
Come sono i numeri in {C}? (P2.2)
Sono divisori di un numero! (P1.1)
18
P2.1+P2.2: Ricordiamo…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.1: Dobbiamo trovare tutti i divisori di un
numero (X)
 Definisco D come numero che varia tra 1 e X
• Dati X e D, interi positivi
• se X/D da resto 0, D è divisore di X
• P2.2: Dobbiamo trovare tutti i numeri {C} in
comune a due sequenze {S1, S2} di numeri
 Dato D1 appartenente a S1
 Dato D2 appartenente a S2
 Se D1 è uguale a D2 allora il valoro è comune a S1 e
S2
19
P2.1+P2.2: ma quindi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• P2.1: D1 divide N1 (appartiene a S1)
• P2.1: D2 divide N2 (appartiene a S2)
• P2.2: D1 è uguale a D2?
 SI: D1 (o D2) è un divisore comune a N1 e a
N2
Se D1 è maggiore di N2?
Se D2 è maggiore di N1?
20
P2.1+P2.2: e ancora…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• X=1
• Finché X è minore o uguale a N1 e a N2
 P2.1: X divide N1? e X divide N2?
• SI: P2.2 X è divisore comune a N1 e a N2
 Incremento X
E cosa facciamo a P2.3?
21
P2.3: Fare/creare un piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.3: Dobbiamo trovare il maggiore tra N
numeri
1. Il maggiore è il primo numero di N
2. Finché vi sono numeri in N?
a.
b.
c.
d.
Confronto il maggiore con il successivo
Il successivo è maggiore?
Si: il maggiore diventa il successivo
Vado a 2
3. Il maggiore è maggiore
E se gli N numeri fossero ordinati
in ordine crescente?
22
P2.3: Numeri ordinati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• P2.3: Dobbiamo trovare il maggiore tra N
numeri
1. Il maggiore è l’ultimo numero di N
Essendo ordinati in ordine crescente
Ogni successero è maggiore del precedente
Come usiamo questa idea?
23
P2.1+P2.2+P2.3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• X=1
• Finché X è minore o uguale a N1 e a N2
 P2.1: X divide N1? e X divide N2?
• SI: P2.2 X è divisore comune a N1 e a N2
 Incremento X
P2.3: Dobbiamo trovare il maggiore tra N
numeri
Come varia X? In ordine crescente :)
24
P2: risolto
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• X = 1 e TMP = 1
• Finché X è minore o uguale a N1 e a N2
 P2.1: X divide N1? e X divide N2?
• SI:
– P2.2: X è divisore comune a N1 e a N2
– P2.3: TMP = X
 Incremento X
• TMP è il MCD
25
P1 + P2: mettiamo tutto insieme
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1.
2.
3.
4.
5.
6.
P1.1: Leggo un dato intero N1
P1.2: Finché N1 è minore di 1, torna ad 1
P1.1: Leggo un dato intero N2
P1.2: Finché N2 è minore di 1, torna ad 3
X = 1 e TMP = 1
Finché X è minore o uguale a N1 e a N2
1. P2.1: X divide N1? e X divide N2?
1. SI:
1.
2.
P2.2: X è divisore comune a N1 e a N2
P2.3: TMP = X
2. Incremento X
7. TMP è il MCD
26
Come realizzare un algoritmo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Parte 3/4: Portare avanti il piano
 Mettere in azione il vostro piano!
 Rimanere sul piano deciso a meno che
non vi siano evidenti motivi per credere
che esso non funzionerà più
La pazienza è il vostro miglior alleato
27
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Quante e quali variabili ci servono?
1.
2.
3.
4.
5.
6.
P1.1: Leggo un dato intero N1
P1.2: Finché N1 è minore di 1, torna ad 1
P1.1: Leggo un dato intero N2
P1.2: Finché N2 è minore di 1, torna ad 3
X = 1 e TMP = 1
Finché X è minore o uguale a N1 e a N2
1.
P2.1: X divide N1? e X divide N2?
1.
SI:
1.
2.
2.
7.
P2.2: X è divisore comune a N1 e a N2
P2.3: TMP = X
Incremento X
TMP è il MCD
28
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Quante e quali variabili ci servono?
29
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1. P1.1: Leggo un dato intero N1
2. P1.2: Finché N1 è minore di 1, torna
ad 1
30
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
5. X = 1 e TMP = 1;
31
Definisco la condizione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
6. Finché X è minore o uguale a N1 e a N2
A: X <= N1
B: X <= N2
A B
0 0
0 1
1 0
1 1
uscita
0
0
0
1
6. Finché ((X<=N1) AND (X<=N2))
32
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
6. Finché X è minore o uguale a N1 e a N2
1. P2.1: X divide N1? e X divide N2?
1. SI:
1.
2.
P2.2: X è divisore comune a N1 e a N2
P2.3: TMP = X
2. Incremento X
33
Funzioni equivalenti 1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
A: N1%X
B: 0
A B
0 0
!0 0
uscita
0
1
uscita è identica ad A
uscita = A
NO!!!!!
34
Vediamo il codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
35
Vediamo il codice: debug
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
36
Vediamo il codice: debug
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
37
Funzioni equivalenti 1: corretta
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
A: N1%X
B: 0
A B
0 0
!0 0
uscita
1
0
uscita è identica all’inverso di A
uscita = !A
38
Funzioni equivalenti 2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
è equivalente a
39
Parte 3/4: Portare avanti il piano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1.
2.
3.
4.
5.
6.
P1.1: Leggo un dato intero N1
P1.2: Finché N1 è minore di 1, torna ad 1
P1.1: Leggo un dato intero N2
P1.2: Finché N2 è minore di 1, torna ad 3
X = 1 e TMP = 1;
Finché X è minore o uguale a N1 e a N2
1. P2.1: X divide N1? e X divide N2?
1. SI:
1.
2.
P2.2: X è divisore comune a N1 e a N2
P2.3: TMP = X
2. Incremento X
7. TMP è il MCD
40
MCD: Finito…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
41
Come realizzare un algoritmo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Parte 4/4: Ragionare e comprendere
 Comprendere quello che si è fatto e dove
l’algoritmo individuato possa essere
applicato al meglio
La pratica è fondamentale!
42
Ma scusate…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
N1 = 200000
N2 = 100000
Vogliamo veramente partire da 1
Finché ((X<=N1) AND (X<=N2))
??????
43
P2: risolto
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• X = 1 e TMP = 1
• Finché X è minore o uguale a N1 e a N2
 P2.1: X divide N1? e X divide N2?
• SI:
– P2.2: X è divisore comune a N1 e a N2
– P2.3: TMP = X
 Incremento X
• TMP è il MCD
44
Tornado nel passato…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
45
P2: risolto
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dati due numeri N1 e N2
• X = min (N1,N2)
• Finché P2.1: X non divide N1 e N2
 Decremento X
• P2.2 e P2.3: X è divisore comune a N1 e a
N2
46
Definisco la condizione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Finché X non divide N1 e N2
A: N1%X
B: N2%X
A B
0 0
0 1
1 0
1 1
uscita
1
0
0
0
Finché !(!(N1%x) AND !(N2%X))
47
Definisco la condizione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
A
0
0
1
1
B
0
1
0
0
!A
1
1
0
0
!B (!A && !B) !(!A && !B)
1
1
0
0
0
1
1
0
1
1
0
1
Continuo
finché 1
48
MCD: Finito!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
49
Scarica

P2.1