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

Post on 09-Aug-2020

2 views 0 download

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

Corso di Laboratorio di Informatica

Ingegneria Clinica – BCLR

Unità 4

Istruzioni di ciclo

Domenico Daniele Bloisi

Docente

Ing. Domenico Daniele Bloisi, PhD

Ricercatore

Dipartimento di Ingegneria Informatica, Automatica

e Gestionale “Antonio Ruberti”

Via Ariosto 25

(adiacente Piazza Dante,

Manzoni

Tram 3 fermata via Labicana)

email: bloisi@dis.uniroma1.it

home page:

Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Pagina 2

http://www.dis.uniroma1.it/~bloisi

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 avvisi

http://www.dis.uniroma1.it/~bloisi/didattica/labinf1415.html#Avvisi

Pagina 3 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Orari

Lunedì 12.00 – 13.30

Aula 4, via del Castro Laurenziano 7A

Martedì 14.00 – 17.15

Aula 15, Laboratorio Didattico via Tiburtina 205

Mercoledì 12.00 – 13.30

Aula 4, via via del Castro Laurenziano 7A

Pagina 4 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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

Pagina 5 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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)

Pagina 6 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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

Pagina 7 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Cicli definiti ed indefiniti

Si distinguono due tipi di ciclo, che si differenziano in base a

come viene determinato il numero di iterazioni (cioè le

ripetizioni delle istruzioni nel 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).

Pagina 8 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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.

Il numero di iterazioni è noto

a tempo di compilazione

Il numero di iterazioni non è

noto a tempo di compilazione

Pagina 9 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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)

Pagina 10 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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 a 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.

Pagina 11 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Esempio

Stampa di 100 asterischi (ciclo definito)

int i = 0;

while (i < 100) {

printf("*");

i++;

}

Pagina 12 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Controllo del flusso

condizione

≠ 0

vero

0

falso

istruzione-n+1

istruzione-1

istruzione-n

while (condizione) {

istruzione-1

istruzione-n

}

istruzione-n+1

Pagina 13 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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 i dati terminano o viene riscontrato un errore in lettura, la funzione restituisce il valore EOF.

EOF (End Of File) è una costante simbolica di tipo

int, definita in stdio.h, che generalmente vale -1.

Pagina 14 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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;

}

ciclo

indefinito

Le iterazioni continuano

fino a quando non

vengono premuti

contemporaneamente i

tasti CTRL e Z (in Windows)

oppure

CTRL e D (in Unix/Mac)

Pagina 15 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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.

Pagina 16 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Ciclo while per la lettura

Versione alternativa

Lettura 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

Pagina 17 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Esempio di esecuzione

Pagina 18 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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

Pagina 19 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Struttura generale del ciclo di lettura

lettura del primo elemento;

while (elemento è valido) {

elaborazione elemento;

lettura elemento successivo;

}

Pagina 20 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Esempio di ciclo while: divisione con le

sottrazioni

int 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

Pagina 21 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Esempio di ciclo while: potenza

int base, esponente, potenza;

base = ...;

esponente = ...;

potenza = 1;

while (esponente > 0) {

potenza *= base;

esponente--;

}

ciclo

definito

Pagina 22 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Esempio di ciclo while: prodotto con le

somme

int moltiplicando, moltiplicatore, prodotto;

moltiplicando = ...;

moltiplicatore = ...;

prodotto = 0;

while (moltiplicatore > 0) {

prodotto += moltiplicando;

moltiplicatore--;

}

ciclo

definito

Pagina 23 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Pagina 24

Elementi caratteristici nella

progettazione di un ciclo

iniziliazzazione

while (condizione) {

operazione

passo 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)

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.

Esempio l'istruzione moltiplicatore--; consente di

rendere la condizione (moltiplicatore > 0)

falsa, se moltiplicatore è un numero intero positivo.

Pagina 25 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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

Pagina 26 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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");

}

Pagina 27 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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);

}

Pagina 28

Manca l’aggiornamento di i

Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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++;

}

Pagina 29 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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)

Pagina 30 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo contatore: numero di

interi immessi in input

int 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);

Pagina 31 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo contatore: numero di

interi positivi immessi in input

int 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);

Pagina 32 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo accumulatore: somma

valori interi int d; //intero corrente

int i;

int somma; //variabile usata come accumulatore

somma = 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);

Pagina 33 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo accumulatore:

prodotto valori interi

int n; //intero corrente

int i;

int prodotto; //variabile usata come accumulatore

prodotto = 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);

Pagina 34 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo valori caratteristici di un

insieme: massimo di un intervallo noto

int max; // massimo corrente

max = 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);

Assunzioni

intervallo di interi noto, è

possibile denotare valori

estremi (es. tutti i valori

sono > 0)

l’insieme di interi può

essere vuoto

Problema

trovare il massimo di un

insieme di numeri interi

dati in input.

Pagina 35 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo valori caratteristici di un

insieme: massimo di un insieme non vuoto

double f; // reale corrente

double max; // massimo corrente

int 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);

Assunzioni

nell’insieme vi è almeno un

reale

l’intervallo di reali non è

noto, non si possono

denotare i valori estremi.

Problema

trovare il massimo di un

insieme di numeri reali dati

in input.

Pagina 36 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

Schema di ciclo valori caratteristici di un

insieme: massimo nel caso generale

double f; // reale corrente

double max = 0; // massimo corrente

int 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);

}

Assunzioni

l’insieme di reali

potrebbe essere

vuoto

l’intervallo di reali

non è noto

Problema

trovare il massimo di un

insieme di numeri reali

dati in input.

Pagina 37 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4

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.

Esempio Immettere un carattere c e un intero n (es. e 7):

D 3

D

D

D

Pagina 38 Laboratorio di Informatica

2014/2015

Istruzioni di ciclo

Unità 4