ISTRUZIONI SEMPLICI ISTRUZIONI ISTRUZIONI DI CONTROLLO PROGRAMMAZIONE STRUTTURATA

Documenti analoghi
ISTRUZIONI ISTRUZIONI SEMPLICI

ISTRUZIONI ISTRUZIONI SEMPLICI

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

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

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

ISTRUZIONI ISTRUZIONI

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse

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

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

Istruzioni di Controllo

Programmazione Strutturata. Programmazione Strutturata. Istruzione composta { } Istruzioni strutturate in C

Istruzioni ISTRUZIONI ISTRUZIONI SEMPLICI ISTRUZIONI DI CONTROLLO. Una istruzione di controllo può essere:

Il linguaggio C La programmazione strutturata

Il linguaggio C La programmazione strutturata

Esempio (if): equazione di secondo grado

Fondamenti di Informatica T. Linguaggio C: Istruzioni Strutturate

Istruzioni. lettura di dati di input calcolo di risultati tramite espressioni stampa dei risultati

del Linguaggio C Istruzioni di iterazione

Istruzioni del Linguaggio C

Linguaggio C Strutture di controllo

Esempi comparati while, do...while

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Struttura di un. Struttura dei programmi C

Esercitazione 2. Espressioni booleane Il comando if-else

PROGRAMMAZIONE STRUTTURATA

Programmazione strutturata (Dijkstra, 1969)

Istruzioni iterative (o cicliche)

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

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

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

Programmazione Procedurale in Linguaggio C++

Istruzioni di controllo

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

Programmazione strutturata

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

Informatica 2 modulo C Massimo Callisto De Donato

Istruzioni di Controllo in C. Emilio Di Giacomo

Programmazione Strutturata

Laboratorio di informatica Ingegneria meccanica

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

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

Il costrutto if else (I) Il costrutto if else (II)

Programmazione C Massimo Callisto De Donato

I costrutti del C. Le Strutture del C. Il costrutto if else (I) Il costrutto if else (II) Condizionali. if-else (else if) switch Iterative

Istruzioni Condizionali

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

Le strutture di controllo

Istruzioni decisionali

Programmazione Procedurale in Linguaggio C++

Informatica (A-K) 10. Linguaggio C - 2

Operatore condizionale

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

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

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

3 Costrutti while, for e switch

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

INFORMATICA. Strutture condizionali

PROGRAMMAZIONE: Le strutture di controllo

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

Abolizione di salti incondizionati (goto) nel flusso di controllo.

STRUTTURE DI CONTROLLO DEL C++

Laboratorio di Informatica I

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

Fondamenti di Informatica

20/10/2014 M. Nappi/FIL 1

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

Qualsiasi programma in C++ segue lo schema:

Istruzioni di selezione in Java 1

Istruzioni iterative. Istruzioni iterative

Istruzioni decisionali

Istruzioni Condizionali

Strutture di Controllo

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

Le strutture di controllo in C++

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

Il linguaggio Java Istruzioni di Controllo

Linguaggi di programmazione

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

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

Strutture di Controllo Iterative: Istruzione FOR

Diagrammi di flusso - Flowcharts. E un formalismo che consente di rappresentare graficamente gli algoritmi

Strutture di controllo

Espressioni semplici e condizionali

Programmazione strutturata

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 8 14/11/2013

C espressioni condizionali

Indice. costrutti decisionali costrutti iterativi

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Laboratorio di Programmazione

3 Costrutti while, for e switch

Università degli Studi di Milano

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

I costrutti del C. Strutture condizionali Strutture iterative Introduzione alle funzioni

Transcript:

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 istruzioni semplici in istruzioni più complesse Un istruzione C è espressa dalle seguenti produzioni: <istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione>; ISTRUZIONI SEMPLICI Qualsiasi espressione seguita da un punto e virgola è una istruzione semplice Esempi x = 0; y = 1;/* due istruzioni */ x = 0, y = 1;/* una istruzione */ k++; 3; /* non fa nulla */ ; /* istruz. vuota*/ 1 2 ISTRUZIONI DI CONTROLLO Una istruzione di controllo può essere: una istruzione composta (blocco) una istruzione condizionale (selezione) una istruzione di iterazione (ciclo) Le istruzioni di controllo sono alla base della programmazione strutturata (Dijkstra, 1969) PROGRAMMAZIONE STRUTTURATA Obiettivo: rendere più facile la lettura dei programmi (e quindi la loro modifica e manutenzione) Abolizione di salti incondizionati (go to) nel flusso di controllo La parte di esecuzione di un programma viene vista come un comando ottenuto tramite istruzioni elementari, mediante alcune regole di composizione (strutture di controllo) 3 4

STRUTTURE DI CONTROLLO Concetti chiave: concatenazione o composizione BLOCCO istruzione condizionale SELEZIONE ramifica il flusso di controllo in base al valore vero o falso di una espressione ( condizione di scelta ) ripetizione o iterazione CICLO esegue ripetutamente un istruzione finché rimane vera una espressione ( condizione di iterazione ) <blocco> ::= BLOCCO [ <dichiarazioni e definizioni> ] <istruzione> Il campo di visibilità dei simboli del blocco è ristretto al blocco stesso I1 I2 I3 Bohm e Jacopini (1966): queste tre strutture di controllo sono sufficienti per definire tutte le funzioni computabili 5 dopo un blocco non occorre il punto e virgola (esso termina le istruzioni semplici, non separa istruzioni) In 6 ESEMPIO di BLOCCO REGOLE DI VISIBILITÀ /* programma che, letti due numeri a terminale, ne stampi la somma*/ /* INIZIO BLOCCO */ int X,Y; printf( Inserisci due numeri ); scanf("%d%d",&x,&y); printf("%d",x+y); /* FINE BLOCCO */ Esistono delle regole di visibilità per gli identificatori (nomi di variabili, di funzioni, costanti) che definiscono in quali parti del programma tali identificatori possono essere usati In un programma esistono diversi ambienti: area globale il main ogni singola funzione ogni blocco 7 8

REGOLE DI VISIBILITÀ REGOLE DI VISIBILITÀ Un identificatore NON è visibile prima della sua dichiarazione Un identificatore definito in un ambiente è visibile in tutti gli ambienti in esso contenuti Se in un ambiente sono visibili due definizioni dello stesso identificatore, la definizione valida è quella dell ambiente più vicino al punto di utilizzo In ambienti diversi si può definire lo stesso identificatore per denotare due oggetti diversi In ciascun ambiente un identificatore può essere definito una sola volta 9 Un identificatore non è visibile prima della sua dichiarazione SCORRETTO int x = y*2; int y = 5;... CORRETTO int y = 5; int x = y*2;... 10 REGOLE DI VISIBILITÀ Se in un ambiente sono visibili due dichiarazioni dello stesso identificatore, la dichiarazione valida è quella dell ambiente più vicino al punto di utilizzo In ambienti diversi si può dichiarare lo stesso identificatore per denotare due oggetti diversi float x = 3.5; int y, x = 5; y = x; /* y vale 5 */ REGOLE DI VISIBILITÀ In ciascun ambiente un identificatore può essere dichiarato una sola volta float x = 3.5; char x; SCORRETTO...... 11 12

REGOLE DI VISIBILITÀ Un identificatore dichiarato in un ambiente è visibile in tutti gli ambienti in esso contenuti SCORRETTO int x; int y = 5; x = y;... CORRETTO int x; int y = 5; x = y;... 13 ESEMPIO di BLOCCO /* INIZIO BLOCCO1 */ int X; printf( Inserisci il numero X ); scanf("%d",&x); /* INIZIO BLOCCO2 */ int Y; printf( Inserisci il numero Y ); scanf("%d",&y); printf("%d",x+y); /* FINE BLOCCO2 */ /* FINE BLOCCO1 */ 14 ESEMPIO di BLOCCO /* INIZIO BLOCCO1 */ int X; printf( Inserisci il numero X ); scanf("%d",&x); /* INIZIO BLOCCO2 */ int Y; printf( Inserisci il numero Y ); scanf("%d",&y); /* FINE BLOCCO2 */ printf("%d",x+y); /* FINE BLOCCO1 */ ISTRUZIONI CONDIZIONALI <selezione> ::= <scelta> <scelta-multipla> la seconda non è essenziale, ma migliora l espressivitl espressività Espressione condizionale ternaria (..? : )) fornisce già un mezzo per fare scelte, ma è poco leggibile in situazioni di medio/alta complessità.. L istruzione L di scelta fornisce un altro modo per esprimere alternative NO: Le regole di visibilità non sono rispettate 15 16

ISTRUZIONE DI SCELTA SEMPLICE <scelta> ::= vera istruzione1 condizione if (<cond>) <istruzione1> [ else <istruzione2> ] falsa istruzione2 La parte else è opzionale: se omessa, in caso di condizione falsa si passa subito all istruzione che segue if La condizione viene valutata al momento dell esecuzione esecuzione di if 17 ESEMPIO di ISTRUZIONE IF <istruzione1> e <istruzione2> sono ciascuna una singola istruzione Qualora occorra specificare più istruzioni, si deve quindi utilizzare un blocco if (n > 0) /* inizio blocco */ a = b + 5; c = a; /* fine blocco */ else n = b; 18 /* determina il maggiore tra due numeri */ int primo,secondo; ESEMPIO di ISTRUZIONE IF scanf("%d%d",&primo,&secondo); if (primo > secondo) printf("%d", primo); else printf("%d", secondo); 19 ISTRUZIONI IF ANNIDATE Come caso particolare, <istruzione1> o <istruzione2> potrebbero essere un altro if Occorre attenzione ad associare le parti else (che sono opzionali) all if corretto Regola semantica: if (n > 0) else è sempre associato if (a>b) n = a; a if più interno else n = b; /* riferito a if(a>b) */ Se vogliamo cambiare questa if (n > 0) semantica, dobbiamo inserire un blocco if (a>b) n = a; else n = b; /* riferito a if(n>0) */ 20

ISTRUZIONE DI SCELTA MULTIPLA Consente di scegliere fra molte istruzioni (alternative o meno) in base al valore di una espressione di selezione L espressione di selezione deve denotare un valore numerabile (intero, carattere,) espressione di selezione caso A caso B default istruzioni1 istruzioni2 istruzioni break break break 21 ISTRUZIONE DI SCELTA MULTIPLA <scelta-multipla> ::= Sequenze, non occorre il switch (selettore) blocco case <label 1 >: case <label i >: <istruzioni> [break;] case <label j >: case <label n >: <istruzioni> [break;] [ default : <istruzioni>] Se nessuna etichetta corrisponde, si prosegue con il ramo default se esiste, altrimenti non si fa niente Il valore di selettore viene confrontato con le etichette (costanti dello stesso tipo del selettore): l esecuzione prosegue dal ramo corrispondente (se esiste) 22 NOTA ISTRUZIONE DI SCELTA MULTIPLA I vari rami non sono mutuamente esclusivi: imboccato un ramo, si eseguono anche tutti i rami successivi a meno che non ci sia il comando break a forzare esplicitamente l uscita espressione di selezione caso A caso B default istruzioni1 istruzioni2 istruzioni break break break switch (mese) case 1: giorni = 31; break; case 2: if (bisestile) giorni = 29; else giorni = 28; break; case 3: giorni = 31; break; case 4: giorni = 30; break;... case 12: giorni = 31; 23 24

ISTRUZIONE DI SCELTA MULTIPLA Alternativa possibile: switch (mese) case 2: if (bisestile) giorni = 29; else giorni = 28; break; case 4: case 6: case 9: case 11: giorni = 30; break; default: giorni = 31; ISTRUZIONE DI ITERAZIONE <iterazione> ::= <while> <for> <do-while> Le istruzioni di iterazione: hanno un solo punto di ingresso e un solo punto di uscita nel flusso del programma perciò possono essere interpretate come una singola azione in una computazione sequenziale 25 26 ISTRUZIONE while ISTRUZIONE while <while> ::= while(<condizione>) <istruzione> condizione vera istruzione falsa L istruzione viene ripetuta per tutto il tempo in cui la condizione rimane vera Se la condizione è falsa, l iterazione non viene eseguita neppure una volta In generale, NON è noto quante volte l istruzione sarà ripetuta 27 <while> ::= while(<condizione>) <istruzione> condizione vera istruzione falsa Prima o poi, direttamente o indirettamente,, l istruzione l deve modificare la condizione: altrimenti, CICLO INFINITO Quasi sempre istruzione è un blocco,, in cui si modifica qualche variabile che compare nella condizione 28

ESEMPIO ISTRUZIONE DI CICLO /* Media di N voti*/ int sum,voto,n,i; float media; printf( Quanti sono i voti? ); scanf("%d",&n); sum = 0; i = 1; while (i <= N) printf( Dammi il voto n.%d:,i); scanf("%d",&voto); sum=sum+voto; i=i+1; media=(float)sum/n; /* ipotesi: N>0 */ printf("risultato: %f",media); /* moltiplicazione come sequenza di somme */ int X,Y,Z; ESEMPIO ISTRUZIONE DI CICLO printf( Dammi i fattori: ); scanf("%d%d",&x,&y); // ipotesi X>0 Z=0; while (X!=0) /* corpo ciclo while */ Z=Z+Y; X=X-1; printf("%d",z); 29 30 ESEMPIO ISTRUZIONE DI CICLO /* Calcolo del fattoriale di un numero N */ int F, N, I; F=1; /* inizializzazione del fattoriale*/ I=1; /* inizializzazione del fattoriale*/ printf( Dammi N: ); scanf("%d",&n); ISTRUZIONE do.. while <do-while> ::= do <istruzione> istruzione while(<condizione>); È una variante della precedente: la condizione viene verificata dopo aver eseguito l istruzione while (I <= N) F = I*F; I = I+1; printf( Il fattoriale è %d, F); condizione vera falsa Se la condizione è falsa, l iterazione viene comunque eseguita almeno una volta 31 32

ESEMPIO ISTRUZIONE DI CICLO /* Calcolo del fattoriale di un numero N */ int F, N, I; F=1; /* inizializzazione del fattoriale*/ I=1; /* inizializzazione del fattoriale*/ printf( Dammi N: ); scanf("%d",&n); do F = I*F; I = I+1; while (I <= N); printf( Il fattoriale è %d, F); Leggi da input caratteri fino al carattere punto (valore sentinella)... do scanf( %c, &ch); while (ch!=. ); Oppure: ESERCIZIO ch= * ; while (ch!=. ) scanf( %c, &ch); 33 34 ISTRUZIONE for È una evoluzione dell istruzione while che mira a eliminare alcune frequenti sorgenti di errore: mancanza delle inizializzazioni delle variabili mancanza della fase di modifica del ciclo (rischio di ciclo senza fine) In genere si usa quando è noto quante volte il ciclo dovrà essere eseguito (contatore) <for> ::= for (<espr-iniz>;<cond>;<espr-modifica>) <istruzione> Struttura del while ISTRUZIONE for espr-inizializzazione condizione vera istruzione espr-modifica falsa 35 36

<for> ::= for(<espr-iniz>;<cond>;<espr-modifica>) <istruzione> Espressione di inizializzazione: <espr-iniz> valutata una e una sola volta espr-inizializzazione prima di iniziare l iterazione condizione vera istruzione espr-modifica ISTRUZIONE for falsa Condizione: <cond> valutata a ogni interazione, per decidere se proseguire (come in un while). Se manca si assume vera Espressione di modifica: <espr-modifica> valutata a ogni interazione, dopo aver eseguito l istruzione 37 ISTRUZIONE for: : equivalenza con while for (e1; e2; e3) <istruzione> Equivalente a: e1; while (e2) <istruzione> e3; 38 /* Media di N voti*/ int sum,voto,n,i; float media; ESEMPIO ISTRUZIONE DI CICLO printf( Quanti sono i voti? ); scanf("%d",&n); sum = 0; Nota: non serve l inizializzazionel del contatore for(i=1; i<=n; i++) i e l incremento l di i nel ciclo printf( Dammi il voto n.%d:,i); scanf("%d",&voto); sum=sum+voto; media=(float)sum/n; printf("risultato: %f",media); 39 /* Calcolo del fattoriale di un numero N */ #include <math.h> int N, F, I; ESEMPIO ISTRUZIONE DI CICLO printf( Dammi N: ); scanf("%d",&n); F=1; /*inizializzazione del fattoriale*/ for (I=2; I <= N; I++) F=F*I; printf("fattoriale: %d", F); 40

ESEMPIO Dati tre valori a b c che rappresentano le lunghezze di tre segmenti, valutare se possono essere i tre lati di un triangolo e, se sì, deciderne il tipo (scaleno, isoscele, equilatero) Vincolo: deve essere c < (a+b) Rappresentazione delle informazioni: la variabile booleana triangolo indica se i tre segmenti possono costituire un triangolo le variabili booleane scaleno, isoscele e equil indicano il tipo di triangolo ESEMPIO Algoritmo se a+b > c triangolo = vero se a=b=c equil=isoscele=vero scaleno=falso altrimenti se a=b o b=c o a=c isoscele=vero; equil=scaleno=falso altrimenti scaleno=vero; equil=isoscele=falso altrimenti triangolo = falso 41 42 ESEMPIO main () float a=1.5, b=3.0, c=4.0; int triangolo, scaleno=0, isoscele=0, equil=0; triangolo = (a+b > c); if (triangolo) if (a==b && b==c) equil=isoscele=1; scaleno=0; else if (a==b b==c a==c) isoscele=1; scaleno=equil=0; else scaleno=1; isoscele=equil=0; Dati due valori positivi X e Y, calcolarne la divisione intera X/Y come sequenza di sottrazioni, ottenendo quoziente e resto Invariante di ciclo: ESEMPIO X = Q * Y + R, con R 0 inizialmente, Q=0, R=X (R>Y) a ogni passo, Q =Q+1, R =R-Y (R>Y) alla fine, X = Q (n) * Y + R (n) (0<R<Y) che è la definizione di divisione intera 43 44

ESEMPIO Algoritmo sia Q il quoziente, inizialmente pari a 0 sia R il resto, inizialmente pari a X while (R Y) incrementare il quoziente Q decrementare R di una quantità Y Codifica Idem per l espressione l di modifica int x = 20, y = 3, q, r; for (q=0, r=x; r>=y; q++, r=r-y); Notare l uso l di una espressione concatenata per concatenare due assegnamenti e inizializzare così due variabili 45 Altri Piccoli ESERCIZI (1) Specifica: Si visualizzino i numeri interi da 1 a 10 int counter = 1; while (counter<=10) printf( %d\n, counter); ++counter; Alternativa: int counter = 0; while (++counter<=10) printf( %d\n, counter); 46 Altri Piccoli ESERCIZI (2) for (i=1; ++i<=3; ) printf( %d,i); for (i=1; i++<=3; ) printf( %d,i); i=10; while (i--) printf( %d,i); for (i=1; i<=3; ++i) for (i=1; i<=3; i++) Stampa 2 3 Stampa 2 3 4 Stampa 9 1 0 Sono equivalenti? 47