360 likes | 469 Views
Costrutti iterativi. Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 26 Marzo 2014. Mi mancano…. Mi mancano…. Obiettivi. Costrutti iterativi do.. while While for. Problema : caratteri MaIuScOli.
E N D
Costrutti iterativi Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 26 Marzo 2014
Obiettivi • Costrutti iterativi • do.. while • While • for
Problema: caratteriMaIuScOli • 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
Pseudocodice • Dati • L’insieme dei caratteri ammissibili {a, b, c, …, z} • Richiedere l’inserimento di un carattere • Se carattere inserito corretto • Allorastampa a video carattere-32 • Altrimenti • stampa a video un messaggio di errore • ritorno ad 1
MCD: pseudocodice • Leggi A e B • min= il minimo tra A e B • trovato = 0; MCD = min; • Finche’ trovato != 1 • Se MCD divide A e B • Allora trovato = 1 • Altrimenti MCD = MCD - 1 • Stampa MCD
MCD: diagramma di flusso min=minimo{A,B} trovato = 0 MCD=min trovato!=1? no si no Inizio Fine MCD divide A e B MCD=MCD -1 Stampa MCD Leggi A e B si trovato = 1
Come traduco il finché? WHILE • Itera l’esecuzione di unaistruzionefinché 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); condizione di PERMANENZA nel ciclo
Il ciclo (loop) while a*2bse b>0 a se b≤0 la funzione f(a,b) = • Itera l’esecuzione di unaistruzionefintantoché 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?
Tornando al MCD… il codice • trovato = 0; • Leggi A e B • min= il minimo tra A e B • MCD = min; • Finche’ trovato != 1 • Se MCD divide A e B • Allora trovato = 1 • Altrimenti MCD = MCD - 1 • Stampa MCD
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
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
Nuoto: codice - errori Cosa succede a giudice ad ogni iterazione? NIENTE!!!! Ciclo infinito!!!
Osservazioni • 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!
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
Il maggiore tra N numeri: osservazione Osservazione: Perchè usare un while se conosco il numero di iterazioni del cliclo?
Il ciclo for cont = 0; while (cont < N) { …; …; cont++; } for (cont = 0; cont < N; cont++) { …; …; }
for ( exp.A; cond; exp.I ) { ist.1; ... ist.N; } exp.A; while (cond) { ist.1; ... ist.N; exp.I; } Il ciclo for ATTENZIONE
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,…
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
Coefficiente binomiale • Il numero di scelte di k oggetti fra quelli che costituiscono un insieme di n elementi • Quindi il numero dei sottoinsiemi di k elementi di un dato insieme di n oggetti, è dato dal cosiddetto coefficiente binomiale:
Coefficiente binomiale: flusso • Inserire K e N • Verifico K e N • Se corretti • Calcolare il fattoriale di N (FatN) • Calcolare il fattoriale di K (FatK) • Calcolare il fattoriale di N-K (FatNK) • CoefBin = FatN/(FatK)*FatNK • Altrimenti torno a 1
Problemi di fine giornata… • Modificaregliesercizi di oggi, andando, dove necessario, ad inserireilcontrollosugliingressi • Trovareilmaggioretra N numeripositiviinseriti da tastiera (richiedendoilnumero se negativo) • Dati N numeri, dire se questisonotuttipositivi • Dati N numeri, riportarne a video ilmodulo
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 - http://home.dei.polimi.it/braga/