Top Banner
Esercitazione 4 Comandi iterativi for, while, do-while
30

Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Feb 16, 2019

Download

Documents

lamngoc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercitazione 4

Comandi iterativifor, while, do-while

Page 2: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Comando for

for (istr1; cond; istr2)istr3;

Le istruzioni vengono eseguite nel seguente ordine:

1) esegui istr12) se cond è vera vai al passo 3 altrimenti termina3) esegui istr34) esegui istr2 e ritorna al passo 2

Nota: se cond è falsa il ciclo non viene percorsoistr2

istr1

istr3

condF

T

Page 3: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Attenzione

Ogni istr3 può essere un blocco, nel qual caso deve iniziare con una parentesi graffa aperta { e terminare con una parentesi graffa chiusa }.

Per esempio, se istr3= istr3.1; istr3.2; istr3.3; si deve scrivere

for (istr1; cond; istr2) {istr3.1;istr3.2;istr3.3;… }

Page 4: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Attenzione

Anche istr1 e istr2 possono contenere più di un’istruzione, ma inquesto caso non servono le parentesi. Inoltre le istruzioni sonoseparate da virgole.

Per esempio, possiamo scrivere

for (i=1, j=5; i<10 && j<100; i++, j=i*j)

istr1 cond istr2

Page 5: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

EsercizioScrivere un programma che calcola la somma di cinque numeri interi immessi dall’utente.

SOLUZ 1) Usare 5 variabili distinte, una per ogni numero immesso, e poi sommare i loro valori.

….. INEFFICIENTE e POCO GENERALE….

SOLUZ 2) Scriviamo un ciclo for che ad ogni iterazione: - legge in input un numero, - lo memorizza nella variabile numero, - aggiorna il valore della variabile somma aggiungendo l’ultimo numero letto.

Page 6: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio (continua)Variabili: somma contiene la somma dei numeri letti fino a quel punto

numero contiene l’ultimo numero lettoInvariante del ciclo: somma contiene la somma dei numeri letti fino a quel

punto#include <stdio.h>

int main ( ) {int i, somma, numero;somma = 0;for (i=1; i<=5; i++) { /* il corpo del ciclo for è un blocco */

printf (“Inserisci un intero: ”);scanf (“%d”, &numero);somma += numero; } /* somma = somma + numero */

printf (“Somma: %d\n”, somma); }

Page 7: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Output

Durante l’esecuzione del programma l’utente sarà chiamatoa introdurre cinque numeri interi:

Inserisci un intero: 32Inserisci un intero: 111Inserisci un intero: 2Inserisci un intero: 77Inserisci un intero: 13Somma: 235

Page 8: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Scrivere un programma che calcola la somma di una sequenza di numeri immessi dall’utente. Si assuma che la sequenza termini quando viene immesso il numero 0.

#include <stdio.h>int main ( ) {int somma, numero;numero = 1; somma = 0;for ( ; numero!=0 ; ) {

printf (“Inserisci un intero: ”);scanf (“%d”, &numero);somma += numero; } /* somma = somma + numero */

printf (“Somma: %d\n”, somma); }

Page 9: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Output

Durante l’esecuzione del programma l’utente sarà chiamato a introdurre una sequenza di numeri interi. L’esecuzione termina quando vieneinserito il numero 0.

Inserisci un intero: 32Inserisci un intero: 111Inserisci un intero: 2Inserisci un intero: 77Inserisci un intero: 13Inserisci un intero: 0Somma: 235

Page 10: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Modifica il programma precedente in modo tale da non doverinizializzare la variabile numero prima dell’esecuzione del ciclo for.

Suggerimento:Usa il comando do-while in modo che la variabile numero venga

inizializzata con il primo valore immesso dall’utente.

Page 11: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Dire cosa fa il seguente frammento di codice.

#include <stdio.h>int main ( )

{int i;for ( i=0; i<=100 ; i+=10 )

printf (“%d\n”, i);}

stampa0102030405060708090100

Page 12: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Dire cosa fa il seguente frammento di codice.

#include <stdio.h>int main ( )

{int i;for ( i=5; i>=5 ; i++ )

printf (“%d\n”, i);}

stampa567891011121314…

Page 13: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Qual’è il valore di i al termine dell’esecuzione del ciclo for ?

#include <stdio.h>int main ( )

{int i;for ( i=1; i<1000 ; i+=100 )

printf (“%d\n”, i);}

Soluzione:i = 1001

Page 14: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Comando while

while (cond)istruzione;

Le istruzioni vengono eseguite nel seguente ordine:

1) se cond è vera vai al passo 2 altrimenti termina2) esegui istruzione e ritorna al passo 1

Nota: se cond è falsa il ciclo non viene mai eseguito.Anche qui, istruzione può essere un blocco.

istruzione

condF

T

Page 15: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Scrivere un programma che calcola la somma di cinque numeri interi immessi dall’utente.

#include <stdio.h>int main ( ) {int i, somma, numero;somma = 0; i = 1; /* inizializzazione delle variabili somma e i */while ( i<=5 ) { /* il corpo del ciclo while è un blocco */

printf (“Inserisci un intero: ”);scanf (“%d”, &numero);somma += numero;i++; }

printf (“Somma: %d\n”, somma); }

Page 16: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Si può inserire l’incremento della variabile di controllo i del ciclo whileall’interno della condizione logica presente tra le parentesi rotonde.

#include <stdio.h>int main ( ) {int i, somma, numero;somma = 0; i = 1;while ( i++<=5 ) {

printf (“Inserisci un intero: ”);scanf (“%d”, &numero);somma += numero;}

printf (“Somma: %d\n”, somma); }

Page 17: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Si può anche inizializzare i a 5 e decrementare il valore di i ad ogniiterazione. La condizione diviene falsa quando i assume valore zero.

#include <stdio.h>int main ( ) {int i, somma, numero;somma = 0; i = 5;while ( i-- ) {

printf (“Inserisci un intero: ”);scanf (“%d”, &numero);somma += numero;}

printf (“Somma: %d\n”, somma); }

Page 18: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma che calcola la somma e il massimo di unasequenza di numeri immessi dall’utente corrispondenti alle spesemensili di una famiglia. Si assume che

i numeri immessi siano tutti positivi, la sequenza termini quando viene immesso il numero 0,che non si possano immettere più di 12 numeri (corrispondenti a 12 mesi).

Page 19: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Soluzione #include <stdio.h>

int main ( ) {int i, somma, spesa_mensile, max;i = 1;scanf (“%d”, &spesa_mensile);max= spesa_mensile;somma = spesa_mensile;while (spesa_mensile != 0 && i<12) {

printf (“Inserisci spesa successiva: ”);scanf (“%d”, &spesa_mensile);if (spesa_mensile > max) //Invariante del ciclo:

max = spesa_mensile; //max e somma contengono somma += spesa_mensile; //rispettivamente il massimo ei++; } //e la somma dei valori inseriti

printf (“Spesa totale: %d\n”, somma); printf (“Spesa massima: %d\n”, max); }

Page 20: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Comando do-while

do istruzione;

while (cond)

Le istruzioni vengono eseguite nel seguente ordine:

1) esegui istruzione2) se cond è vera vai al passo 1 altrimenti termina

Nota: se cond è falsa il ciclo viene eseguito 1 volta.Anche qui, istruzione può essere un blocco.

istruzione

condFT

Page 21: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Attenzione

Il comando do-while si usa quando si vuole che il corpo del ciclo venga eseguito almeno una volta.

Page 22: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio Scrivere un programma che stampa su video n linee e m colonnecostituite dal carattere +.

#include <stdio.h>int main ( ) {int n, m, i, j;printf(“Inserisci il numero di linee e colonne: \n”);scanf (“%d %d”, &n, &m);

for (i=1; i<=n; i++) { /* ciclo esterno: costruisce una riga printf(“\n”); ripetilo n volte */

for (j=1; j<=m; j++) /* ciclo interno: stampa un ‘+’ printf(“+”); ripetilo m volte */

} }

Page 23: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Output

Il programma produce il seguente output:

Inserisci il numero di linee: 5Inserisci il numero di colonne: 10

++++++++++++++++++++++++++++++++++++++++++++++++++

Page 24: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma che legge un numero intero n e scrive i primi n numeri dispari.

#include <stdio.h>int main ( )

{int i, n;printf(“Inserisci il numero n: \n”);scanf (“%d”, &n);for (i=0; i<n; i++) // Invariante del ciclo:

printf (“%d ”, 2*i+1); // Alla fine dell’i-esima iterazione ho// stampato i primi i numeri dispari

printf (“\n”); }

Page 25: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma che stampa gli interi positivi minori di 100 edivisibili sia per 6 che per 7.

#include <stdio.h>int main ( )

{int i;for (i=0; i<100; i++)

if ( !(i%6) && !(i%7))printf (“%d \n”, i);

}

Page 26: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma come prima usando il comando while.

#include <stdio.h>int main ( )

{int i=0;while (i<100) {

if ( !(i%6) && !(i%7))printf (“%d \n”, i);

i++; }}

Page 27: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma che legga da tastiera una sequenza di 0 e 1, terminata da un 2, calcoli la lunghezza della piu` lungasottosequenza di 0, e la stampi.

ESEMPIO: 0 0 1 0 1 0 0 0 1 0 1 2 ---> 3 .

#include <stdio.h>int main ( )

{ int bit; /* l'elemento della sequenza appena letto */int cont = 0; /* lunghezza della sequenza corrente di zeri;

inizialmente non abbiamo ancora letto nulla */int maxlung = 0; /* massima lunghezza incontrata finora;

inizialmente e` 0 */

Page 28: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

printf("Inserisci una sequenza di 0, 1 terminata da 2\n");do {scanf("%d", &bit);if (bit == 0) { // e` stato letto un altro 0 cont++; // aggiorna la lunghezza della sequenza corrente if (cont > maxlung) // se necessario, aggiorna il massimo temporaneomaxlung = cont;

}else // e` stato letto un 1 (o il 2 finale) cont = 0; // azzera la lunghezza della sequenza corrente

} while (bit != 2); // quando si legge 2 il ciclo termina

printf("La piu` lunga sottosequenza di soli zeri e` lunga %d\n", maxlung);

}

Page 29: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

Esercizio

Scrivere un programma che

legge una sequenza di caratteri (il carattere # termina la sequenza)per ciascun carattere letto stampa il relativo codice ASCII e, nel

caso sia una lettera dell’alfabeto minuscola, viene operata la trasformazione in lettera maiuscola.

Page 30: Esercitazione 4 - dsi.unive.itprog1/Esercizi_in_aula/Esercizi4.pdf · Esercizio (continua) Variabili: somma contiene la somma dei numeri letti fino a quel punto numero contiene l’ultimo

#include <stdio.h>int main ( )

{char C, CM;printf (“Inserire un carattere - # per terminare il programma\n”);scanf (“%c”, &C);while (C != ‘#’)

{ printf (“Il codice ASCII del carattere %c e’ %d\n”, C, C);

/* Se il carattere e’ una lettera minuscola */if (C>=‘a’ && C<=‘z’) {/* La differenza ‘a’ - ‘A’ e’ lo scarto fra la rappresentazione ASCII

delle lettere maiuscole e minuscole dell’alfabeto */CM = C - (‘a’ - ‘A’);printf (“La lettera maiuscola per %c e’ %c e il suo codice

ASCII e’ %d\n”, C, CM, CM); }printf (“Inserire un carattere - # per terminare il programma\n”);scanf (“%c”, &C); }

}