Introduzione al C. Unità 4 Istruzioni di Ciclo

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Introduzione al C. Unità 4 Istruzioni di Ciclo"

Transcript

1 Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 4 Istruzioni di Ciclo D. Bloisi, S. Peluso, S. Salza

2 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 Istruzioni di Ciclo - Unità /2013 Pagina 2

3 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 3

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 4

5 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 5

6 Esempi Ciclo definito: Per 10 volte ripeti la stampa di un *. Numero di iterazioni noto a tempo di compilazione. Ciclo indefinito: Finché l utente non sceglie di smettere, stampa un * e chiedi all utente se smettere. Numero di iterazioni noto a tempo di esecuzione. In C, entrambi i tipi di ciclo possono essere realizzati attraverso l istruzione while. Pagina 6

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

8 Semantica 1. La condizione è valutata. 2. Se la condizione è vera, allora l istruzione è eseguita e successivamente si ritorna sulla valutazione della condizione, procedendo così fino a quando la condizione risulta falsa. 3. Si esegue poi l istruzione successiva al 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 8

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

10 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 10

11 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 (Windows) oppure CTRL e D (Unix) Pagina 11

12 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 12

13 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 13

14 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 14

15 Esempio di esecuzione Pagina 15

16 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 16

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

18 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 18

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

20 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 20

21 Elementi caratteristici nella progettazione di un ciclo Definizione del valore delle variabili utilizzate nel ciclo prima dell inizio dell esecuzione del ciclo inizialiazzazione 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) Pagina 21

22 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 22

23 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 23

24 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 24

25 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) { printf("*"); i++; // corretto: (i < 10) Pagina 25

26 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 26

27 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 27

28 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 28

29 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 29

30 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 30

31 Schema di ciclo valori caratteristici di un insieme: massimo di un intervallo noto Problema trovare il massimo di un insieme di numeri interi dati in input. 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 Pagina 31

32 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 32

33 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 33

34 Istruzioni di ciclo Il C mette a disposizione tre forme di istruzioni di ciclo: ciclo while ciclo for ciclo do-while Il ciclo while è sufficiente per esprimere qualsiasi ciclo esprimibile con for e do. In alcune situazioni è più conveniente codificare un algoritmo utilizzando gli altri tipi di ciclo. Pagina 34

35 Ciclo controllato da contatore (while) Una situazione comune di utilizzo dei cicli è quella in cui il ciclo fa uso di una variabile (detta di controllo) che ad ogni iterazione varia di un valore costante, ed il cui valore determina la fine del ciclo. variabile di controllo i inizializzazione incremento / decremento verifica int i = 1; while (i <= 10) { printf("%d\n", i * i); i++; Pagina 35

36 Ciclo controllato da contatore (for) L istruzione di ciclo for è adatta ad esprimere le situazioni in cui si utilizzano variabili di controllo. variabile di controllo i inizializzazione verifica incremento / decremento int i; for (i = 1; i <= 10; i++ ) printf("%d\n", i * i); Pagina 36

37 Istruzione for Sintassi for (inizializzazione ; condizione ; incremento ) istruzione inizializzazione è un espressione con side-effect di inizializzazione di una variabile di controllo (tipicamente un assegnazione). condizione è un espressione condizionale. incremento è un espressione con side-effect che tipicamente consiste nell incremento della variabile di controllo. istruzione è una singola istruzione (detta anche il corpo del ciclo for ). Pagina 37

38 Semantica for (inizializzazione ; condizione ; incremento ) istruzione è equivalente a inizializzazione ; while (condizione) { istruzione incremento ; Nota: C è un eccezione che riguarda l istruzione continue, che viene tradotta in modo più complicato. Pagina 38

39 Controllo del flusso for (inizializzazione ; condizione ; incremento ) { istruzione-1 istruzione-n istruzione-n+1 0 vero inizializzazione condizione istruzione-1 istruzione-n incremento 0 falso istruzione-n+1 Pagina 39

40 Osservazioni sul ciclo for (1/3) Ciascuna delle tre parti del for (inizializzazione, condizione e incremento ) può mancare. In ogni caso i ";" vanno comunque inseriti. Se manca condizione, viene assunta pari al valore 1 (vero). Esempio: for(;;) Pagina 40

41 Osservazioni sul ciclo for (2/3) La sintassi del for permette che le tre parti siano delle espressioni qualsiasi, purché inizializzazione ; e incremento ; siano delle istruzioni (in particolare, facciano side-effect). Nell uso del ciclo for è però buona norma: usare le tre parti del for in base al significato descritto, con riferimento ad una variabile di controllo; non modificare la variabile di controllo nel corpo del ciclo. Pagina 41

42 Osservazioni sul ciclo for (3/3) In generale, inizializzazione e/o incremento possono essere una sequenza di espressioni con side-effect separate da ",". Questo permette di inizializzare e/o incrementare più variabili contemporaneamente. int i, potdi2; for (i=0, potdi2=1; i < 10; i++, potdi2 *= 2) printf("2^%d = %d\n", i, potdi2); Pagina 42

43 Cicli for: esempi Il ciclo for è usato principalmente per realizzare cicli definiti. int i; for (i = 1; i <= 10; i++)... valori assunti da i: 1, 2, 3,..., 10 for (i = 10; i >= 1; i--)... valori assunti da i: 10, 9, 8,..., 2, 1 for (i = -4; i <= 4; i = i+2)... valori assunti da i: -4, -2, 0, 2, 4 for (i = 0; i >= -10; i = i-3)... valori assunti da i: 0, -3, -6, -9 Pagina 43

44 Esempio: codice caratteri int i; for (i = 33; i <= 62; i++) { char c = (char)i; printf("i = %d -> c = %c\n", i, c); Stampa dei caratteri ASCII compresi tra 33 e 62. Pagina 44

45 Esempio: esecuzione Pagina 45

46 Istruzione do-while Sintassi do istruzione while (condizione); condizione è un espressione che restituisce un valore vero ( 0) o falso (0) istruzione è una singola istruzione (detta anche il corpo del ciclo) Pagina 46

47 Semantica do istruzione while (condizione); è equivalente a istruzione ; while (condizione) istruzione Quindi: viene prima eseguita istruzione poi viene valutata condizione, se è vera, si torna ad eseguire istruzione, procedendo così fino a quando condizione diventa falsa a questo punto, si passa ad eseguire l istruzione che segue il ciclo do Pagina 47

48 Esempio int i = 0; do { printf("*"); i++; while (i < 100); Stampa di 100 asterischi Pagina 48

49 Osservazioni sul ciclo do-while Il corpo del ciclo viene eseguito almeno una volta. Non è, in generale, necessario inizializzare le variabili che compaiono nella condizione prima di iniziare l'esecuzione del ciclo. E sufficiente che tali variabili vengano inizializzate nel corpo del ciclo stesso. Pagina 49

50 Esempio somma gli interi letti da input fino a quando non viene immesso 0. #include <stdio.h> int main() { int i; int somma = 0; do { printf("inserisci intero (0 per terminare):\n"); scanf("%d", &i); somma = somma + i; while (i!= 0); printf("\ntotale = %d\n", somma); return 0; Pagina 50

51 Domanda Cosa stampa il frammento di codice seguente? int i; do { i = 0; printf("*"); i++; while (i < 100); Pagina 51

52 Buona norma La sintassi del ciclo do richiede che ci sia un ";" dopo while (condizione). Per aumentare la leggibilità del programma, in particolare per evitare di confondere la parte while(condizione); di un ciclo do, con un istruzione while con corpo vuoto, conviene in ogni caso racchiudere il corpo del ciclo do in un blocco, ed indentare il codice come segue: do { istruzione while (condizione); Pagina 52

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

54 Validazione dell input Spesso è necessario effettuare una validazione (convalida, dall inglese validation) di un dato di input immesso dall utente. Nel caso in cui l utente abbia immesso un dato non valido, potrebbe essere necessario ripetere la richiesta del dato stesso. La validazione può essere realizzata intuitivamente utilizzando un ciclo do-while. Pagina 54

55 Esempio Scrivere un frammento di programma che legga da input un intero, ripetendo la lettura fino a quando non venga immesso un intero positivo, e restituisca l intero positivo letto.... int i; do { printf("inserisci un intero positivo:\n"); scanf("%d", &i); while (i <= 0); // all uscita dal ciclo i e un intero positivo... Pagina 55

56 Esecuzione Pagina 56

57 Equivalenza tra ciclo while e ciclo do-while do { printf("inserisci un intero positivo:\n"); scanf("%d", &i); while (i <= 0); equivale a printf("inserisci un intero positivo:\n"); scanf("%d", &i); while (i <= 0) { printf("inserisci un intero positivo:\n"); scanf("%d", &i); Pagina 57

58 Insieme completo di istruzioni di controllo Due programmi si dicono equivalenti se, sottoposti agli stessi dati di ingresso, entrambi non terminano, oppure entrambi terminano producendo gli stessi risultati in uscita. Un insieme di istruzioni di controllo del flusso si dice completo se per ogni programma nel linguaggio ne esiste uno equivalente scritto solo con le strutture di controllo contenute nell'insieme. Pagina 58

59 Teorema di Böhm e Jacopini La sequenza, l'istruzione if-else e l'istruzione while formano un insieme di istruzioni completo. Nota: La sequenza è la normale elencazione di istruzioni perché vengano eseguite una di seguito all'altra nell'ordine in cui sono state scritte dal programmatore. Pagina 59

60 Esempio: calcolo del massimo comune divisore (MCD) Specifica Si vuole realizzare un programma che, dati due interi positivi x ed y, calcoli e restituisca il massimo comun divisore mcd(x, y). Il massimo comun divisore di due interi x ed y è il più grande intero che divide sia x che y senza resto. Esempio mcd(12, 8) = 4 mcd(12, 6) = 6 mcd(12, 7) = 1 Pagina 60

61 MCD: sfruttando direttamente la definizione Cerchiamo il massimo tra i divisori comuni di x ed y Osservazione: 1 mcd(x, y) min(x, y) Quindi, si provano i numeri compresi tra 1 e min(x, y). Conviene iniziare da min(x, y) e scendere verso 1. Appena si è trovato un divisore comune di x ed y, lo si restituisce. Pagina 61

62 MCD: primo raffinamento dell algoritmo massimocomundivisore di int x ed int y { int mcd; inizializza mcd al minimo tra x ed y while ((mcd > 1) && (non si è trovato un divisore comune)) if (mcd divide sia x che y) si è trovato un divisore comune else mcd--; pseudocodice Pagina 62

63 Osservazioni Il ciclo termina sempre perché ad ogni iterazione o si è trovato un divisore, o si decrementa mcd di 1 (al più si arriva ad 1). Per verificare se si è trovato il mcd si utilizza una variabile intera che rappresenta un valore booleano (usata nella condizione del ciclo). Per verificare se x (o y) divide mcd si usa l operatore "%". Pagina 63

64 MCD: problemi legati alla prima versione dell algoritmo Quante volte viene eseguito il ciclo nel precedente algoritmo? caso migliore: 1 volta, quando x divide y o viceversa senza resto Es. mcd(500, 1000) caso peggiore: min(x,y) volte, quando mcd(x,y) = 1 Es. mcd(500, 1001) Quindi, il precedente algoritmo si comporta male se x e y sono grandi e mcd(x, y) è piccolo. Pagina 64

65 MCD usando il metodo di Euclide Il metodo di Euclide permette di ridurre velocemente il calcolo a numeri più piccoli, sfruttando la seguente proprietà: Esempio mcd(12, 8) = mcd(12 8, 8) = mcd(4, 8-4) = 4 Pagina 65

66 Dimostrazione del metodo di Euclide La validità di questo metodo si dimostra facilmente, mostrando che i divisori comuni di x e y sono anche divisori di x y (nel caso in cui x > y). Pagina 66

67 Codifica del metodo di Euclide per il calcolo del MCD #include <stdio.h> int main () { int x = 210; int y = 63; while (x!= y) { if (x > y) x = x - y; else // significa che y > x y = y - x; printf("mcd = %d\n", x); return 0; Pagina 67

68 MCD: ammissibilità dei valori degli argomenti Se x = y = 0? Il risultato è 0. Se x = 0 e y > 0 (o viceversa)? Il risultato dovrebbe essere y, ma l'algoritmo entra in un ciclo infinito. Se x < 0 e y è qualunque (o viceversa)? L'algoritmo entra in un ciclo infinito. Pagina 68

69 Codifica rivista del metodo di Euclide per il calcolo del MCD #include <stdio.h> int main () { int x = 210; int y = 63; if ((x > 0) && (y > 0)) { while (x!= y) if (x > y) x = x - y; else // significa che y > x y = y - x; printf("mcd = %d\n", x); else printf("dati errati\n"); return 0; Pagina 69

70 MCD usando il metodo di Euclide con i resti (1/2) Cosa succede nel precedente algoritmo se x è molto maggiore di y (o viceversa)? Pagina 70

71 MCD usando il metodo di Euclide con i resti (2/2) Per comprimere questa lunga sequenza di sottrazioni è sufficiente osservare che quello che in fondo si calcola è il resto della divisione intera. Metodo di Euclide Pagina 71

72 Codifica del metodo di Euclide con I resti per il calcolo del MCD int main () { int x =...; int y =...; while ((x!= 0) && (y!= 0)) { if (x > y) x = x % y; else y = y % x; printf("mcd = %d\n", (x!= 0)? x : y); return 0; Pagina 72

73 Cicli annidati Il corpo di un ciclo può contenere a sua volta un ciclo, chiamato ciclo annidato. E possibile annidare un qualunque numero di cicli. int main () { int const NMAX = 10; int riga, colonna; for(riga = 1; riga <= NMAX; riga++) { return 0; Stampa della tavola pitagorica for(colonna = 1; colonna <= NMAX; colonna++) if(riga * colonna < 10) printf(" %d ", riga * colonna); else printf("%d ", riga * colonna); printf("\n"); Pagina 73

74 Output prodotto Pagina 74

75 Esempio di doppio ciclo: stampa di una piramide di asterischi il numero di iterazioni di un ciclo più interno può dipendere dall iterazione del ciclo più esterno Esempio stampa di una piramide di asterischi Per la stampa della generica riga r: stampa (altezza r) blank e (2 r 1) asterischi. Pagina 75

76 Codice piramide asterischi int altezza, riga, i; printf("altezza = "); scanf("%d", &altezza); printf("\n"); for (riga = 1; riga <= altezza; riga++) { // 1 iterazione per ogni riga della piramide for (i = 1; i <= altezza - riga; i++) printf(" "); // stampa gli spazi bianchi iniziali for (i = 1; i <= riga * 2-1; i++) printf("*"); // stampa la sequenza di asterischi printf("\n"); // va a capo: la riga e finita Pagina 76

77 Esecuzione piramide asterischi Pagina 77

78 Esempio: potenza con un doppio ciclo int main() { int base = 2; int esponente= 3; int risultato = 1; while (esponente > 0) { esponente--; // risultato = risultato * base int moltiplicando = risultato; int moltiplicatore = base; int prodotto = 0; while (moltiplicatore > 0) { moltiplicatore--; prodotto = prodotto + moltiplicando; risultato = prodotto; printf("%d\n", risultato); Pagina 78

79 Istruzioni di controllo del flusso Le istruzioni di controllo del flusso determinano la successiva istruzione da eseguire. Le istruzioni if-else, if, switch, while, for, do-while sono istruzioni di controllo del flusso di esecuzione. Esse non permettono, però, di stabilire in modo arbitrario la prossima istruzione da eseguire, ma forniscono una strutturazione del programma che determina il flusso di esecuzione. Pagina 79

80 Istruzioni di salto break (salto all'istruzione successiva al ciclo o allo switch corrente) continue (salto alla condizione del ciclo) goto (salto all'istruzione etichettata) Anche l'istruzione return può essere usata per modificare il flusso di esecuzione, nelle funzioni definite. Pagina 80

81 Istruzione break per uscire da un ciclo (1/2) break permette di uscire prematuramente da un istruzione switch, while, for o do-while. double a; int i; for (i = 0; i < 10; i++) { printf("immetti un reale non negativo: "); scanf("%lf", &a); if (a >= 0) printf("%f\n", sqrt(a)); else { printf("errore\n"); break; Pagina 81

82 Istruzione break per uscire da un ciclo (2/2) Nota: nel caso di cicli annidati o di switch annidati dentro un ciclo, l esecuzione di un break permette di uscire da un solo livello. Pagina 82

83 Istruzione break in doppio ciclo int main() { int a; int i, j; printf("immetti un intero non negativo: "); scanf("%d", &a); for (i = 0; i < 10; i++) { printf("*"); for (j = 0; j < 10; j++) { if(a == 2) break; printf("*"); if (a >= 0) printf("%d\n", a); else { printf("errore\n"); break; Pagina 83

84 Esecuzione Pagina 84

85 Rimozione del break (1/3) L esecuzione di un istruzione break altera il flusso di controllo. Quando viene usata nei cicli: si perde la strutturazione del programma si guadagna in efficienza rispetto ad implementare lo stesso comportamento senza fare uso del break. In generale, è sempre possibile eliminare un istruzione break. Pagina 85

86 Rimozione del break (2/3) while (condizione) { istruzioni-1 if (condizione-break) break; istruzioni-2 equivale a int finito = 0; //condizione finito = false while (condizione &&!finito) { istruzioni-1 if (condizione-break) finito = 1; //condizione finito = true else { istruzioni-2 Pagina 86

87 Rimozione del break (3/3) double a; int errore = 0; int i; for (i = 0; (i < 10) &&!errore; i++) { printf("immetti un reale non negativo: "); scanf("%lf", &a); if (a > 0) printf("%f\n", sqrt(a)); else { printf("errore\n"); errore = 1; Pagina 87

88 Istruzione continue L istruzione continue si applica solo ai cicli e comporta il passaggio alla successiva iterazione del ciclo, saltando le eventuali istruzioni che seguono nel corpo del ciclo. int i; for (i = 0; i < n; i++) { if (i % 2 == 0) continue; printf("%d\n", i); Pagina 88

89 Uso errato di continue Nota: Un possibile uso di continue è all interno di un ciclo di lettura, nel quale vogliamo effettuare un elaborazione sui dati letti solo se è verificata una determinata condizione. Bisogna però assicurarsi che ad ogni iterazione del ciclo venga in ogni caso letto il prossimo valore. Altrimenti il ciclo non termina. Esempio: leggi il prossimo dato ; while (condizione) { if (condizione-sul-dato-corrente ) continue; // ERRORE! viene saltata la lettura del dato elabora il dato; leggi il prossimo dato ; Pagina 89

90 Esempio su continue Cosa stampa questo programma? #include <stdio.h> int main() { int i; for (i = 0; i < 5; i++) { if(i == 3) { continue; printf("i = %d\n", i); return 0; Pagina 90

91 Istruzione di salto goto L istruzione di salto deriva dal linguaggio macchina dove ha un ruolo fondamentale per consentire la realizzazione dei cicli. Il teorema di Böhm e Jacopini ha mostrato che essa non è necessaria ai fini della completezza del linguaggio. L istruzione di salto comporta una interruzione del flusso dell esecuzione del programma, che prosegue con l istruzione specificata nel goto. Per consentire il salto, le istruzioni possono avere delle etichette: etichetta : istruzione-ciclo; Le etichette devono essere degli identificatori. Pagina 91

92 Sintassi e semantica di goto Sintassi goto etichetta etichetta è un identificatore che deve individuare una istruzione del programma. Semantica L'esecuzione del programma prosegue con la istruzione specificata dall'etichetta Pagina 92

93 Esempio sul goto int i = 0; int x; while (i < 100) { printf("inserisci dato: "); scanf("%d", &x); if (x < 0) goto errore; i++; errore: printf("errore nei dati, programma interrotto\n"); Pagina 93

94 Esecuzione Pagina 94

95 Nota sul goto L uso di etichette e di istruzioni goto è considerato come cattiva pratica di programmazione e va riservato a casi particolari. Pagina 95

96 Esempio su break e continue int x, i; for(;;) { printf("inserisci un intero non negativo\n"); i = scanf("%d", &x); printf("valore di ritorno scanf: %d\n", i); if(x < 0) { printf("ho detto non negativo\n"); continue; else if(i!= 1){ if(i == 0) printf("formato non corretto. addio\n"); else if(i == EOF) printf("ciao ciao\n"); break; printf("ho letto %d\n", x); Pagina 96

97 Valore di ritorno scanf int scanf ( const char * format,... ); Read formatted data from stdin Reads data from stdin and stores them according to the parameter format into the locations pointed by the additional arguments. The additional arguments should point to already allocated objects of the type specified by their corresponding format tag within the format string. Return Value On success, the function returns the number of items successfully read. This count can match the expected number of readings or fewer, even zero, if a matching failure happens. In the case of an input failure before any data could be successfully read, EOF is returned. Pagina 97

98 Esercizio su break e continue Si chiede di realizzare un programma in grado di leggere da tastiera dei valori int ed elaborarli in accordo con le seguenti condizioni: Se il valore che viene letto è negativo, si vuole stampare un messaggio di errore e terminare il programma. Se il valore letto è maggiore di 100, si vuole ignorarlo e continuare con il successivo valore in input. Se il valore è 0, si vuole terminare il ciclo con un messaggio di avvenuta terminazione corretta. Altrimenti si vuole stampare il doppio dell intero letto Pagina 98

99 Soluzione /* Viene letto un valore intero ed elaborato purché sia maggiore di 0 e minore di 100 */ while (scanf("%d", &value) == 1 && value!=0) { if (value < 0) { printf("valore non ammesso\n"); break; /* Abbandona il loop */ if (value > 100) { printf("valore non ammesso\n"); continue; // Torna nuovamente all'inizio del loop /*Elabora il valore letto*/ /*che e' sicuramente tra 0 e 100 */ printf("%d\n", 2 * value); printf("programma terminato con successo"); Pagina 99

Controllo del flusso

Controllo del flusso 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

Dettagli

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi 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

Dettagli

For e do. Parte 4. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

For e do. Parte 4. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR 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

Dettagli

Controllo del flusso di esecuzione 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 Controllo del flusso di esecuzione 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

Dettagli

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

Istruzioni di Ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale

Dettagli

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

Istruzioni di ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto

Dettagli

For e do. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

For e do. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto

Dettagli

For e do. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

For e do. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

Controllo del flusso di esecuzione Corso di Laboratorio di Informatica Ingegneria Clinica BCLR

Controllo del flusso di esecuzione Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Controllo del flusso di esecuzione Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale

Dettagli

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

Dott. R. Gori, Dott. A. Rama INFORMATICA 242AA a.a. 2011/12 pag. 1. Le istruzioni iterative permettono di ripetere determinate azioni più volte:

Dott. R. Gori, Dott. A. Rama INFORMATICA 242AA a.a. 2011/12 pag. 1. Le istruzioni iterative permettono di ripetere determinate azioni più volte: Leggere 5 interi, calcolarne la somma e stamparli. Variante non accettabile: 5 variabili, 5 istruzioni di lettura, 5... int i1, i2, i3, i4, i5; scanf("%d", &i1):... scanf("%d", &i5); printf("%d", i1 +

Dettagli

Istruzioni iterative. Istruzioni iterative

Istruzioni iterative. Istruzioni iterative Istruzioni iterative Esempio: Leggere 5 interi, calcolarne la somma e stamparli. Variante non accettabile: 5 variabili, 5 istruzioni di lettura, 5... int i1, i2, i3, i4, i5; scanf("%d", &i1):... scanf("%d",

Dettagli

Iterazione indeterminata

Iterazione indeterminata Iterazione indeterminata In alcuni casi il numero di iterazioni da effettuare non è noto prima di iniziare il ciclo, perché dipende dal verificarsi di una condizione. Esempio: Leggere una sequenza di interi

Dettagli

Unità 4 Istruzioni di ciclo

Unità 4 Istruzioni di ciclo Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 4 Istruzioni di ciclo D. Bloisi, S. Peluso, A. Pennisi, S. Salza Sommario Unità

Dettagli

prof. P. Mancarella Dip.to Informatica INFORMATICA 1 a.a. 07/08 pag. 170

prof. P. Mancarella Dip.to Informatica INFORMATICA 1 a.a. 07/08 pag. 170 Istruzioni condizionali Esempio: Dati tre valori che rappresentano le lunghezze dei lati di un triangolo, stabilire se si tratti di un triangolo equilatero, isoscele o scaleno. Algoritmo: determina tipo

Dettagli

Istruzioni iterative (o cicliche)

Istruzioni iterative (o cicliche) Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Istruzioni iterative (o cicliche) Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria

Dettagli

del Linguaggio C Istruzioni di iterazione

del Linguaggio C Istruzioni di iterazione Istruzioni i Iterative ti del Linguaggio C Istruzioni di iterazione Le istruzioni di iterazione forniscono strutture di controllo che esprimono la necessità di ripetere una certa istruzione durante il

Dettagli

Istruzioni di Controllo in C. Emilio Di Giacomo

Istruzioni di Controllo in C. Emilio Di Giacomo Istruzioni di Controllo in C Emilio Di Giacomo Limite delle istruzioni viste L insieme delle istruzioni che abbiamo visto fino ad ora consiste per lo più di: dichiarazioni e assegnazioni di variabili espressioni

Dettagli

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

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 Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)

Dettagli

Istruzioni di controllo

Istruzioni di controllo Istruzioni di controllo Le istruzioni in C Assegnazione Sequenza I/O Test Cicli Controllo = che cosa è la prossima cosa da fare La prossima cosa da fare è quella che segue La prossima cosa da fare dipende

Dettagli

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

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 Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)

Dettagli

Istruzioni di Controllo

Istruzioni di Controllo Istruzioni di Controllo Programmazione strutturata Ricordiamo i concetti chiave: concatenazione o composizione BLOCCO istruzione condizionale SELEZIONE ramifica il flusso di controllo in base al valore

Dettagli

INFORMATICA. Strutture iterative

INFORMATICA. Strutture iterative INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale

Dettagli

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

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative

Dettagli

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

I cicli. Iterazioni Calcolo della media Istruzioni break e continue I cicli Iterazioni Calcolo della media Istruzioni break e continue Ciclo while p Vero A while() ; Falso Esegue una istruzione mentre una condizione è verificata Programmazione

Dettagli

Iterazione determinata e indeterminata

Iterazione determinata e indeterminata Iterazione determinata e indeterminata Le istruzioni iterative permettono di ripetere determinate azioni più volte: un numero di volte fissato = iterazione determinata Esempio: fai un giro del parco di

Dettagli

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Programmazione C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Informatica 2 modulo C Massimo Callisto De Donato

Informatica 2 modulo C Massimo Callisto De Donato Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Informatica 2 modulo C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Istruzioni Condizionali 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

Dettagli

Strutture di Controllo Iterative: Istruzione FOR

Strutture di Controllo Iterative: Istruzione FOR Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative! Anche dette cicli! Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo)! Ad ogni iterazione del

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Istruzioni Condizionali 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

Dettagli

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while) Laboratorio Due 1) Switch 2) Costrutti Iterazione (For, While, do while) GLI ARGOMENTI DI OGGI Istruzione switch I costrutti di iterazione (For, while, do while) Le funzioni (e ricorsione) Terza Esercitazione

Dettagli

Istruzioni. Istruzioni semplici Istruzioni di controllo. Fondamenti di Informatica e laboratorio Istruzioni e Controllo del flusso

Istruzioni. Istruzioni semplici Istruzioni di controllo. Fondamenti di Informatica e laboratorio Istruzioni e Controllo del flusso Istruzioni Istruzioni Le istruzioni esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del programma o del mondo circostante Le strutture di controllo permettono

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 3 Analisi dettagliata di un programma /* commento */ Possono estendersi su più linee apparire in qualsiasi parte del programma. Alternativamente

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 2-Iterazione 1 Prerequisiti Salto condizionato Salto incondizionato Espressione logica 2 1 Introduzione In alcuni casi si presenta la necessità di eseguire un ciclo, ossia

Dettagli

Analisi strutturata 1

Analisi strutturata 1 Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

Dettagli

Istruzioni decisionali

Istruzioni decisionali Istruzioni decionali 1. if 2. if-else 3. switch 115 switch Struttura di scelta plurima che controlla se una espresone assume un valore all interno di un certo ineme di costanti e comporta di conseguenza

Dettagli

Iterazione A. Ferrari

Iterazione A. Ferrari Iterazione A. Ferrari Iterazioni (cicli) L iterazione è una struttura che consente di ripetere più volte l esecuzione di un insieme di istruzioni. Due tipi di iterazione: iterazioni enumerative: consentono

Dettagli

20/10/2014 M. Nappi/FIL 1

20/10/2014 M. Nappi/FIL 1 FIL Lezione 4: Istruzioni Iterative. Michele Nappi mnappi@unisa.it biplab.unisa.it 20/10/2014 M. Nappi/FIL 1 La struttura di Iterazione while Struttura tt di iterazione i Il programmatore specifica un

Dettagli

Costrutti di controllo

Costrutti di controllo Costrutti di controllo Scegliere: istruzione if-else Sintassi: if (exp) istr1 else istr2 exp e un'espressione con un valore booleano istr1, istr2 sono un unica istruzione o un blocco {... Semantica: 1.

Dettagli

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

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 3: Istruzioni ed operatori booleani. Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Soluzioni agli esercizi Istruzioni (statement) semplici e di controllo

Dettagli

Linguaggio C Strutture di controllo

Linguaggio C Strutture di controllo FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Strutture di controllo 2001 Pier Luca Montessoro - Davide

Dettagli

Istruzioni. Una istruzione semplice è qualsiasi espressione seguita da un punto e virgola. Esempio x = 0; y = 1;/* due istruzioni */

Istruzioni. Una istruzione semplice è qualsiasi espressione seguita da un punto e virgola. Esempio x = 0; y = 1;/* due istruzioni */ Istruzioni Le istruzioni esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del programma o del mondo circostante Le strutture di controllo permettono di aggregare

Dettagli

Iterazione determinata e indeterminata

Iterazione determinata e indeterminata Iterazione determinata e indeterminata Le istruzioni iterative permettono di ripetere determinate azioni più volte: un numero di volte fissato = iterazione determinata, Esempio: fai un giro del parco di

Dettagli

Esempi comparati while, do...while

Esempi comparati while, do...while Esempi comparati while, do...while Algoritmo. - inizializza Somma a zero - finchè la risposta è "continuazione" - visualizza messaggio - acquisisci un numero I - aggiungi I a Somma - domanda se continuare

Dettagli

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

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra

Dettagli

ISTRUZIONI ISTRUZIONI SEMPLICI

ISTRUZIONI ISTRUZIONI SEMPLICI ISTRUZIONI istruzioni azioni modifica permanente dello stato interno strutture di controllo ::= ::= ::=

Dettagli

Lab 04 Programmazione Strutturata"

Lab 04 Programmazione Strutturata Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 04 Programmazione Strutturata" Lab04 1 Valutazione in cortocircuito (1)" In C, le espressioni booleane sono valutate

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

CORSO DI PROGRAMMAZIONE

CORSO DI PROGRAMMAZIONE ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE INTRODUZIONE ALLE ISTRUZIONI ITERATIVE DISPENSA 03.01 03-01_Iterazioni_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative

Dettagli

Input / Output, Espressioni Condizionali e Cicli

Input / Output, Espressioni Condizionali e Cicli LIA - DEIS - Facoltà di Ingegneria - Università di Bologna Laboratorio di informatica LA Corso di laurea in Ingegneria Informatica - Anno Accademico 2007-2008 Input / Output, Espressioni Condizionali e

Dettagli

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

Linguaggio C: Variabili e Controllo

Linguaggio C: Variabili e Controllo Linguaggio C: Variabili e Controllo Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 Obiettivi di questa lezione 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Valutazione in cortocircuito In C, le espressioni booleane sono

Dettagli

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

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

Strutture di Controllo Iterative: Istruzione FOR

Strutture di Controllo Iterative: Istruzione FOR Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative n Anche dette cicli n Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo) n Ad ogni iterazione del

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 7 Iterazioni nei programmi:definite e indefinite Tre costrutti: While Do...While For Esempi Istruzioni di iterazione Le istruzioni iterative permettono di ripetere

Dettagli

Laboratorio di informatica Ingegneria meccanica

Laboratorio di informatica Ingegneria meccanica C: costanti introdotte con #define Laboratorio di informatica Ingegneria meccanica Lezione 4 22 ottobre 2007 Forma: #define nome valore Effetto: ogni occorrenza successiva di nome sarà rimpiazzata con

Dettagli

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1 Fondamenti di Informatica T1 Lab 03 Istruzioni Lab03 1 Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Lab03 2 #include main()

Dettagli

Il C nel C++ Struttura di un linguaggio. regole per la definizione i simboli. regole per la composizione dei simboli

Il C nel C++ Struttura di un linguaggio. regole per la definizione i simboli. regole per la composizione dei simboli Il C nel C++ Struttura di un linguaggio Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

Struttura di un linguaggio

Struttura di un linguaggio Il C nel C++ Struttura di un linguaggio Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

Costrutti di controllo

Costrutti di controllo Costrutti di controllo Scegliere: istruzione if-else Sintassi: if (exp) istr1 else istr2 exp e un'espressione con un valore booleano istr1, istr2 sono un unica istruzione o un blocco {... Semantica: 1.

Dettagli

Fondamenti di Informatica A. A. 2018/19

Fondamenti di Informatica A. A. 2018/19 Fondamenti di Informatica Prof. Marco Lombardi A. A. 2018/19 AlgoBuild: Strutture Iterative e Selettive OUTLINE Blocco condizionale (Struttura selettiva IF - IF/ELSE) Esempi Cicli a condizione iniziale

Dettagli

Costrutti di Programmazione Strutturata. Informatica 1 / 22

Costrutti di Programmazione Strutturata. Informatica 1 / 22 Costrutti di Programmazione Strutturata Informatica 1 / 22 Costrutti di Base Ricordi? Un algoritmo è detto strutturato se usa solo Sequenze di istruzioni Selezioni (se predicato allora fai istruzioni altrimenti

Dettagli

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE ORNITI DAL LINGUAGGIO C Premessa: STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO Uno ement semplice termina con ; come, ad esempio: ressione;

Dettagli

Le strutture di controllo in C++

Le strutture di controllo in C++ Le strutture di controllo in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi di Napoli

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Istruzioni Condizionali Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio

Dettagli

Esercizio 1" input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2

Esercizio 1 input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2 Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2011/2012 Lab 03 Istruzioni" Lab03 1 Esercizio

Dettagli

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

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. #include Esercizio 1 - Soluzione int main() int num1, num2, num3, somma; float

Dettagli

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe

Dettagli

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

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Dettagli

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico: Struttura di un linguaggio Il C nel C++ Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

Linguaggio C: strutture di controllo

Linguaggio C: strutture di controllo Linguaggio C: strutture di controllo Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C: strutture di controllo

Dettagli

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi

Dettagli

Strutture di Controllo

Strutture di Controllo Strutture di Controllo Istruzioni condizionali e cicli http://www.dia.uniroma3.it/~roselli/ roselli@dia.uniroma3.it Credits Materiale a cura del Prof. Franco Milicchio Introduzione Fino ad ora, il nostro

Dettagli

PROGRAMMAZIONE STRUTTURATA

PROGRAMMAZIONE STRUTTURATA PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:

Dettagli

Istruzioni Ripetitive

Istruzioni Ripetitive Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 11 Istruzioni Ripetitive Carla Limongelli Novembre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni ripetitive 1 Contenuti

Dettagli

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning Obiettivi di questa esercitazione Fondamenti di Informatica T-1 Parte 2 Laboratorio 01 1. Input e output in linguaggio i C 2. Espressioni 3. Programmazione strutturata 1 (if, switch, do while) 1 2 Warning

Dettagli

PROGRAMMAZIONE: Le strutture di controllo

PROGRAMMAZIONE: Le strutture di controllo PROGRAMMAZIONE: Le strutture di controllo Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l

Dettagli

Ing. Lorenzo Vismara

Ing. Lorenzo Vismara Ing. Lorenzo Vismara ! "# #!$#%&# '(!)&!*)&#*$# +!, +$-.(( #!((%&#, #!& %&) /$#01&&#2! 0#( 3452 $ 6#( 1 2 &## #!7 #89): #;##( 1? )#&)< $9): #@82 #)AA)#&#&$( #7)&#7& @B && ##@A&#C 7 $C#&7 @B A&#)@#7&#

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1 Fondamenti di Informatica T1 Lab 03 Istruzioni Lab03 1 Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Lab03 2 scanf: STRINGA DI FORMATO

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 10 Istruzioni Condizionali Carla Limongelli Novembre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni condizionali 1 Contenuti

Dettagli

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3 Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2007/08 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

Dettagli

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max Espressioni booleane Espressioni booleane il linguaggio deve consentire di descrivere espressioni booleane cioé espressioni che ritornino come risultato valori di verit : vero o falso (guardie di condizionali

Dettagli

IL COSTRUTTO ITERAZIONE

IL COSTRUTTO ITERAZIONE IL COSTRUTTO ITERAZIONE Il costrutto iterazione Consente di ripetere una operazione elementare o un blocco di operazioni. Tipologie di iterazione Iterazione definita Iterazione condizionata Tipologie di

Dettagli

Istruzioni Ripetitive

Istruzioni Ripetitive Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 11 Istruzioni Ripetitive Carla Limongelli Novembre 2009 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni ripetitive 1 Contenuti

Dettagli

Diagrammi di flusso: forme

Diagrammi di flusso: forme Il linguaggio C in breve Diagrammi di flusso: forme Inizio/ Fine Istruzione Input/ Output Cond C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 18/19 pag. 57 Il linguaggio C in breve if cond

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 7 Lezione 7 1 Algoritmi e loro proprietà Efficienza rispetto al tempo Efficienza rispetto allo spazio Efficienza degli algoritmi Una volta determinato un algoritmo

Dettagli

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI IF Ogni linguaggio di programmazione presenta almeno una struttura di controllo decisionale. La sintassi del linguaggio C è la seguente. if ()

Dettagli

Concetti chiave. Istruzioni Iterative. Strutture di controllo iterative while do-while for Cicli annidati

Concetti chiave. Istruzioni Iterative. Strutture di controllo iterative while do-while for Cicli annidati Concetti chiave Istruzioni Iterative Strutture di controllo iterative while do-while for Cicli annidati Altre Espressioni Operatori Aritmetici +, -, *, /, si applicano a qualunque tipo Operatore Aritmetico

Dettagli