DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – [email protected] Ver. aggiornata al 18 Ottobre 2013 WAT DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE È 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 WAT DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3 WAT DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE WAT 4 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 5 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 6 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? 7 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 8 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 9 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 10 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 11 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? 12 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 13 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 14 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 15 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 16 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 17 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 18 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 19 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 20 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) 21 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 22 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? 23 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? 24 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? 25 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? 26 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 :) 27 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 28 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 29 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 30 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 31 Parte 3/4: Portare avanti il piano DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Quante e quali variabili ci servono? 32 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 33 Parte 3/4: Portare avanti il piano DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 5. X = 1 e TMP = 1; 34 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)) 35 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 36 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!!!!! 37 Vediamo il codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 38 Vediamo il codice: debug DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 39 Vediamo il codice: debug DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 40 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 41 Funzioni equivalenti 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE è equivalente a 42 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 43 MCD: Finito… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 44 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! 45 Ma scusate… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE N1 = 200000 N2 = 100000 Vogliamo veramente partire da 1 Finché ((X<=N1) AND (X<=N2)) ?????? 46 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 47 Tornado nel passato… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 48 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 49 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)) 50 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 51 MCD: Finito! DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 52