2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) Linguaggio C++ 5 Strutture cicliche Linguaggio C++ 5 1
Strutture cicliche Utilizzate per ripetere un certo numero di volte un blocco di istruzioni. Si distinguono in: Ripetitive il il numero di di ripetizioni del del blocco è predefinito a priori Iterative il il numero di di ripetizioni del del blocco dipende dal dal verificarsi di di una una condizione Fai 10 giri intorno all isolato Fai 10 giri intorno all isolato for Gira intorno all isolato fino a che hai fiato Gira intorno all isolato fino a che hai fiato while do..while Linguaggio C++ 5 2
L istruzione while Ripete l esecuzione del blocco di istruzioni mentre è vera la relazione while (relazione) blocco istruzioni relazione vera Blocco istruzioni falsa int n = 100; while(n--) cout << n << ; stampa tutti tutti i i numeri da da 99 99 a 0 Il Il posizionamento del del test-relazione a monte può può comportare (relazione subito falsa) la la non non esecuzione del del blocco. Pertanto tale tale struttura dicesi a percorrenza minima 0. 0. Linguaggio C++ 5 3
Esercizio Assegnato il numero N, determinare la somma dei primi N numeri interi N=7 Somma =28 Linguaggio C++ 5 4
Una soluzione più semplice Linguaggio C++ 5 5
Linguaggio C++ 5 6
Assegnata una sequenza di numeri positivi si determini quanti ne sono e la loro somma La sequenza è terminata da un valore negativo 3 5 7 8 2 1-6 Numero valori positivi =6 Somma =26 Linguaggio C++ 5 7
Linguaggio C++ 5 8
Esercizio Scrivere un programma che ricevendo in ingresso un numero positivo N ne determini il massimo intero K tale che la somma dei primi K interi sia <=N N = 20 1 + 2 + 3 + 4 + 5 = 15 < 20 1 + 2 + 3 + 4 + 5 + 6 = 21 > 20 K =5 Metodo risolutivo Una variabile i, inizialmente posta ad 1, che incrementandosi scandisce i numeri (utilizzo di un ciclo) Una variabile somma tiene conto delle somme parziali all incrementarsi di i Fine ciclaggio quando somma parziale <= K Linguaggio C++ 5 9
Linguaggio C++ 5 10
In caso contrario indichi i suoi divisori Linguaggio C++ 5 11
Problema nell esercizio777 Il ciclo for va percorso per intero anche se è stata individuata la condizione di numero non primo (trovato=true) Soluzione: Utilizzo struttura while con blocco appena individuata condizione di numero non primo Linguaggio C++ 5 12
Linguaggio C++ 5 13
Un cliente ad uno sportello bancario può compiere operazioni di versamento o prelievo bancario nei limiti di un certo fido. Il numero max di operazioni sia 5 Linguaggio C++ 5 14
L istruzione do... while Simile al while, con la differenza che la condizione è posta alla fine del blocco di istruzioni. La forma generale : do blocco istruzioni while (relazione); Blocco istruzioni relazione falsa vera Il Il posizionamento del del test-relazione a valle valle comporta necessariamente la la esecuzione, almeno una una volta, del del blocco. Pertanto tale tale struttura dicesi a percorrenza minima 1. 1. Linguaggio C++ 5 15
In entrambe le strutture deve esistere l istruzione di modifica della relazione che la porti al valore falso per l uscita dalla iterazione, altrimenti si entra un una fase di loop all infinito a = 10; while a > 0 cout >> a; Loop (ciclo) infinito a = 10; while a > 0 { cout >> a; a=a-1; } OK Linguaggio C++ 5 16
Esercizio Date le misure di tre possibili lati a,b, c verificare se possibile definire un triangolo e classificarlo: isoscele, equilatero, scaleno, scaleno, rettangolare Condizione necessaria: La somma di ogni coppia di lati > del terzo lato a+b > c and a+c< b and c+b <a L input L input dei dei dati dati sia sia iterativo iterativo finche finche non non inserita inserita una una triade triade lecita lecita Linguaggio C++ 5 17
Linguaggio C++ 5 18
Esercizio Data in ingresso una sequenza di valori reali positivi e #0, determinare il numero di valori e la media aritmetica Il valore 0 è utilizzato come terminatore della sequenza in ingresso 1 2 4 6 9 0 Numero valori =5 Media= 4.4 Ipotesi algoritmo Inizio Inizio Leggi Leggi numero Se Se numero >0 >0 poni poni nrovalori=1 esegui esegui blocco blocco do do aggiorna somma leggi leggi altro altro numero incrementa nro nrovalori fine fine blocco blocco mentre mentre (numero 0) 0) while while decrementa nro nrovalori Calcola media media Linguaggio C++ 5 19
Linguaggio C++ 5 20
Nell esercizio precedente, in considerazione del trattamento esclusivo di valori positivi e maggiori di 0, si era utilizzato il valore 0 quale terminatore della sequenza di valori in ingresso Nel caso di valori riferentesi a rilievi di temperature, laddove sono leciti anche valori negativi di temperatura, l impostazione del terminatore della sequenza si basa sull utilizzo di una coppia di informazioni: temperatura, cosa fare float char Prosegue la sequenza (+) Termina la sequenza (-) Linguaggio C++ 5 21
Richiesta da set precision() Linguaggio C++ 5 22
Definisce l output a 3 posizioni 12 + 25 + -7 + 5 + 24 + 11 - Temp. Media =11.7 Linguaggio C++ 5 23
Assegnato un numero intero positivo determinare il numero di cifre componenti il numero 12345 5 Linguaggio C++ 5 24
Linguaggio C++ 5 25
Intercambiabilità dei costrutti while cin>>n; cin>>m; while (N < M) N=N+1; cout<<n cin>>n; cin>>m; do N=N+1; while (N<M) cout<<n while (espressione) { blocco } N=5 M=7 N=7 N=10 M=7 N=10 N=5 M=7 N=7 N=10 M=7 N=11 e do while if (espressione) do { blocco; } while (espressione) cin>>n; cin>>m; if ( N <M) { do N=N+1; while (N<M) } cout<<n N=5 M=7 N=7 N=10 M=7 N=10 Linguaggio C++ 5 26
Intercambiabilità dei costrutti do while e while do { blocco; } while (espressione) blocco while (espressione) { blocco; } cin>>n; cin>>m; do N=N+1; while (N<M) cout<<n cin>>n; cin>>m; while (N < M) N=N+1; cout<<n N=5 M=7 N=7 N=10 M=7 N=11 N=5 M=7 N=7 N=10 M=7 N=10 cin>>n; cin>>m; N=N+1; while (N < M) N=N+1; cout<<n N=5 M=7 N=7 N=10 M=7 N=11 Linguaggio C++ 5 27
L istruzione for Ripete un blocco di istruzioni per un predefinito numero di volte. for (inizializzazione; espressione test; aggiornamento) { blocco istruzioni } for for (int (intnumero=1;numero<=15;numero++) cout cout << << numero; Inizializzazione : assegna il valore iniziale alla variabile che controlla l iterazione. Viene eseguita una volta sola prima che abbia inizio il ciclo. espressione test : verificata all inizio di ogni esecuzione del blocco di istruzioni determina il proseguimento o la definitiva interruzione dell iterazione, secondo se essa è vera oppure falsa aggiornamento : al termine di ciascuna esecuzione del blocco di istruzioni viene modifica la variabile che controlla il ciclo. Linguaggio C++ 5 28
n1=n1+n2 Linguaggio C++ 5 29
Esercizio Assegnati due interi positivi, calcolarne il prodotto mediante la sola operazione di somma 3 * 5 3+3+3+3+3 Prodotto=0 Se ((1 fattore # 0) e (2 fattore # 0)) per indice da 1 a 2 fattore prodotto=prodotto*1 fattore Stampa prodotto 5 Linguaggio C++ 5 30
Linguaggio C++ 5 31
Esercizio Generazione tabella quadrati,cubi e radice quadrata Per Per funzioni matematiche di di libreria: libreria: pow(a,b) Per Per funzioni posizionamento: setw(a) setw(a) Linguaggio C++ 5 32
Esercizio Linguaggio C++ 5 33
Assegnato un valore intero positivo verificare se è un numero primo. In caso contrario individuare il suo primo divisore Linguaggio C++ 5 34
l istruzione for ammette la presenza di più variabili di controllo. Ad esempio: int a, b; for (a = 0, b = 2; a*2 <= b; a++, b++) cout << a = << a <<, b = << b << endl; inizializzazione: a = 0, b = 2 test: 0*2 <= 2 cioè 0 <= 2? sì istruzione: stampa a = 0, b = 2 aggiornamento: a = 1; b = 3; test: 1*2 <= 3 cioè 2 <= 3? sì istruzione: stampa a = 1, b = 3 aggiornamento: a = 2, b = 4 test: 2*2 <= 4 cioè 4 <= 4? sì istruzione: stampa a = 2, b = 4 aggiornamento: a = 3, b = 5 test: 3*2 <= 5 cioè 6 <= 5? no, esce Linguaggio C++ 5 35
l istruzione for può essere utilizzata nella forma for ( ; test ;) for ( ; n<=10 ;) Nel significato: La variabile cointeressata nel testo inizializzata con l ultimo valore assegnatole Valore di aggiornamento 0 int numero = 20; for (; numero <= 15; numero++) cout << numero; Nessun numero viene stampato Linguaggio C++ 5 36
Esercizio 24 Linguaggio C++ 5 37
Indentazione Modalità di disposizione del testo del programma in modo da evidenziare la struttura delle istruzioni composte. ----------------- min = x[0]; for (i=1; i < n; i++) if (x[i] < min) min = x[i]; cout << min: ----------------- indentata ----------------- min = x[0]; for (i=1; i < n; i++) if (x[i] < min) min = x[i]; cout << min: ----------------- Non indentata Linguaggio C++ 5 38
Indentazione ----------------- min = x[0]; max =x[0]; somma =x[0]; for (i=1; i < n; i++) { somma=somma+x[i]; if (x[i] < min) min = x[i]; else if (x[i] > max) max = x[i]; } cout << min; cout << max ----------------- Linguaggio C++ 5 39
Istruzione break Consente di uscire in anticipo dal loop attivato dal for Se valore è uguale a zero, si esegue l istruzione break uscendo dal ciclo, altrimenti si continua a chiedere un numero Linguaggio C++ 5 40
Istruzione continue consente di interrompere una iterazione senza completarla per passare direttamente alla successiva. Linguaggio C++ 5 41
Istruzione goto Salto guidato goto etichetta; etichetta una sorta di segnaposto che individua un punto specifico del programma cui andare forzatamente Nella specifica l etichetta deve essere seguita da : Linguaggio C++ 5 42
Linguaggio C++ 5 43