Process synchronization Operating System Costrutti iterativi Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 23 Settembre 2016 © 2005 William Fornaciari
Obiettivi Costrutti iterativi do.. while While for
Problema: caratteri MaIuScOli Si scriva un programma che, preso un carattere minuscolo da tastiera, ne riporta a video l’equivalente maiuscolo
Maiuscolo: codice ottimizzato
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
Pseudocodice V1 Dati Richiedere l’inserimento di un carattere L’insieme dei caratteri ammissibili {a, b, c, …, z} Richiedere l’inserimento di un carattere Se carattere inserito corretto Allora stampa a video carattere-32 Altrimenti stampa a video un messaggio di errore ritorna ad 1
Pseudocodice V2 Dati Richiedere l’inserimento di un carattere L’insieme dei caratteri ammissibili {a, b, c, …, z} Richiedere l’inserimento di un carattere Finchè carattere inserito !corretto torna ad 1 Stampa a video carattere-32
MaIuScOli: codice V2
ATTENZIONE!!! 2. Finchè carattere inserito !corretto MaIuScOli: codice V2 ATTENZIONE!!! 2. Finchè carattere inserito !corretto Identifica il carattere CORRETTO!
MaIuScOli: codice corretto Richiedere l’inserimento di un carattere Finchè carattere inserito !corretto torna ad 1
MaIuScOli: codice corretto Richiedere l’inserimento di un carattere Finchè carattere inserito !corretto torna ad 1
MaIuScOli: codice corretto
Come traduco il finché? WHILE 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); condizione di PERMANENZA nel ciclo
Il ciclo (loop) while Che cosa calcola? 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*2b se b>0 a se b≤0
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
Il maggiore: codice
Il maggiore tra N numeri: osservazione Osservazione: Perchè usare un while se conosco il numero di iterazioni del cliclo?
Il maggiore: zoom sul codice
Il ciclo for cont = 0; while (cont < N) { …; cont++; } for (cont = 0; cont < N; cont++) { …; }
Il ciclo for ATTENZIONE exp.A; while ( cond ) { ist.1; ... ist.N; exp.I; } for ( exp.A; cond; exp.I ) { ist.1; ... ist.N; }
Il maggiore – for : codice
Il maggiore – while Vs for
Ora dovrebbe essere chiara…
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
Fonti per lo studio + Credits Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 6 Credits Daniele Braga - http://home.dei.polimi.it/braga/