DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 18 Ottobre 2013
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEWAT È la prima esercitazione non è funzionale dare meno di 5 min per fare un programma nonostante la semplicità A mio parere il tempo concesso per ogni esercizio non era sufficiente, soprattutto considerando che stiamo ancora familiarizzando con C Si sarebbe dovuta fare prima un'introduzione generale sulle modalità di esercitazione e poi passare agli esercizi […] 2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEWAT 3
WAT 4 WAT
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Massimo Comune Divisore 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 5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 0/4: La brutta notizia! Abbiamo un problema!!!! Dati due numeri interi, si trovi il MCD 6 how to solve it di Poyla G. -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come realizzare un algoritmo Parte 1/4: Capire il problema Quale e il problema generale che si scerca di risolvere? 7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 1/4: Capire il problema 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 8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Abbiamo solo P1 e P2? 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 9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come realizzare un algoritmo 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 10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 2/4: Fare/creare un piano 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 11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P1: Fare/creare un piano 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? 12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P1.2: Fare/creare un piano 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 13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P1.2: Chiariamo meglio… 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 14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P1.1+P1.2: P1 risolto 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 15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2: Fare/creare un piano 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 16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.1: Fare/creare un piano 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 17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.2: Fare/creare un piano 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 18
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.3: Chiariamo meglio… 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.Confronto il maggiore con il successivo b.Il successivo è maggiore? c.Si: il maggiore diventa il successivo d.Vado a 2 B.No: vado a 3 3.Il maggiore è maggiore 19
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.3: Fare/creare un piano 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.Confronto il maggiore con il successivo b.Il successivo è maggiore? c.Si: il maggiore diventa il successivo d.Vado a 2 3.Il maggiore è maggiore 20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.1+P2.2: Fare/creare un piano 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 21 Come sono i numeri in {C}? (P2.2) Sono divisori di un numero! (P1.1)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.1+P2.2: Ricordiamo… 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 22
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.1+P2.2: ma quindi… 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 23 Se D1 è maggiore di N2? Se D2 è maggiore di N1?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.1+P2.2: e ancora… 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 24 E cosa facciamo a P2.3?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.3: Fare/creare un piano 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.Confronto il maggiore con il successivo b.Il successivo è maggiore? c.Si: il maggiore diventa il successivo d.Vado a 2 3.Il maggiore è maggiore 25 E se gli N numeri fossero ordinati in ordine crescente?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2.3: Numeri ordinati P2.3: Dobbiamo trovare il maggiore tra N numeri 1.Il maggiore è lultimo numero di N 26 Essendo ordinati in ordine crescente Ogni successero è maggiore del precedente Come usiamo questa idea?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEP2.1+P2.2+P2.3 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 27 Come varia X?In ordine crescente :)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2: risolto 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 28
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P1 + P2: mettiamo tutto insieme 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 5.X = 1 e TMP = 1 6.Finché X è minore o uguale a N1 e a N2 1.P2.1: X divide N1? e X divide N2? 1.SI: 1.P2.2: X è divisore comune a N1 e a N2 2.P2.3: TMP = X 2.Incremento X 7.TMP è il MCD 29
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come realizzare un algoritmo 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 30
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 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 5.X = 1 e TMP = 1 6.Finché X è minore o uguale a N1 e a N2 1.P2.1: X divide N1? e X divide N2? 1.SI: 1.P2.2: X è divisore comune a N1 e a N2 2.P2.3: TMP = X 2.Incremento X 7.TMP è il MCD 31 Quante e quali variabili ci servono?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 32 Quante e quali variabili ci servono?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 1.P1.1: Leggo un dato intero N1 2.P1.2: Finché N1 è minore di 1, torna ad 1 33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 5. X = 1 e TMP = 1; 34
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definisco la condizione 35 A: X <= N1 B: X <= N2 6. Finché X è minore o uguale a N1 e a N2 A B uscita Finché ((X<=N1) AND (X<=N2))
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 6. Finché X è minore o uguale a N1 e a N2 1.P2.1: X divide N1? e X divide N2? 1.SI: 1.P2.2: X è divisore comune a N1 e a N2 2.P2.3: TMP = X 2.Incremento X 36
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni equivalenti 1 37 A: N1%X B: 0 A B uscita !0 0 1 uscita è identica ad A uscita = A NO!!!!!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Vediamo il codice 38
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Vediamo il codice: debug 39
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Vediamo il codice: debug 40
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni equivalenti 1: corretta 41 A: N1%X B: 0 A B uscita !0 0 0 uscita è identica allinverso di A uscita = !A
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni equivalenti 2 42 è equivalente a
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parte 3/4: Portare avanti il piano 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 5.X = 1 e TMP = 1; 6.Finché X è minore o uguale a N1 e a N2 1.P2.1: X divide N1? e X divide N2? 1.SI: 1.P2.2: X è divisore comune a N1 e a N2 2.P2.3: TMP = X 2.Incremento X 7.TMP è il MCD 43
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MCD: Finito… 44
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come realizzare un algoritmo Parte 4/4: Ragionare e comprendere Comprendere quello che si è fatto e dove lalgoritmo individuato possa essere applicato al meglio La pratica è fondamentale! 45
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma scusate… N1 = N2 = Vogliamo veramente partire da 1 Finché ((X<=N1) AND (X<=N2)) ??????
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2: risolto 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 47
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tornado nel passato… 48
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE P2: risolto 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 49
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definisco la condizione 50 A: N1%X B: N2%X Finché X non divide N1 e N2 A B uscita Finché !(!(N1%x) AND !(N2%X))
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definisco la condizione 51 A B !A !B (!A && !B) !(!A && !B) Continuo finché 1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MCD: Finito! 52