DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – [email protected] Ver. aggiornata al 10 Ottobre 2013 Installation Party DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dove: L.06 • Quando: Sabato 12 Ottobre 9.00am - 12.00pm 2 Obiettivi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Costrutti iterativi do.. while While for 3 Problema: caratteri MaIuScOli DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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 4 Pseudocodice V1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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.ritorna ad 1 5 Pseudocodice V2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} 1.Richiedere l’inserimento di un carattere 2.Finchè carattere inserito !corretto torna ad 1 3.Stampa a video carattere-32 6 MaIuScOli: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE ATTENZIONE!!! 2. Finchè carattere inserito !corretto Identifica il carattere CORRETTO! 7 MaIuScOli: codice corretto DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1.Richiedere l’inserimento di un carattere 2.Finchè carattere inserito !corretto torna ad 1 8 MCD: pseudocodice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1. 2. 3. 4. Leggi A e B min= il minimo tra A e B trovato = 0; MCD = min; Finche’ trovato != 1 1. Se MCD divide A e B 1. Allora trovato = 1 2. Altrimenti MCD = MCD - 1 5. Stampa MCD 9 MCD: diagramma di flusso DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Inizio Leggi A e B min=minimo{A,B} trovato = 0 MCD=min Stampa MCD no trovato!=1? si no Fine MCD divide AeB MCD=MCD -1 si trovato = 1 10 Come traduco il finché? WHILE DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Itera l’esecuzione di una istruzione finché una certa condizione è vera int a, b; condizione di scanf("%d%d", &a, &b); PERMANENZA while ( b > 0 ) { nel ciclo a = a + a; --b; } printf ("Il valore di a ora è %d", a); 11 Il ciclo (loop) while DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Itera l’esecuzione di una istruzione fintantoché una certa condizione è vera int a, b; scanf("%d%d", &a, &b); Che cosa calcola? while ( b > 0 ) { a = a + a; a*2b se b>0 la funzione f(a,b) = --b; a se b≤0 } printf ("Il valore di a ora è %d", a); 12 Tornando al MCD… il codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1. trovato = 0; 1. Leggi A e B 1. min= il minimo tra A e B 2. 3. MCD = min; Finche’ trovato != 1 1. Se MCD divide A e B 1. Allora trovato = 1 2. Altrimenti MCD = MCD - 1 4. Stampa MCD 13 MCD: zoom DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 14 Il maggiore tra N numeri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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 15 Il maggiore: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 16 Il maggiore tra N numeri: osservazione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Osservazione: Perchè usare un while se conosco il numero di iterazioni del cliclo? 17 Il maggiore: zoom sul codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 18 Il ciclo for DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE cont = 0; while (cont < N) { …; …; cont++; } for (cont = 0; cont < N; cont++) { …; …; } 19 Il ciclo for DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE for ( exp.A; cond; exp.I ) { ist.1; ... ist.N; } exp.A; while ( cond ) { ist.1; ... ist.N; exp.I; } ATTENZIONE 20 Il maggiore – for : codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 21 Il maggiore – while Vs for DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 22 Ora dovrebbe essere chiara… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Seguono un paio di esercizi… 23 La gara di nuoto DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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 24 Nuoto: codice - errori DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Cosa succede a giudice ad ogni iterazione? NIENTE!!!! Ciclo infinito!!! 25 Nuoto: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 26 Il fattoriale DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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,… 27 Il fattoriale: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 28 Problemi di fine giornata… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 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 29 Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill • Capitolo 6 • Credits Daniele Braga - http://home.dei.polimi.it/braga/