Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica...

38
Corso di Laboratorio di Informatica Ingegneria Clinica – BCLR Unità 4 Istruzioni di Ciclo Domenico Daniele Bloisi

Transcript of Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica...

Page 1: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Corso di Laboratorio di InformaticaIngegneria Clinica – BCLR

Unità 4

Istruzioni di Ciclo

Domenico Daniele Bloisi

Page 2: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Docente

Ing. Domenico Daniele Bloisi, PhDRicercatore

Dipartimento di Ingegneria Informatica, Automaticae Gestionale “Antonio Ruberti”Via Ariosto 25(adiacente Piazza Dante,

fermate Manzoni, Vittorio Emanuele,

Tram 3 fermata via Labicana)

Email: [email protected]

Home page: http://www.dis.uniroma1.it/~bloisi2013/2014Istruzioni di Ciclo

Unità 4Pagina 2

Page 3: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Ricevimento

In aula, subito dopo le lezioni Su appuntamento (tramite invio di una email) presso: Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti, via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la bacheca degli avvisihttp://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Avvisi

2013/2014Istruzioni di CicloUnità 4

Pagina 3

Page 4: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Orari

Lunedì 12.00 – 13.30 Aula 15, via Scarpa 14

Lunedì 14.00 – 17.15Aula 15, Laboratorio Didattico via Tiburtina 205

Martedì 14.00 – 15.30 Aula 16, via Scarpa 14

Mercoledì 12.00 – 13.30 Aula 15, via Scarpa 14

2013/2014Istruzioni di CicloUnità 4

Pagina 4

Page 5: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Sommario – Unità 4

• Ripetizione di istruzioni• Istruzione while• Ciclo di lettura• Schemi di ciclo• Istruzione for• Istruzione do• Cicli annidati• Istruzioni di controllo del flusso

2013/2014Istruzioni di CicloUnità 4

Pagina 5

Page 6: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Istruzioni di controllo del flusso

Finora abbiamo visto:

• istruzioni semplici:– invocazione di funzioni– istruzioni semplici, come assegnazione o uso di un operatore di incremento/decremento seguito da ";"– istruzioni di uscita (break e return)

• istruzioni composte (o strutturate)– blocco di istruzioni ({})– istruzioni condizionali (if-else, if, switch)

2013/2014Istruzioni di CicloUnità 4

Pagina 6

Page 7: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Ripetizione di istruzioni

Nei linguaggi di programmazione esistono due modi per ottenere la ripetizione di istruzioni:

L'utilizzo di istruzioni di ciclo (o iterative), che sono una forma di istruzione composta

L'utilizzo di funzioni ricorsive

2013/2014Istruzioni di CicloUnità 4

Pagina 7

Page 8: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Cicli definiti ed indefiniti

Si distinguono due tipi di ciclo, che si differenziano in base a come viene determinato il numero di iterazioni(ripetizioni del corpo del ciclo):

Nei cicli definiti il numero di iterazioni è noto prima di iniziare l'esecuzione del ciclo.

Nei cicli indefiniti il numero di iterazioni non è noto prima di iniziare l'esecuzione del ciclo, ma è legato al verificarsi di una condizione (questo dipende a sua volta dalle operazioni eseguite nel corpo del ciclo).

2013/2014Istruzioni di CicloUnità 4

Pagina 8

Page 9: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempi

Ciclo definito:per 10 volte ripeti la stampa di un *

Ciclo indefinito:finché l’utente non sceglie di smettere, stampa un * e chiedi all’utente se smettere

In C, entrambi i tipi di ciclo possono essere realizzati attraverso l’istruzione while.

Numero di iterazioni noto a tempo di compilazione

Numero di iterazioni noto a tempo di esecuzione

2013/2014Istruzioni di CicloUnità 4

Pagina 9

Page 10: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Ciclo while

L’istruzione while consente la ripetizione di una istruzione.

Sintassi

while (condizione)istruzione

• condizione è un’espressione• istruzione (detta anche il corpo del ciclo) è una singola istruzione (anche composta come un blocco di istruzioni)

2013/2014Istruzioni di CicloUnità 4

Pagina 10

Page 11: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Semantica

• viene valutata prima la condizione

• se è vera, viene eseguita istruzione e si torna a valutare la condizione, procedendo così fino a quando condizione diventa falsa

• a questo punto si passa ad eseguire l’istruzione che segue il ciclo while

il corpo del ciclo viene eseguito finché la condizione si mantiene vera. Non appena questa diventa falsa, si esce dal ciclo e si continua l’esecuzione con l’istruzione successiva al while.

2013/2014Istruzioni di CicloUnità 4

Pagina 11

Page 12: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio

stampa di 100 asterischi (ciclo definito)

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

printf("*");i++;

}

2013/2014Istruzioni di CicloUnità 4

Pagina 12

Page 13: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Controllo del flusso

condizione

≠ 0vero

0falso

istruzione-n+1

istruzione-1…

istruzione-n

while (condizione) {istruzione-1…istruzione-n

}istruzione-n+1

2013/2014Istruzioni di CicloUnità 4

Pagina 13

Page 14: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Ciclo while per la lettura

lettura e stampa su video di un insieme di caratteri in input.

#include <stdio.h>

int main () {int c;c = getchar();while (c != EOF) {

putchar(c);c = getchar();

}return 0;

}

cicloindefinito

Le iterazioni continuano fino a quando non vengono premuti

contemporaneamente i tasti CTRL e Z (Windows)

oppure CTRL e D (Unix)

2013/2014Istruzioni di CicloUnità 4

Pagina 14

Page 15: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Funzione getchar

Legge il prossimo carattere dallo standard input e lo restituisce come valore intero

int getchar( void );

Il carattere letto è restituito come int.Se si raggiunge End Of File (EOF) o viene riscontrato un errore in lettura, la funzione restituisce il valore della costante simbolica di tipo int EOF (che generalmente vale -1) definita in stdio.h

2013/2014Istruzioni di CicloUnità 4

Pagina 15

Page 16: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Funzione putchar

Visualizza sullo standard output il carattere immagazzinato in c

int putchar( int c );

Se non ci sono errori, lo stesso carattere letto viene restituito.Se si verifica un errore, viene restituito EOF.

2013/2014Istruzioni di CicloUnità 4

Pagina 16

Page 17: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Ciclo while per la lettura versione alternativaLettura e stampa su video di un insieme di caratteri in input.

#include <stdio.h>

int main () {int c;while ((c = getchar()) != EOF)

putchar(c);return 0;

}

ciclo indefinito

2013/2014Istruzioni di CicloUnità 4

Pagina 17

Page 18: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio di esecuzione

2013/2014Istruzioni di CicloUnità 4

Pagina 18

Page 19: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio

Stampa del doppio degli interi letti in input.

#include <stdio.h>

int main () {int c, dato;c = scanf("%d", &dato);while (c != EOF) {

dato *= 2;printf("%d\n", dato);c = scanf("%d", &dato);

}return 0;

}

ciclo indefinito

2013/2014Istruzioni di CicloUnità 4

Pagina 19

Page 20: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Struttura generale del ciclo di lettura

lettura del primo elemento;while (elemento è valido) {

elaborazione elemento;lettura elemento successivo;

}

2013/2014Istruzioni di CicloUnità 4

Pagina 20

Page 21: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio di ciclo while: divisione con le sottrazioniint dividendo, divisore, quoziente, resto;dividendo = ...;divisore = ...;quoziente = 0;resto = dividendo;while (resto >= divisore) {

quoziente++;resto -= divisore;

}printf("quoziente = %d\n", quoziente);printf("resto = %d\n", resto);

ciclo definito

2013/2014Istruzioni di CicloUnità 4

Pagina 21

Page 22: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio di ciclo while: potenza

int base, esponente, potenza;base = ...;esponente = ...;potenza = 1;while (esponente > 0) {

potenza *= base;esponente--;

}

ciclo definito

2013/2014Istruzioni di CicloUnità 4

Pagina 22

Page 23: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esempio di ciclo while: prodotto con le sommeint moltiplicando, moltiplicatore, prodotto;moltiplicando = ...;moltiplicatore = ...;prodotto = 0;while (moltiplicatore > 0) {

prodotto += moltiplicando;moltiplicatore--;

}

ciclo definito

2013/2014Istruzioni di CicloUnità 4

Pagina 23

Page 24: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Pagina 242013/2014Istruzioni di CicloUnità 4

Elementi caratteristici nellaprogettazione di un ciclo

iniziliazzazionewhile (condizione) {

operazionepasso successivo

}

definizione del valore delle variabili utilizzate nel ciclo prima dell’inizio dell’esecuzione del ciclo espressione valutata all’inizio di

ogni iterazione, il cui valore di verità determina l’esecuzione del corpo del ciclo o la fine del ciclo

calcolo del risultato parziale ad ogni iterazione del ciclo (nel corpo del ciclo)

operazione di incremento/decremento della variabile che controlla le ripetizioni del ciclo (nel corpo del ciclo)

Page 25: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Terminazione

Una volta progettato il ciclo occorre verificarne la terminazione.Occorre, cioè, verificare che l’esecuzione delle istruzioni del ciclo possa modificare il valore della condizione in modo da renderla falsa.

Esempiol'istruzione moltiplicatore--; consente di rendere la condizione (moltiplicatore > 0) falsa, se moltiplicatore è un numero intero positivo.

2013/2014Istruzioni di CicloUnità 4

Pagina 25

Page 26: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Algoritmo: proprietà

Un algoritmo è caratterizzato da:

• non ambiguità: le istruzioni devono essere univocamente interpretabili dall’esecutore

• eseguibilità: ogni istruzione deve poter essere eseguita (in tempo finito) con le risorse a disposizione

• finitezza: l’esecuzione dell’algoritmo deve terminare in tempo finito per ogni insieme di dati in ingresso

2013/2014Istruzioni di CicloUnità 4

Pagina 26

Page 27: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Errori comuni nella scrittura di cicli while (1/3)

Mancata inizializzazione di una variabile che viene utilizzata nella condizione del ciclo.

int i;while (i != 0) {

printf("%d\n", i);printf("%d\n", i*i);printf("prossimo intero\n");

}

2013/2014Istruzioni di CicloUnità 4

Pagina 27

Page 28: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Errori comuni nella scrittura di cicli while (2/3)

Mancato aggiornamento delle variabili che compaiono nella condizione del ciclo.

int i, dato;printf("inserisci intero:\n");i = scanf("%d", &dato);while (i != EOF) {

printf("quadrato di %d = %d\n",dato, dato*dato);

}

2013/2014Istruzioni di CicloUnità 4

Pagina 28

Manca aggiornamento di i

Page 29: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Errori comuni nella scrittura di cicli while (3/3)

Numero di iterazioni errato di 1

Esempio: stampa di 10 asterischi

int i = 0;while (i <= 10) { // corretto: (i < 10)

printf("*");i++;

}

2013/2014Istruzioni di CicloUnità 4

Pagina 29

Page 30: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schemi di ciclo

contatore: conta il numero di valori in un insieme

accumulatore: accumula i valori di un insieme

valori caratteristici di un insieme: determina un valore caratteristico tra i valori in un insieme (ad esempio, il massimo, quando sui valori dell'insieme e definito un ordinamento)

2013/2014Istruzioni di CicloUnità 4

Pagina 30

Page 31: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo contatore: numero di interi immessi in inputint d, i;int contatore = 0;printf("inserisci intero:\n");i = scanf("%d", &d);while (i != EOF) {

contatore++;printf("ho letto: %d\n", d);printf("inserisci intero:\n");i = scanf("%d", &d);

}printf("\nFine lettura, ho letto %d "

" interi\n", contatore);

2013/2014Istruzioni di CicloUnità 4

Pagina 31

Page 32: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo contatore: numero di interi positivi immessi in inputint d, i;int contatore = 0;printf("inserisci intero:\n");i = scanf("%d", &d);while (i != EOF) {

if(d > 0) contatore++;printf("ho letto: %d\n", d);printf("inserisci intero:\n");i = scanf("%d", &d);

}printf("\nFine lettura, ho letto %d "

" interi positivi\n", contatore);

2013/2014Istruzioni di CicloUnità 4

Pagina 32

Page 33: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo accumulatore: somma valori interiint d; //intero correnteint i;int somma; //variabile usata come accumulatoresomma = 0;printf("inserisci intero:\n");i = scanf("%d", &d);while (i != EOF) {

somma += d;printf("inserisci intero:\n");i = scanf("%d", &d);

}printf("\nSomma totale = %d\n", somma);

2013/2014Istruzioni di CicloUnità 4

Pagina 33

Page 34: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo accumulatore:prodotto valori interiint n; //intero correnteint i;int prodotto; //variabile usata come accumulatoreprodotto = 1;printf("inserisci intero:\n");i = scanf("%d", &n);while (i != EOF) {

prodotto *= n;printf("inserisci intero:\n");i = scanf("%d", &n);

}printf("\nProdotto totale = %d\n", prodotto);

2013/2014Istruzioni di CicloUnità 4

Pagina 34

Page 35: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo valori caratteristici di un insieme: massimo di un intervallo noto

int max; // massimo correntemax = 0;int d, i;printf("inserisci intero:\n");i = scanf("%d", &d);while (i != EOF) {

if (d > max) max = d;printf("inserisci intero:\n");i = scanf("%d", &d);

}printf("\n");if (max == 0)

printf("Insieme di valori vuoto\n");else

printf("Massimo intero letto = %d\n", max);

Assunzioniintervallo di interi noto, è possibile denotare valori estremi (es. tutti i valori sono > 0)

l’insieme di interi può essere vuoto

Problematrovare il massimo di un insieme di numeri interi dati in input.

2013/2014Istruzioni di CicloUnità 4

Pagina 35

Page 36: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo valori caratteristici di un insieme: massimo di un insieme non vuoto

double f; // reale correntedouble max; // massimo correnteint i;printf("inserisci dato:\n");i = scanf("%lf", &f);max = f;while (i != EOF) {

if (f > max) max = f;printf("inserisci dato:\n");i = scanf("%lf", &f);

}printf("\nMassimo = %f\n", max);

Assunzioninell’insieme vi è almeno un reale

l’intervallo di reali non è noto, non si possonodenotare i valori estremi.

Problematrovare il massimo di un insieme di numeri reali dati in input.

2013/2014Istruzioni di CicloUnità 4

Pagina 36

Page 37: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Schema di ciclo valori caratteristici di un insieme: massimo nel caso generale

double f; // reale correntedouble max = 0; // massimo correnteint i;printf("inserisci dato:\n");i = scanf("%lf", &f);if(i == EOF)

printf("\nInsieme di valori vuoto\n");else {

max = f;while (i != EOF) {

if (f > max) max = f;printf("inserisci dato:\n");i = scanf("%lf", &f);

}printf("\nMassimo = %f\n", max);

}

Assunzionil’insieme di reali potrebbe essere vuoto

l’intervallo di reali non è noto

Problematrovare il massimo di un insieme di numeri reali dati in input.

2013/2014Istruzioni di CicloUnità 4

Pagina 37

Page 38: Presentazione di PowerPoint - Home | Dipartimento di Ingegneria informatica …bloisi/didattica/ingegneriaClinica... · 2013-11-05 · Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore

Esercizio

Si scriva un programma in grado di prendere in input un carattere c ed un intero n. Il programma deve stampare a video il carattere n volte su righe separate. Inoltre, si controlli che l’input n sia un numero > 0, in caso contrario il programma dovrà stampare un messaggio di errore.

EsempioImmettere un carattere c e un intero n (es. e 7):D 3DDD

2013/2014Istruzioni di CicloUnità 4

Pagina 38