Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Documenti analoghi
Istruzioni di ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Introduzione al C. Unità 4 Istruzioni di Ciclo

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Controllo del flusso di esecuzione Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Istruzioni iterative (o cicliche)

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Ricorsione. Unità 5. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Unità 4 Istruzioni di ciclo

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Passaggio parametri puntatore Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Tipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

INFORMATICA. Strutture iterative

Gestione della memoria

Le strutture di controllo in C++

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Le strutture di controllo

Istruzioni iterative. Istruzioni iterative

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Fondamenti di Informatica L-A

L ELABORATORE ELETTRONICO

Istruzioni decisionali

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

CORSO DI PROGRAMMAZIONE

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

PROGRAMMAZIONE: Le strutture di controllo

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Passaggio parametri puntatore

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

PROGRAMMAZIONE STRUTTURATA

STRUTTURE DI CONTROLLO DEL C++

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercitazione 6. Array

Corso di Fondamenti di Informatica Classi di istruzioni 2

3 Costrutti while, for e switch

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

L ELABORATORE ELETTRONICO!

ISTRUZIONI DI ITERAZIONE

ISTRUZIONI ISTRUZIONI

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

7. Strutture di controllo

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Gestione della memoria

Schemi ricorrenti nei cicli. Cicli ed iterazioni. Contatori. Schemi ricorrenti nei cicli. Contatori. Esempio

Elaboratore Elettronico

Algoritmi e soluzione di problemi

1 Esercizi in pseudocodice

Istruzioni Condizionali in C

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Esercitazione 3. Espressioni booleane I comandi if-else e while

C espressioni condizionali

Cosa si intende con stato

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Fondamenti di Informatica T-1 Modulo 2

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Algoritmi e basi del C Struttura di un programma

Istruzioni di ripetizione in Java 1

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Linguaggio C Informatica Grafica

Programmazione di base

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Introduzione alla programmazione

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Fondamenti di Informatica

Tipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Switch. Unità 3. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Programmazione di base

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Programmazione strutturata

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Introduzione agli Algoritmi

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Introduzione al C. Esercitazione 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Input / Output, Espressioni Condizionali e Cicli

Passaggio parametri puntatore

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

sum = 0; positivenumbers = 0; /* Passo 1 */ printf("introduci i numeri (0 per finire): "); scanf("%d", &number);

Dall analisi alla codifica (1)

Linguaggio C. Condizioni composte (operatori logici)

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Laboratorio di Informatica Ingegneria Clinica Lezione 7/11/2011. Prof. Raffaele Nicolussi

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

COMANDI ITERATIVI. Ivan Lanese

Studio degli algoritmi

Transcript:

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi

Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm Parte II ing. Domenico Daniele Bloisi, PhD bloisi@dis.uniroma1.it http://www.dis.uniroma1.it/~bloisi/didattica/fondinf1112.html Nota: %7E corrisponde alla tilde ~ Pagina 2

Informazioni Generali ing. Domenico Daniele Bloisi, PhD Dipartimento di Informatica e Sistemistica Via Ariosto 25 (adiacente Piazza Dante, A fermate Manzoni, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it http://www.dis.uniroma1.it/~bloisi Pagina 3

Ricevimento Su appuntamento. Inviare una email per conferma. DIS, via Ariosto 25 II piano, stanza B211 Si consiglia di controllare la bacheca degli avvisi http://www.dis.uniroma1.it/~bloisi/didattica/fondinf1112.html#avvisi Pagina 4

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

Istruzioni di controllo del flusso Finora abbiamo visto diversi tipi di istruzioni (senza contare le dichiarazioni): istruzioni semplici: invocazione di funzioni istruzioni semplici, ovvero 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

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

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). Pagina 8

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. Pagina 9

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

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. Pagina 11

Esempio stampa di 100 asterischi (ciclo definito) int i = 0; while (i < 100) { printf("*"); i++; Pagina 12

Controllo del flusso while (condizione) { istruzione-1 istruzione-n istruzione-n+1 0 vero istruzione-1 istruzione-n condizione 0 falso istruzione-n+1 Pagina 13

Ciclo while per la lettura lettura e stampa su video di un insieme di caratteri in input. ciclo #include <stdio.h> indefinito int main () { int c; c = getchar(); while (c!= EOF) { putchar(c); c = getchar(); return 0; In Windows le iterazioni continuano fino a quando non vengono premuti contemporaneamente i tasti CTRL e Z (EOF) Pagina 14

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 o viene riscontrato un errore in lettura, la funzione ritorna il valore della costante simbolica di tipo int EOF (che generalmente vale -1) definita in stdio.h. Pagina 15

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

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

Esempio di esecuzione Pagina 18

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); return 0; c = scanf("%d", &dato); ciclo indefinito Pagina 19

Struttura generale del ciclo di lettura lettura del primo elemento; while (elemento è valido) { elaborazione elemento; lettura elemento successivo; Pagina 20

Esempio di ciclo while: divisione con le sottrazioni int dividendo, divisore, quoziente, resto; dividendo =...; divisore =...; quoziente = 0; resto = dividendo; ciclo while (resto >= divisore) { definito quoziente++; resto -= divisore; printf("quoziente = %d\n", quoziente); printf("resto = %d\n", resto); Pagina 21

Esempio di ciclo while: potenza int base, esponente, potenza; base =...; esponente =...; potenza = 1; while (esponente > 0) { potenza *= base; esponente--; ciclo definito Pagina 22

Esempio di ciclo while: prodotto con le somme int moltiplicando, moltiplicatore, prodotto; moltiplicando =...; moltiplicatore =...; prodotto = 0; while (moltiplicatore > 0) { ciclo prodotto += moltiplicando; definito moltiplicatore--; Pagina 23

Elementi caratteristici nella progettazione di un ciclo definizione del valore delle variabili utilizzate nel ciclo prima dell inizio dell esecuzione del ciclo iniziliazzazione while (condizione) { operazione passo successivo 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) 18 Marzo 2011 Pagina 24

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

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

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

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

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

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

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

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

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

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

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); Problema trovare il massimo di un insieme di numeri interi dati in input. Assunzioni intervallo di interi noto, è possibile denotare valori estremi (es. tutti i valori sono > 0) l insieme di interi può essere vuoto printf("\n"); if (max == 0) printf("insieme di valori vuoto\n"); else printf("massimo intero letto = %d\n", max); Pagina 35

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); Problema trovare il massimo di un insieme di numeri reali dati in input. Assunzioni nell insieme vi è almeno un reale l intervallo di reali non è noto, non si possono denotare i valori estremi. Pagina 36

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); Problema trovare il massimo di un insieme di numeri reali dati in input. Assunzioni l insieme di reali potrebbe essere vuoto l intervallo di reali non è noto Pagina 37