Unità 4 Istruzioni di ciclo

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "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, A. Pennisi, 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 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 Un altro costrutto fondamentale, presente in tutti i linguaggi di programmazione, è costituito dalla ripetizione di singole istruzioni o di blocchi di istruzioni Si parla allora di cicli, e il blocco di istruzioni che viene ripetuto è detto corpo del ciclo L'esecuzione di un ciclo conta nella ripetizione dell'esecuzione del corpo del ciclo La ripetizione è governata da una condizione, che viene valutata ad ogni iterazione e che permette di stabilire quando terminarla Pagina 4

5 Cicli definiti ed indefiniti Solo in alcuni casi il numero di iterazioni (ripetizioni) è noto a priori, cioè all'inizio del ciclo In genere la terminazione dipende da una condizione di uscita, che a sua volta dipende dai valori calcolati durante l'iterazione del ciclo In altri casi può dipende da eventi esterni, ad esempio un input fornita dall'utente Distinguiamo due tipi di ciclo: - cicli definiti nei quali il numero di iterazioni è noto prima di iniziare l'esecuzione del ciclo - cicli indefiniti nei quali l'uscita dal ciclo dipende da valori calcolati (o acquisiti) nel corpo del ciclo Pagina 5

6 Esempi CICLO DEFINITO - Ripeti per 10 volte un determinato blocco di istruzioni CICLO INDEFINITO - Continua a dividere n per 2 finché il quoziente q diventa < 2 - Continua a leggere da tastiera un numero intero finché non viene fornito un valore > 0 Pagina 6

7 Ciclo while L istruzione while consente la ripetizione di una istruzione, controllandola con una condizione SINTASSI while(condizione) istruzione condizione è un espressione istruzione (detta anche il corpo del ciclo) è una singola istruzione o un blocco di istruzioni Pagina 7

8 Semantica del ciclo while 1. La condizione è valutata prima di ogni iterazione 2. Se la condizione è vera, allora l istruzione è eseguita 3. Successivamente si ritorna sulla valutazione della condizione, procedendo così fino a quando la condizione risulta falsa 4. Si passa poi all'esecuzione dell istruzione successiva al ciclo while N.B. Il ciclo può anche non essere eseguito nemmeno una volta se la condizione risulta già falsa al primo giro Pagina 8

9 Esempio Stampa di 100 asterischi (ciclo definito) int i = 0; while (i < 100) { printf("*"); i++; N.B. Per garantire l'uscita dal ciclo, la condizione deve sempre dipendere da valori che vengono modificati durante l'esecuzione del corpo del ciclo (nell'esempio i) Pagina 9

10 Diagramma di flusso while(condizione){ istruzione-1 istruzione-n VERO condizione istruzione-n+1 istruzione-1... istruzione-n FALSO istruzione-n+1 Pagina 10

11 Esempio: ciclo while di lettura Legge e stampa su video una sequenza di caratteri #include <stdio.h> int main() { int c; c = getchar(); while (c!= EOF) { putchar(c); c = getchar(); return 0; CICLO INDEFINITO Le iterazioni terminano solo quando viene letto il carattere EOF (End Of File) Su Windows EOF è CTRL+Z Su Mac EOF è CTRL+Z Su Unix EOF è CTRL+D 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 la fine del file viene letto il carattere EOF (End Of File) Viene allora 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 c stampato viene restituito Se si verifica un errore, viene restituito EOF Pagina 13

14 Esempio: ciclo while di lettura (bis) Versione alternativa #include <stdio.h> int main() { int c; while ((c = getchar())!= EOF) { putchar(c); return 0; N.B. Si noti il side-effect (chiamata della funzione nella condizione. Più compatto, ma meno chiaro. Pagina 14

15 Esempio di esecuzione Pagina 15

16 Esempio Per ciascuna lettura stampa ildoppio del valore letto 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; Pagina 16

17 Esempio: divisione con sottrazioni #include <stdio.h> int main() { int dividendo, divisore, quoziente, resto; printf("dividendo: "); scanf("%d", &dividendo); printf("divisore: "); scanf("%d", &divisore); quoziente = 0; resto = dividendo; while (resto >= divisore) { resto -= divisore; quoziente++; printf("quoziente = %d\n", quoziente); printf("resto= %d\n", resto); return 0; Pagina 17

18 Potenza con moltiplicazioni #include <stdio.h> int main() { int base, esp, potenza, o_esp; printf("base: "); scanf("%d", &base); printf("esp: "); scanf("%d", &esp); o_esp = esp; potenza = 1; while (esp > 0) { potenza *= base; esp--; printf("%d elevato a %d = %d\n", base, o_esp, potenza); return 0; Pagina 18

19 Prodotto con somme #include <stdio.h> int main() { int m_ando, m_tore, prodotto, o_tore; printf("moltiplicando: "); scanf("%d", &m_ando); printf("moltiplicatore: "); scanf("%d", &m_tore); o_tore = m_tore; prodotto = 0; while (m_tore > 0) { prodotto += m_ando; m_tore--; printf("%d * %d = %d\n", m_ando, o_tore, prodotto); return 0; Pagina 19

20 Elementi del ciclo while Assegnazione del valore delle variabili utilizzate nel ciclo prima dell inizio del del ciclo Espressione valutata prima di ogni iterazione, il cui valore di verità determina l esecuzione del corpo del ciclo o la fine del ciclo inizialiazzazione while (condizione) { operazione passo successivo Calcolo dei risultati parziali nel corpo del ciclo ad ogni iterazione Incremento/decremento della variabile che controlla le ripetizioni del ciclo (nel corpo del ciclo) Pagina 20

21 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 m_tore--; garantisce che prima o poi la condizione (m_tore > 0) diventerà falsa Pagina 21

22 Errori comuni nei 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); i--; Il valore di i all'inizio del ciclo può essere qualsiasi cosa Pagina 22

23 Errori comuni nei cicli while 2/3 Mancato aggiornamento delle variabili che compaiono nella condizione del ciclo int i, num; printf("digita un intero:"); i = scanf("%d", &num); while (i!= EOF) { printf("%d ^ 2 = %d\n", num, num * num); scanf("%d", num); Il valore di i non cambia e non si esce mai dal ciclo Pagina 23

24 Errori comuni nei cicli while 3/3 Numero di iterazioni errato (in genere di una unità) // Stampa 10 asterischi int i = 0; while (i <= 10) { printf("*"); i++; La condizione corretta sarebbe dovuta essere i < 10 ; così si stampano 11 asterischi Pagina 24

25 Schemi tipici di ciclo Molti cicli rientrano in uno di questi tre schemi contatore: conta il numero di valori in un insieme accumulatore: accumula i valori di un insieme valore caratteristico : determina un valore caratteristico tra i valori in un insieme (ad esempio, il massimo, quando sui valori dell'insieme e definito un ordinamento) Pagina 25

26 Contatore: numero di interi in input int n, i; int conta = 0; printf("digita un intero: "); i = scanf("%d", &n); while (i!= EOF) { conta++; printf("ho letto %d\n", n); printf("digita un intero: "); i = scanf("%d", &n); printf("\nho letto in tutto %d interi\n", conta); Pagina 26

27 Contatore: numero di interi positivi int n, i; int conta = 0; printf("digita un intero: "); i = scanf("%d", &n); while (i!= EOF) { if (d > 0) conta++; printf("ho letto %d\n", n); printf("digita un intero: "); i = scanf("%d", &n); printf("\nho letto in tutto %d interi positivi\n", conta); Pagina 27

28 Accumulatore: somma di interi int n, i; int somma = 0; printf("digita un intero: "); i = scanf("%d", &n); while (i!= EOF) { somma += n; printf("ho letto %d\n", n); printf("digita un intero: "); i = scanf("%d", &n); printf("\nsomma totale = %d\n", somma); Pagina 28

29 Accumulatore: prodotto di interi int n, i; int prodotto = 1; printf("digita un intero: "); i = scanf("%d", &n); while (i!= EOF) { prodotto *= n; printf("ho letto %d\n", n); printf("digita un intero: "); i = scanf("%d", &n); printf("\nprodotto totale = %d\n", prodotto); Pagina 29

30 Massimo di un insieme delimitato // Massimo di un insieme di interi positivi int max = 0, n, i; // massimo corrente printf("digita un intero: "); i = scanf("%d", &n); while (i!= EOF) { if (n > max) max = n; printf("digita un intero: "); i = scanf("%d", &n); if (max = 0) printf("\ninsieme di valori vuoto\n"); else printf("\nmassimo valore letto =%d\n", max); Pagina 30

31 Massimo di un insieme non vuoto // Massimo di un insieme non vuoto di interi int max, n, i; // massimo corrente printf("digita un intero: "); i = scanf("%d", &n); max = n; while (i!= EOF) { if (n > max) max = n; printf("digita un intero: "); i = scanf("%d", &n); printf("\nmassimo valore letto =%d\n", max); Pagina 31

32 Massimo nel caso generale // Massimo di un insieme anche vuoto di interi + e - int max = 0, n, i; // massimo corrente printf("digita un intero: "); i = scanf("%d", &n); if (i == EOF) printf(\ninsieme di valori vuoto\n"); else { max = n; while (i!= EOF) { if (n > max) max = n; printf("digita un intero: "); i = scanf("%d", &n); printf("\nmassimo =%d\n", max); Pagina 32

33 Istruzioni di ciclo Il C offre tre forme diverse di istruzioni di ciclo istruzione while istruzione for istruzione do-while La struttura while è la più generale, e consente di esprimere qualsiasi ciclo esprimibile con for e do Ma in alcune situazioni è più conveniente codificare un algoritmo utilizzando gli altri tipi di ciclo, soprattutto per motivi di chiarezza e leggibilità Pagina 33

34 Ciclo while controllato da un contatore 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 34

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

36 Istruzione for: sintassi for (inizializzazione; condizione;incremento) istruzione ; inizializzazione è un espressione con side-effect che inizializza una variabile di controllo (tipicamente un assegnazione) condizione è un espressione condizionale incremento tipicamente consiste nell incremento della variabile di controllo istruzione è una singola istruzione o un blocco di isytruzioni (detta anche corpo del for) Pagina 36

37 Istruzione for: semantica for (inizializzazione; condizione; incremento) istruzione ; è equivalente a: inizializzazione ; while (condizione) { istruzione ; incremento ; Pagina 37

38 Diagramma di flusso for(inizializzazione;condizione;incremento){ istruzione-1;... instruzione-n; istruzione-n+1 VERO inizializzazione condizione istruzione-1... istruzione-n incremento FALSO istruzione-n+1 Pagina 38

39 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 cioè è sempre vera ESEMPIO for(;i < 100;) L'esempio ha senso a patto che i venga inizializzato prima di entrare nel for e venga modificato nel corpo del ciclo Pagina 39

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

41 Osservazioni sul ciclo for 3/3 Nel caso generale, inizializzazione e incremento possono anche essere una sequenza di espressioni con side-effect separate da "," Questo consente di inizializzare e/o incrementare più variabili contemporaneamente Tuttavia si raccomanda, come sempre, di tener conto della leggibilità del codice, e si sconsiglia il ricorso a numeri da circo Pagina 41

42 Esempi di cicli for 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 42

43 Esempio: codici ASCII #include <stdio.h> int main() { int i; printf("\ncarattere \t Codice\n"); for (i = 33; i <= 62; i++) { char c = (char) i; printf(" %c \t \t %d\n", c, i); return 0; Stampa i caratteri ASCII con codici tra 33 e 62 Pagina 43

44 Esecuzione Pagina 44

45 Istruzione do-while: sintassi do istruzione while (condizione); condizione è un espressione che restituisce un valore vero ( 0) o falso (0) istruzione è un'istruzione (o un blocco di istruzioni) e si indica come corpo del ciclo Pagina 45

46 Istruzione do-while: semantica do istruzione while(condizione); è equivalente a: istruzione; while(condizione) istruzione; N.B. La condizione viene valutata alla fine del ciclo e l'istruzione eseguita almeno una volta Pagina 46

47 Esempio Stampa di 100 asterischi (ciclo definito) int i = 0; do { printf("*"); i++; while (i < 100) N.B. Per garantire l'uscita dal ciclo, la condizione deve sempre dipendere da valori che vengono modificati durante l'esecuzione del corpo del ciclo (nell'esempio i) Pagina 47

48 Osservazioni sul ciclo do-while A differenza del while e del for, nel 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 48

49 Esempio: somma di interi Somma una sequenza di interi letti da input, e termina quando viene immesso 0 #include <stdio.h> int main() { int i, somma = 0; do { printf("digita intero (0 termina):"); scanf("%d", &i); somma = somma + i; while (i!= 0); printf(\ntotale = %d\n\n", somma); return 0; Pagina 49

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

51 Buone abitudini La sintassi del do-while richiede che ci sia un ; dopo while(condizione) Questo evita la confusione con un while, perché nel while il ; dopo la condizione non c'è Però potrebbe essere un while con ciclo vuoto Quindi per migliorare la leggibilità, e togliere ogni dubbio è meglio racchiudere il corpo del ciclo in un blocco, anche se è un'istruzione sola do { istruzione; while(condizione); Pagina 51

52 Diagramma di flusso do { istruzione-1;... instruzione-n; while (condizione); istruzione-n+1 istruzione-1... istruzione-n istruzione-n+1 = 0 falso condizione 0 vero Pagina 52

53 Validazione dell input Spesso è necessario effettuare un controllo dei dati immessi in input (in inglese validation) Nel caso in cui l utente abbia immesso un dato non valido, occorre richiedere l'immissione Si insiste nella richiesta fino a che non viene immesso un dato valido L'istruzione do-while si presta molto bene a realizzare questo tipo di ciclo Pagina 53

54 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("digita un intero > 0:"); scanf("%d", &i); while (i <= 0); // Ora i contiene un intero positivo Pagina 54

55 Esecuzione Pagina 55

56 Equivalenza tra while e do-while do { printf("digita un intero > 0:"); scanf("%d", &i); while (i <= 0); Equivale a printf("digita un intero > 0:"); scanf("%d", &i); while (i < 0) { printf("digita un intero > 0:"); scanf("%d", &i); Pagina 56

57 Insieme completo di strutture di controllo Due programmi si dicono equivalenti se, eseguiti con gli stessi dati di ingresso: non terminano entrambi, oppure terminano entrambi e producono gli stessi risultati in uscita Un insieme di strutture 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 57

58 Teorema di Böhm-Jacopini È possibile costruire un insieme completo con un numero molto limitato di istruzioni di controllo La sequenza, l'istruzione if-else e l'istruzione while formano un insieme di istruzioni completo Quindi con queste istruzioni è possibile scrivere (o riscrivere in modo equivalente) qualsiasi programma N.B. Sequenza è l'elencazione di più istruzioni, una di seguito all'altra perché vengano eseguite in quell'ordine Pagina 58

59 Calcolo del Massimo Comun Divisore 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 59

60 Algoritmo basato sulla definizione Cerchiamo il massimo tra i divisori comuni di x ed y Osservazione: 1 mcd(x, y) min(x, y) Quindi, si devono provare ttutti i numeri compresi tra 1 e min(x, y) Conviene iniziare da min(x, y) e scendere verso 1. Partendo dall'alto, appena si è trovato un divisore comune di x ed y, lo si restituisce Un divisore comune di x ed y di è un intero che divide sia x che y con resto 0 Pagina 60

61 Algoritmo in pseudocodice 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 = vero else mcd-- Pagina 61

62 Osservazioni Il ciclo termina sempre perché ad ogni iterazione: o si è trovato un divisore, o si decrementa mcd di 1 (e alla fine si arriva ad 1) Per verificare se si è trovato il mcd si utilizza una variabileintera che rappresenta un valore booleano (usata nella condizione del ciclo). Per verificare se mcd è divisore di x (e di y) si usa l operatore % (resto della divisione all'intero) Pagina 62

63 Codifica in C dell'algoritmo base #include <stdio.h> int main() { int x, y, mcd, resta = 1; printf("x = "); scanf("%d", &x); printf("x = "); scanf("%d", &y); mcd = x; if (y < mcd) mcd = y; while (mcd > 1 && resta) { if ((x%mcd == 0) && (y%mcd == 0)) resta= 0; if (resta) mcd--; printf("\n MCD(%d,%d)= %d\n\n", x, y, mcd); return 0; Pagina 63

64 Efficienza dell'algoritmo base 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, nel caso in cui 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 sensibilmente il numero di iterazioni, sfruttando la seguente proprietà: ESEMPIO mcd(12, 8) = mcd(12 8, 8) = mcd(4, 8-4) = 4 Pagina 65

66 Codifica in C del metodo di Euclide #include <stdio.h> int main() { int x, y, ox, oy; printf("x = "); scanf("%d",&x); printf("y = "); scanf("%d", &y); ox = x; oy = y; // ricordare x e y while (x!= y) { if (x > y) x = x - y; else y = y - x; // allora è y > x printf("\n MCD(%d,%d)= %d\n\n", ox, oy, x); return 0; Pagina 66

67 MCD: ammissibilità degli ingressi Bisogna sempre controllare il comportamento del programma con tutti i possibili ingressi Nel caso del MCD (con Euclide) cosa succede se: Se x = y = 0? Il risultato è 0 (corretto) Se x = 0 e y > 0 (o viceversa)? Il programma entra in un ciclo infinito Se x < 0 e y qualunque (e viceversa)? Il programma entra in un ciclo infinito Pagina 67

68 Raffinamento del programma #include <stdio.h> int main() { int x, y, ox, oy; printf("x = "); scanf("%d",&x); printf("y = "); scanf("%d", &y); ox = x; oy = y; // ricordare x e y if ((x > 0) && (y > 0)) { while (x!= y) { if (x > y) x = x - y; else y = y - x; // allora è y > x printf("\n MCD(%d,%d)= %d\n\n", ox, oy, x); else printf("\ndati non corretti\n\n"); return 0; Pagina 68

69 Metodo di Euclidecon i resti 1/2 Cosa succede col metodo di Euclide se x è molto maggiore di y (o viceversa)? Pagina 69

70 Metodo di Euclide con i resti 2/2 Per comprimere questa lunga sequenza di sottrazioni è sufficiente osservare che quello che si calcola, in fondo è semplicemente il resto della divisione intera METODO DI EUCLIDE CON I RESTI Pagina 70

71 Codifica del Metodo di Euclide con i resti #include <stdio.h> int main() { int x, y, ox, oy; printf("x = "); scanf("%d",&x); printf("y = "); scanf("%d", &y); ox = x; oy = y; // ricordare x e y while ((x!= 0) && (y!= 0)) { if (x > y) x = x % y; else y = y % x; // allora è y > x printf("mcd(%d,%d)= %d\n",ox,oy,(x!=0)? x : y); return 0; Espressione con operatore condizionale: C? e1 : e2 significa: se la condizione C è vera, allora vale e1 altrimenti vale e2 Pagina 71

72 Cicli annidati Il corpo di un ciclo può contenere a sua volta un ciclo, e così via: si parla allora di cicli annidati Es. Stampa della tavola pitagorica #include <stdio.h> int main() { int const N = 10; int row, col; printf("\n"); for (row= 1; row <= N; row++) { for (col = 1; col <= N; col++) if (row * col < 10) printf(" %d", row * col); else printf("%d", row * col); printf("\n"); return 0; Pagina 72

73 Tavola pitagorica: esecuzione Pagina 73

74 Esempio: 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 Nella piramide di altezza h nella generica riga r devo stampare: (h r) spazi (2 * r 1) asterischi Pagina 74

75 Piramide di asterischi: codice C Pagina 75

76 Piramide di asterischi: esecuzione Pagina 76

77 Esempio: potenza con doppio ciclo #include <stdio.h> int main() { int base, esp, ris = 1; printf("base = "); scanf("%d",&base); printf("esp = "); scanf("%d", &esp); while (esp > 0) { esp--; int m_ando = ris, m_tore = base, prod = 0; while (m_tore > 0) { m_tore--; prod = prod + m_ando; ris = prod; printf("risultato = %d\n", ris); return 0; Pagina 77

78 Istruzioni di controllo del flusso Le istruzioni di controllo del flusso determinano la successiva istruzione da eseguire, cioè consentono di variare la sequenza di esecuzione Anche le istruzioni if-else, if, switch, while, for, do-while sono istruzioni di controllo del flusso di esecuzione Esse però lo fanno fornendo una strutturazione del programma che ne determina il flusso di esecuzione Esse non permettono invece di stabilire in modo arbitrario la prossima istruzione da eseguire Pagina 78

79 Istruzioni di salto Il trasferimento arbitrario del controllo può essere ottenuto tramite apposite istruzioni di salto break (salta all'istruzione successiva al ciclo o allo switch in cui essa compare) continue (salta alla condizione del ciclo) goto (salta all'istruzione indicata tramite etichetta) Anche l'istruzione return può essere usata nelle funzioni per modificare il flusso di esecuzione Pagina 79

80 Uso di break per uscire da un ciclo break permette di uscire prematuramente da un istruzione switch, while, for o do-while double a; for (i = 0; i < 10; i++) printf("digita un reale >= 0"); scanf("%lf", &a); if (a >= 0) printf("radice di %f = %f\n", a, sqrt(a)); else { printf("errore\n"); break; N.B. Nel caso di cicli o switch annidati la break permette di uscire da un solo livello del nido Pagina 80

81 Istruzione break in doppio ciclo #include <stdio.h> int main() { int a, i, j; printf("\ndigita un intero >= 0 : "); 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; return 0; Pagina 81

82 Esecuzione Pagina 82

83 Rimozione del break 1/3 L esecuzione di un istruzione break altera il flusso del controllo Quando viene usata nei cicli: - si perde la strutturazione del programma - ma si guadagna in efficienza rispetto a una realizzazione che evita l'uso del break Per la pulizia del programma conviene mantenere la strutturazione e evitare l'uso del break In ogni caso è sempre possibile modificare la codifica eliminando un'istruzione di break Pagina 83

84 Rimozione del break 2/3 while (condizione){ sequenza-istr-1; if (condizione-break) break; sequenza-istr-2; Può essere riscritto come: int finito = 0; // La condizione finito è falsa while (condizione && finito){ sequenza-istr-1; if (condizione-break) finito = 1; // finito è vera else { sequenza-istr-2; Pagina 84

85 Rimozione del break 3/3 double a; int errore = 0; // errore è falso int i; for (i = 0; (i < 10) &&!errore; i++) { printf("digita reale >= 0: "); scanf("%lf", &a); if (a > 0) printf("radice di %f = %f\n", a, sqrt(a)); else { printf("errore\n"); errore = 1; // errore diventa vero Confrontare con il codice nella slide 80 Pagina 85

86 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. // Stampa i soli multipli di 3 int i; for (i = 1; i < n; i++) { if (i % 3!= 0) continue; printf("%d\n", i); N.B. La continue provoca il passaggio alla successiva iterazione del ciclo Pagina 86

87 Uso errato di continue int n; printf("\ndigita un intero >= 0 : "); scanf("%d",&n); while (n!= 0) { if (n < 0) continue; printf("\nradice di %d = %f", n, sqrt(n)); printf("\ndigita un intero >= 0 : "); scanf("%d",&n); N.B. Bisogna sempre accertarsi che, quando si esce da un'iterazione con una continue vengano comunque effettuate le azioni che garantiscono la terminazione del ciclo Pagina 87

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

89 Istruzione di salto goto L istruzione di salto deriva dal linguaggio macchina dove è l'unica struttura di controllo e ha un ruolo fondamentale per consentire la realizzazione dei cicli Fino agli anni '70 anche tutti i linguaggi ad alto livello (es. il FORTRAN) erano pesantemente basati sul goto 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 Pagina 89

90 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 l'istruzione specificata dall'etichetta etichetta è un identificatore che viene associato a un istruzione; in C si usa la sintassi: etichetta : istruzione; Pagina 90

91 Esempio sul goto int i = 0; int x; while (i < 100) { printf("\ndigita un intero; scanf("%d", &x); if (x < 0) goto errore;... i++... errore: printf"\ntermina per errore nei dati\n"); Il grosso vantaggio del goto è di consentire l'uscita in una botta sola da nidi di cicli molto profondi (ma resta una mezza porcata) Pagina 91

92 Nota sul goto Il goto è comunque un'istruzione pericolosa, e può provocare problemi soprattutto in sede di debugging Usato pesantemente in passato, è oggi considerato una cattiva pratica di programmazione Il suo uso deve essere limitato a casi eccezionali Circostanza tipica in cui si potrebbe volerlo usare è l'abbandono (di una sezione) del programma a causa di una situazione di errore In questi casi può però essere egregiamente sostituito da un return, eventualmente preceduto dalla chiamata a una funzione che gestisce l'errore. Pagina 92

93 Esempio su break e continue #include <stdio.h> int main() { int x, i; for (;;) { printf("\ndigita un intero >= 0 : "); i = scanf("%d",&x); if (x < 0) { // Numero negativo printf("ho detto >= 0!"); continue; else if (i!= 1) { // Errore di formato o fine file if (i == 0) printf("\nerrore lettura!\n\n"); else if (i == EOF) printf("\n Ciao! Ciao!\n\n"); break; printf("ho letto %d\n", x); return 0; Pagina 93

94 Esecuzione Pagina 94

95 Valore di ritorno scanf int scanf ( const char * format,... ); In caso di successo la funzione restituisce il numero di valori letti Eventualmente questo può essere inferiore al numero di argomenti, o anche 0 se c'è stato un errore L'errore può essere un errore di formato, un errore di lettura o il raggiungimento della fine del file Quando si raggiunge la fine del file prima di poter leggere qualcosa, viene restituito EOF Pagina 95

96 Svuotamento del buffer 1/3 La scanf acquisisce l'input una riga per volta I caratteri letti restano in un buffer, come sequenza terminata dal carattere EOL (End Of Line) La scanf consuma questi caratteri leggendo argomenti dalle sue liste fino a che incontra EOL Se si incorre in un errore di formato, nessun carattere viene consumato dalla scanf Se si desidera ricominciare la lettura da una nuova riga allora è necessario svuotare il buffer Pagina 96

97 Svuotamento del buffer 2/3 #include <stdio.h> int main() { int x; int i = 1; char c; while (i!= EOF) printf("\ndigita un intero : "); i = scanf("%d",&x); if (i!= 1) { // Errore di formato o fine file if (i == 0) { // Svuota il buffer do c = getchar(); while (c!= '\n'); // '\n' è EOL else printf("ho letto %d\n", x); printf("\n\nraggiunta la fine del file!\n\n"); return 0; Pagina 97

98 Svuotamento del buffer 3/3 Pagina 98

99 Esercizio su break econtinue Realizzare un programma in grado di leggere da tastiera valori interi 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 99

100 Soluzione #include <stdio.h> int main() { int value; while (scanf("%d", &value) == 1 && value!= 0) { if (value < 0) { printf("valore negativo. Termina\n\n"); break; // Abbandona il loop if (value > 100) { printf("valore > 100\n"); continue; // Vai alla prossima iterazione printf("raddoppio: %d\n", 2 * value"); // Stampa il doppio if (value >= 0) printf("terminato con successo\n\n"); return 0; Pagina 100

101 Esecuzione Pagina 101

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

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

Introduzione al C. Unità 4 Istruzioni di Ciclo

Introduzione al C. 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, S. Salza Sommario Unità 4 Ripetizione

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

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

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

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

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

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

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

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

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

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

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Le Strutture di controllo Del Linguaggio C Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni STRUTTURE DI CONTROLLO PRIMITIVE SEQUENZA SELEZIONE (o scelta logica) ITERAZIONE NON PRIMITIVE

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

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

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

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

Le strutture di controllo

Le strutture di controllo INFORMATICA B Ingegneria Elettrica Le strutture di controllo Selezione un esempio introduttivo Si disegni il diagramma di flusso di un algoritmo che chiede all utente un valore intero e visualizza il suo

Dettagli

Esercitazione 6. Array

Esercitazione 6. Array Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione

Dettagli

3 Costrutti while, for e switch

3 Costrutti while, for e switch Questa dispensa propone esercizi sulla scrittura di algoritmi, in linguaggio C, utili alla comprensione dei costrutti while, for e switch. I costrutti per costruire cicli in C sono il while, la variante

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

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

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

COMANDI ITERATIVI. Ivan Lanese

COMANDI ITERATIVI. Ivan Lanese COMANDI ITERATIVI Ivan Lanese Argomenti Comando while Comando do while Comando for Comando while: reminder while (condizione) comando; Semantica: la condizione viene testata: se è vera, viene eseguito

Dettagli

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

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char Tipo carattere Finora abbiamo lavorato con valori numerici. I numeri costituiscono molta parte del lavoro dei computer, ma non tutta. I computer sono macchine per il trattamento dell informazione e l informazione

Dettagli

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

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript Funzioni Funzioni predefinite della libreria matematica Funzioni disponibili: Math.sqrt(x) radice quadrata Math.log(x) logaritmo naturale in base e di x Math.abs(x) valore assoluto di x Math.ceil(x) arrotonda

Dettagli

Diagrammi a blocchi 1

Diagrammi a blocchi 1 Diagrammi a blocchi 1 Sommario Diagrammi di flusso, o a blocchi." Analisi strutturata." Esercizi. 2 Diagrammi a blocchi È un linguaggio formale di tipo grafico per rappresentare gli algoritmi." Attraverso

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

Algoritmi e soluzione di problemi

Algoritmi e soluzione di problemi Algoritmi e soluzione di problemi Dato un problema devo trovare una soluzione. Esempi: effettuare una telefonata calcolare l area di un trapezio L algoritmo è la sequenza di operazioni (istruzioni, azioni)

Dettagli

7. Strutture di controllo

7. Strutture di controllo Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Gestionale (L-Z) 7. Ing. Michele Ruta 1 di 17 Indice Istruzioni di selezione Mappate dal costrutto switch Istruzioni cicliche (di iterazione)

Dettagli

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf(

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf( Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Il controllo del programma in C DD Cap. 3, pp.91-130 Un esempio per iniziare /* calcolo di 8!*/ #define C 8 int i=1; int fatt=1; while

Dettagli

Rappresentazione degli algoritmi

Rappresentazione degli algoritmi Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti

Dettagli

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

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Alcuni esercizi 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Stampa di voti Esempio 1 (switch) Realizzare un programma che legge da input un voto (carattere tra A ed E ) e ne

Dettagli

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

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni

Dettagli

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

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Programmazione strutturata

Programmazione strutturata Programmazione strutturata C O P Y R I G H T ( C ) 2 0 0 8 W W W. F O N D A M E N T I. I N F O P E R M I S S I O N I S G R A N T E D T O C O P Y, D I S T R I B U T E A N D / O R M O D I F Y T H I S D O

Dettagli

Istruzioni di ripetizione in Java 1

Istruzioni di ripetizione in Java 1 in Java Corso di laurea in Informatica Le istruzioni di ripetizione consentono di eseguire molte volte la stessa Si chiamano anche cicli Come le istruzioni condizionali, i cicli sono controllati da espressioni

Dettagli

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

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

ISTRUZIONI ISTRUZIONI

ISTRUZIONI 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

Dettagli

Programmare in C. Esempio: Algoritmo del Risveglio

Programmare in C. Esempio: Algoritmo del Risveglio MASTER Information Technology Excellence Road (I.T.E.R.) Programmare in C (strutture di controllo) Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1

Dettagli

Algoritmi e basi del C Struttura di un programma

Algoritmi e basi del C Struttura di un programma Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 17 Marzo 2015 Compitini Compitini di INFO: 24 Aprile 2015 4.15pm @ C.G.1 (Ed. 9) 21

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

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

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while icli ed iterazioni Sintassi dell istruzione Esercizio Media aritmetica Esecuzione del programma icli while annidati Esercizio Quadrato 2 Istruzioni di ripetizione in Nel linguaggio esistono tre distinte

Dettagli

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli - ESERCIZI DI PROGRAMMAZIONE - condizionali e cicli - Elementi di Informatica e Programmazione Università di Brescia 1 Esercizio 1: dal tema d esame ING-INF del 28 gennaio 2009 Si sviluppi un programma in

Dettagli

Strutture iterative. Strutture iterative. I cicli in C. Strutture iterative. con i che assume i valori da 0 a 1000

Strutture iterative. Strutture iterative. I cicli in C. Strutture iterative. con i che assume i valori da 0 a 1000 Strutture iterative 2 Strutture iterative Ver. 2.4 Problema: Visualizzare i numeri interi da 0 a 1000 Soluzione printf("0\n"); printf("1\n"); printf("2\n"); printf("3\n"); printf("4\n");... Non è davvero

Dettagli

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Corso di Informatica B - Sezione D Esercitazioni Linguaggio C Esercitazione del 2012-10-11 Davide Chicco davide.chicco@elet.polimi.it

Dettagli

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie ! La libreria standard del C è in realtà un insieme di librerie! Per usare una libreria, non occorre inse -rirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle! Ogni file sorgente

Dettagli

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

Esercitazione 3. Espressioni booleane I comandi if-else e while Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if

Dettagli

Il linguaggio Java Istruzioni di Controllo

Il linguaggio Java Istruzioni di Controllo Il linguaggio Java Istruzioni di Controllo Istruzioni per il controllo di flusso Istruzioni di selezione if switch Istruzioni di iterazione while do-while for Istruzioni di salto break continue return

Dettagli

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo

Dettagli

Strutture di controllo iterative

Strutture di controllo iterative Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione Problema Scrivere un programma che acquisisca da standard input un intero

Dettagli

Cicli annidati e matrici di variabili

Cicli annidati e matrici di variabili Linguaggio C Cicli annidati e matrici di variabili 1 Cicli annidati! 2 cicli FOR annidati richiedono 2 differenti variabili contatori! Il contatore del ciclo interno può dipendere dal contatore del ciclo

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle

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

Dall analisi alla codifica (1)

Dall analisi alla codifica (1) Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 09 Dall analisi alla codifica (1) Aprile 2010 Dall'analisi alla codifica (1) 1 Contenuti... Problemi e algoritmi comprensione del problema

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Testo A Secondo Appello 016-17 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene

Dettagli

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

Variabili. Unità 2. 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

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi). Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,

Dettagli

Corso di Fondamenti di Informatica Classi di istruzioni 2

Corso di Fondamenti di Informatica Classi di istruzioni 2 Corso di Informatica Classi di istruzioni 2 Anno Accademico 2010/2011 Francesco Tortorella Strutture di controllo Caratteristica essenziale degli algoritmi è la possibilità di decidere le operazioni da

Dettagli

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura

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

C espressioni condizionali

C espressioni condizionali C espressioni condizionali Esiste un particolare operatore, detto operatore condizionale, che rappresenta un istruzione if else. estremamente compattata?: Supponiamo di voler inserire nella variabile intera

Dettagli

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

Tipi di dato. Unità 2. 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

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire:

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire: Sviluppo di programmi Per scrivere un programma C corretto bisogna: E ora, finalmente Si comincia! DD Cap. pp.4974 Analizzare il problema (input, output, casi estremali) 2. Progettare una soluzione (algoritmo)

Dettagli

Diagrammi a blocchi 1

Diagrammi a blocchi 1 Diagrammi a blocchi 1 Sommario Diagrammi di flusso, o a blocchi. Analisi strutturata. Esercizi. 2 Diagrammi a blocchi È un linguaggio formale di tipo grafico per rappresentare gli algoritmi. Attraverso

Dettagli

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

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2015/2016

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2015/2016 Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.it AA 2015/2016 Ambiente di test PHP online per avere un interprete PHP Php Online PHP Tester

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi

Dettagli

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Primo Appello 01-17 8 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene 10 domande,

Dettagli

ISTRUZIONI DI ITERAZIONE

ISTRUZIONI DI ITERAZIONE CHAPTER 6 CICLI 1 ISTRUZIONI DI ITERAZIONE Le istruzioni di iterazione sono usate per realizzare I cicli. Un ciclo è una istruzione il cui compito è di eseguire ripetutamente qualche altra istruzione (il

Dettagli

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

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ; 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

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C 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

Input/Output di numeri

Input/Output di numeri Input/Output di numeri I/O di numeri Per utilizzare le funzioni di I/O occorre include il file di intestazione (o file header) stdio.h utilizzando all inizio del sorgente la direttiva #include

Dettagli

I CARATTERI E LE STRINGHE

I CARATTERI E LE STRINGHE I CARATTERI E LE STRINGHE IL CODICE ASCII Per memorizzare i simboli grafici corrispondenti ai caratteri bisogna associare un numero intero a ciascuno di essi Il codice ASCII / æski/ (American Standard

Dettagli

PROGRAMMAZIONE: ESERCITAZIONE N. 6

PROGRAMMAZIONE: ESERCITAZIONE N. 6 PROGRAMMAZIONE: ESERCITAZIONE N. 6 Esercizi su stru+ure condizionali e itera1ve Conoscenze richieste: LC1+LC2+LC3+LC4+LC5+LC6 Esercizio 1 Acquisire un numero positivo N e calcolarne la radice quadrata

Dettagli

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

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzioni di controllo Iterative Condizionali Algoritmi e Diagrammi di flusso Esercizi 28/03/2011 2 Istruzioni iterative while do

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 16 ottobre 2007 1 Rappresentazioni di caratteri in C In C un carattere è una costante intera il cui valore è dato dal codice ASCII

Dettagli

La ripetizione. Cicli ed iterazioni. Flusso di esecuzione ciclico. La ripetizione. Flusso di esecuzione ciclico. Errore frequente

La ripetizione. Cicli ed iterazioni. Flusso di esecuzione ciclico. La ripetizione. Flusso di esecuzione ciclico. Errore frequente oncetto di ciclo Struttura di un ciclo Numero di iterazioni note Numero di iterazioni ignote icli ed iterazioni 5 lusso di esecuzione ciclico È spesso utile poter ripetere alcune parti del programma più

Dettagli

Istruzioni Condizionali in C

Istruzioni Condizionali in C Concetti chiave Istruzioni Condizionali in C Tipi di Istruzioni Condizionali Espressioni Blocchi d istruzioni Istruzioni Condizionali: if-else Istruzioni Condizionali: switch-case Istruzione break Istruzioni

Dettagli

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni Classi di istruzioni In maniera simile a quanto fatto per i dati, un linguaggio mette a disposizione dei costrutti per realizzare la parte esecutiva dell algoritmo. Questa consiste di: Leggi i valori di

Dettagli

Esercitazione 2. Corso di Fondamenti di Informatica

Esercitazione 2. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 2 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2014/2015

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2014/2015 Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.it AA 2014/2015 Ambiente di test Cercare PHP online per avere un interprete PHP Assegnamento

Dettagli

Linguaggio C Informatica Grafica

Linguaggio C Informatica Grafica Linguaggio C Informatica Grafica Corsi di Informatica Grafica Prof. Manuel Roveri Dipartimento di Elettronica e Informazione roveri@elet.polimi.it Linguaggio C Breve storia Struttura di un programma Variabili

Dettagli

1 Esercizi in pseudocodice

1 Esercizi in pseudocodice Questa dispensa propone esercizi sulla scrittura di algoritmi in un linguaggio semiformale, utile all acquisizione delle abilità essenziali per implementare algoritmi in qualsiasi linguaggio di programmazione.

Dettagli

Fondamenti di Informatica L-A

Fondamenti di Informatica L-A Fondamenti di Informatica L-A Esercitazione del 30/10/07 Ing. Giorgio Villani Ripasso Teoria Ciclo do while do {istruzioni while(espressione); int i; do { printf( Scegli un numero tra 1 e 3 ); scanf( %d,

Dettagli

L ELABORATORE ELETTRONICO

L ELABORATORE ELETTRONICO L ELABORATORE ELETTRONICO Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni ( mosse ) elementari le azioni vengono eseguite su oggetti (dati) per produrre altri oggetti

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

Rappresentazione binaria delle variabili (int e char)

Rappresentazione binaria delle variabili (int e char) Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati

Dettagli

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf Riassunto Esercitazione 3 Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf Sono state introdotte anche le seguenti relazioni: uguaglianza:

Dettagli