DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 27 Marzo 2015
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEUmh… Per farvi aggiungere al gruppo su Facebook… …usate un nome significativo! 2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEUmh… Per farvi aggiungere al gruppo su Facebook… …usate un nome significativo! 3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEUmh… Per farvi aggiungere al gruppo su Facebook… …usate un nome significativo! 4 nome !significativo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma prima… 5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: errori sull’input Problema Preso un dato inserito da tastiera Per potervi applicare la trasformazione di nostro interesse Dobbiamo prima verificare che il dato sia coerente con quanto ci aspettiamo Soluzione Definire l’insieme dei caratteri validi Verificare l’appartenenza del carattere inserito, all’insieme dei caratterei validi 6
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEPseudocodice Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} 1. Richiedere l’inserimento di un carattere 2. Se carattere inserito corretto 3. Allora stampa a video carattere Altrimenti stampa a video un messaggio di errore 7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} Il carattere inserito deve essere =>a <= z 8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Maiuscolo: solo if 9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? 10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? Se X = 0? 11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita FALSA 12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita FALSA Se Y = 0? 13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita FALSA Se Y = 0? Vogliamo una uscita FALSA 14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita FALSA Se Y = 0? Vogliamo una uscita FALSA Se X = 1 e Y = 1? Uscita VERA! 15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? 16 X Y USCITA
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? 17 X Y USCITA Vi ricorda qualche cosa?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? 18 X Y USCITA Vi ricorda qualche cosa? AND!!!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Condizione da verificare Il carattere inserito deve essere X: =>a Y: <= z Come vogliamo che si comporti il nostro modello rispetto a X e Y? 19 Vi ricorda qualche cosa? AND!!! X Y X AND Y (prodotto logico)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Maiuscolo: AND 20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tornando ad oggi… 21
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Costrutti iterativi do.. while While for 22
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: caratteri MaIuScOli Si scriva un programma che, preso un carattere minuscolo da tastiera, ne riporta a video l’equivalente maiuscolo Si continui a chiedere l’inserimento del carattere, fino a quando questo non è corretto 23
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEPseudocodice Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} 1.Richiedere l’inserimento di un carattere 2.Se carattere inserito corretto A.Allora stampa a video carattere-32 3.Altrimenti A.stampa a video un messaggio di errore B.ritorno ad 1 24
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MaIuScOli: codice 25
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MaIuScOli: codice 26
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come si comporta il nostro modello rispetto a X e Y? NOTA: quando VERA, continua! 27
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come si comporta il nostro modello rispetto a X e Y? NOTA: quando VERA, continua! 28 X Y X AND Y
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come si comporta il nostro modello rispetto a X e Y? NOTA: quando VERA, continua! 29 X Y X AND Y Continua quando X e Y sono VERE!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come si comporta il nostro modello rispetto a X e Y? NOTA: quando VERA, continua! 30 X Y X AND Y È quello che vogliamo? Continua quando X e Y sono VERE!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come si comporta il nostro modello rispetto a X e Y? NOTA: quando VERA, continua! 31 X Y X AND Y È quello che vogliamo? Continua quando X e Y sono VERE! NO!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? Se X = 0? 32
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita VERA 33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita VERA Se Y = 0? 34
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita VERA Se Y = 0? Vogliamo una uscita VERA 35
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? Se X = 0? Vogliamo una uscita VERA Se Y = 0? Vogliamo una uscita VERA Se X = 1 e Y = 1? Uscita FALSA! 36
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? 37 X Y USCITA
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? 38 Vi ricorda qualche cosa? X Y USCITA
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? 39 X Y USCITA X Y X AND Y
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma il modello è corretto? X: ‘a’ <= carattere Y: ‘z’ <= carattere Come vorremmo che si comportasse il nostro modello rispetto a X e Y? 40 X Y Z: X AND Y !Z X Y USCITA X Y X AND Y
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MaIuScOli: codice corretto 41
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MaIuScOli: codice corretto 42
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MCD: pseudocodice 1.Leggi A e B 2.min= il minimo tra A e B 3.trovato = 0; MCD = min; 4.Finche’ trovato != 1 1.Se MCD divide A e B 1.Allora trovato = 1 2.Altrimenti MCD = MCD Stampa MCD 43
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MCD: diagramma di flusso 44 Inizio Leggi A e B min=minimo{A,B} trovato = 0 MCD=min trovato!=1? MCD divide A e B MCD divide A e B trovato = 1 Stampa MCD Fine no si MCD=MCD -1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 45 Itera l’esecuzione di una istruzione finché una certa condizione è vera int a, b; scanf("%d%d", &a, &b); while ( b > 0 ) { a = a + a; --b; } printf ("Il valore di a ora è %d", a); Come traduco il finché? WHILE condizione di PERMANENZA nel ciclo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 46 Itera l’esecuzione di una istruzione fintantoché una certa condizione è vera int a, b; scanf("%d%d", &a, &b); while ( b > 0 ) { a = a + a; --b; } printf ("Il valore di a ora è %d", a); Che cosa calcola? la funzione f(a,b) = a*2 b se b>0 a se b≤0 Il ciclo (loop) while
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tornando al MCD… il codice 1.trovato = 0; 1.Leggi A e B 1.min= il minimo tra A e B 2.MCD = min; 3.Finche’ trovato != 1 1.Se MCD divide A e B 1.Allora trovato = 1 2.Altrimenti MCD = MCD Stampa MCD 47
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE MCD: zoom 48
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore tra N numeri Problema Trovare il maggiore tra N numeri positivi inseriti da tastiera Soluzione Conoscere N Richiedere l’inserimento degli N valori Ricerca del maggiore tra gli N valori 49
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore: codice 50
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La gara di nuoto Problema Si hanno10 giudici 1 giudice = 1 voto Ogni voto è nell’itervallo 0-10 Dato un tuffo, calcolare La media dei voti Il voto massimo ed il voto minimo 51
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Nuoto: codice - errori 52
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Nuoto: codice - errori 53 Cosa succede a giudice ad ogni iterazione?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Nuoto: codice - errori 54 Cosa succede a giudice ad ogni iterazione? NIENTE!!!! Ciclo infinito!!!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Nuoto: codice 55
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEOsservazioni Problema 1 Si continui a chiedere l’inserimento del carattere, fino a quando questo non è corretto Problema 2 Trovare il maggiore tra N numeri inseriti da tastiera 56
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEOsservazioni Problema 1 Si continui a chiedere l’inserimento del carattere, fino a quando questo non è corretto Problema 2 Trovare il maggiore tra N numeri inseriti da tastiera Del problema 2 conosco il numero di iterazioni! 57
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore tra N numeri Problema Trovare il maggiore tra N numeri inseriti da tastiera Soluzione Conoscere N Richiedere l’inserimento degli N valori Ricerca del maggiore tra gli N valori 58
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore: zoom sul codice 59
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore tra N numeri: osservazione Osservazione: Perchè usare un while se conosco il numero di iterazioni del cliclo? 60
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 61 cont = 0; while (cont < N) { …; cont++; } for (cont = 0; cont < N; cont++) { …; } Il ciclo for
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 62 ATTENZIONE Il ciclo for for ( exp.A; cond; exp.I ) { ist.1;... ist.N; } exp.A; while ( cond ) { ist.1;... ist.N; exp.I; }
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore – for : codice 63
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore – while Vs for 64
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ora dovrebbe essere chiara… 65
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il fattoriale Dato n, intero positivo, si definisce n fattoriale e si indica con n! il prodotto dei primi n numeri interi positivi minori o uguali di quel numero. In formule Nota: 0! = 1 1! = 1 2! = 2, 3! = 6,… 66
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il fattoriale: codice 67
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Nota sul fattoriale: permutazioni Vi sono n! diverse sequenze formate da n oggetti distinti Vi sono n! permutazioni di n oggetti iI fattoriali enumerano le permutazioni 68
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problemi di fine giornata… Modificare gli esercizi di oggi, andando, dove necessario, ad inserire il controllo sugli ingressi Trovare il maggiore tra N numeri positivi inseriti da tastiera (richiedendo il numero se negativo) Dati N numeri, dire se questi sono tutti positivi Dati N numeri, riportarne a video il modulo 69
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 6 Credits Daniele Braga -