Programmazione strutturata
|
|
|
- Donata Cortese
- 9 anni fa
- Visualizzazioni
Transcript
1 Programmazione strutturata
2 Controllo del flusso 1 Flusso di esecuzione: ordine in cui le istruzioni di un programma sono eseguite Salvo contrordini, è in sequenza Il flusso sequenziale è specificato da un gruppo di istruzioni racchiuse tra { } detto blocco di istruzioni { } Istruzione1; Istruzione2; IstruzioneN;
3 Controllo del flusso 2 Flusso di esecuzione: ordine in cui le istruzioni di un programma sono eseguite sequenza Due possibili alterazioni: selezione: sceglie un azione da una lista di due o più azioni possibili ripetizione: continua ad eseguire un azione fino a quando non si verifica una condizione di termine
4
5 E' stato dimostrato che i programmi esprimibili tramite istruzioni di salto o diagrammi di flusso possono essere riscritti utilizzando le tre strutture di controllo (Teorema Boehm-Jacopini) Programmazione strutturata: I programmi usano soltanto sequenza, selezione, ripetizione
6 Selezione
7 Selezione: Permette di scegliere tra alternative da eseguire in base ad una condizione Una condizione è una espressione logica combinazione di operatori logici e relazionali Operatori relazionali: ==,!=, <,>,<=,>=
8 Operatori relazionali 1 se gli operatori sono uguali/ 0 se diversi <op1> = = <op2> 1 se gli operatori sono diversi/ 0 se uguali <op1>!= <op2> 1 se il 1 O è minore del 2 o operatore/ 0 altrimenti Precedenze: <,<=,>,>= hanno precedenza su = =,!=
9 Operatori logici Operano su valori logici: VERO 1 FALSO 0 Restituiscono un valore logico (0 o 1) Godono delle proprietà Commutativa Associativa Proposizione = sequenza di valori logici
10 Operatori logici di base La proposizione è vera se tutti gli operandi sono veri ( && ) La proposizione è vera se almeno uno gli operandi è vero ( ) La proposizione viene negata (! ) a XOR b: ((a &&!b) (!a && b))
11 Operatori logici e precedenze Operatore Valutazione Precedenza 1, se esp è falsa/0, se vera massima (!espr) Gli operatori logici 1, se binari espr1 hanno e espr2 precedenza sono vere/ inferiore intermedia a tutti gli altri operatori 0, altrimenti binari
12 Esempi x e y sono maggiori di z x è uguale a 1.0 o a 3.0 x ha un valore all'interno dell'intervallo determinato da z e y, estremi inclusi x ha valori all'esterno dell'intervallo determinato da z e y x>z && y>z x==1.0 x==3.0 z<=x && x<=y!(x>z && x<y) x<z x>y
13 Esempi Confronto tra caratteri: ch>='a' && ch<='z'
14 Valutazione a cortocircuito La valutazione di una espressione logica termina non appena il suo valore è determinato es. condizione: num%div==0 /*può causare un run time error*/ div!=0 && (num%div==0)/*corretto*/
15 Assegnamento logico Il risultato di un'espressione logica può essere assegnato ad una variabile di tipo int (per creare una variabile booleana ) int pari, dispari; pari=(n%2==0); dispari=(n%2!=0);
16 Istruzione if Selezione semplice: esegue un azione se e solo se una certa condizione è verificata Sintassi: if (Espressione_Booleana) Blocco_1 //esegui solo se vera Prossima_Istruzione; //sempre eseguita Espressione_Booleana true Blocco_1 false Prossima_Istruzione
17 Istruzioni di selezione - L istruzione if La forma generale di if quando riferita a blocchi di istruzioni è la seguente: if(espressione) Blocco_1 //esegui solo se vera else Blocco_2 //esegui solo se falsa Prossima_Istruzione; //sempre eseguita
18 Diagramma di flusso Espressione_Booleana true Blocco_1 false Blocco_2 Prossima_Istruzione
19 Programma #include <stdio.h> main(){ int a,b; /* numeri interi */ int c; /*variabile di appoggio*/ printf( \ninserisci due interi a e b ); scanf( %d%d,&a,&b); c=a-b; if(c>0) /* controllo */ { printf("il max e' a e vale %d\n",a); } else { printf("il max e' b e vale %d\n",b); } }
20 Esempi (selezione semplice): Dati in ingresso due numeri A e B, dividi A per B (se B diverso da zero) Conversione gradi Fahrenheit in Celsius e viceversa
21 Programma div.c #include <stdio.h> main(){ int a,b; /* variabili dividendo e divisore */ printf( Inserisci il dividendo ); scanf( %d,&a); printf( Inserisci il divisore ); scanf( %d,&b); if(b) /* controlla se b e zero */ { printf("%d\n",a/b); } else { printf("impossibile dividere per 0\n") } }
22 Istruzioni if annidate Esempio in pseudo-c if(i) { if(j) istruzione1; if(k) istruzione2; /* questo if e associato*/ else /* a questo else */ istruzione3; } else istruzione 4; /* questo if e associato a if(i) */
23 Selezione complessa (scelte mutuamente esclusive) Espressione_Booleana_1 true Blocco_1 Espressione_Booleana_2 true Blocco_2 Espressione_Booleana_n true Blocco_n
24 If-else-if (scelte esclusive) Un costrutto di programmazione a cui si ricorre frequentemente e che si basa sugli if annidati è il seguente if-else-if. if(condizione) istruzione; else if(condizione) istruzione; else if(condizione) istruzione;.. else istruzione; Le espressioni condizionali vengono valutate dall alto verso il basso. Alla prima condizione vera, viene eseguita l istruzione ad essa associata ed il resto della scala if-elseif viene aggirato. Se nessuna delle condizioni è vera allora viene eseguita l istruzione else finale (se è presente).
25 Istruzione (malsana) switch Istruzione switch: switch (Espressione_Di_Controllo) { case Etichetta_1: Sequenza_Istruzioni_1 case Etichetta_2: Sequenza_Istruzioni_2... case Etichetta_n: Sequenza_Istruzioni_n default: Sequenza_Istruzioni_Default }
26 Operatore condizionale È un operatore ternario: espr1? espr2 : epr3; if (espr1) else espr2; espr3; Ad esempio: z = (x>y)? x : y; /*assegna a z il max tra x e y */
27 L operatore, Assegna il valore di b a x, poi incrementa a e poi incrementa b: x = (a++, b++);
28 Istruzioni di Iterazione Ripetere un passo dell'algoritmo più volte Fanno parte di questa classe di istruzioni i cicli: for while do-while
29 Il ciclo for Inizializzazione Espressione_Booleana true Blocco false Continuazione Prossima_Istruzione
30 Il ciclo for (1) Viene utilizzato per ripetere un istruzione un numero specificato di volte. for(inizializzazione;espressione;incremento) istruzione; Per ripetere un blocco di istruzioni la forma generale è: for(inizializzazione;espressione;incremento) { istruzione_1;.. istruzione_n; }
31 Il ciclo for (2) L inizializzazione: di solito un istruzione di assegnamento che imposta il valore iniziale della variabile di controllo del ciclo, che ha la funzione di contatore. Per espressione si intende un espressione condizionale che determina se il ciclo continuerà (se vera) oppure no (se falsa). L incremento definisce la quantità di cui la variabile di controllo cambierà ogni volta che il ciclo viene iterato. devono essere separate da ; (punto e virgola).
32 Il ciclo for Esempio: calcolare la somma dei primi N numeri naturali S=0 I=1 I>N si S=S+1 I=I+1 no Scrivi S
33 Il ciclo for int i,n,s=0; printf("inserisci un intero n:\n"); scanf("%d",&n); for(i=1;i<=n;i++){ } s+=i; printf("la somma dei primi %d numeri e' %d",n,s);
34 Il ciclo while (1) La sintassi è: while(espressione) istruzione; oppure, while(espressione) { istruzione_1;.. istruzione_n; } L espressione definisce la condizione che controlla il ciclo Viene valutata prima di eseguire il blocco di istruzioni
35 Istruzione while Espressione_Booleana true Blocco false Prossima_Istruzione
36 Il ciclo while (2) È essenzialmente equivalente ad un ciclo for senza inizializzazione e l incremento: for ( ; condizione ; ) è equivalente a while (condizione)
37 Il ciclo while (3) /* programma che stampa i caratteri ASCII corrispondenti a lettere maiuscole (65-90)*/ #include <stdio.h> main() { unsigned char ch='a'; /* inizializzo la variabile al carattere codice ASCII */ while(ch<='z') { printf("[ %c ]\n",ch); /* stampa il singolo carattere ch */ ch++; /* incrementa il valore del carattere */ } }
38 Il ciclo do-while (1) A differenza dei cicli for e while, nei quali le condizioni sono verificate in testa al ciclo, il ciclo do-while verifica la condizione in fondo al ciclo. Cio significa che un ciclo do-while verrà sempre eseguito almeno una volta. do { istruzioni; } while(espressione); Il ciclo viene eseguito fino a che la condizione in espressione è vera. (se è falsa esce)
39 Istruzione do-while Blocco true Espressione_Booleana false Prossima_Istruzione
40 Spesso usato per il controllo dell'input da tastiera Esempio: controllo scelta di conversione da gradi Fahrenheit a Celsius (option 1) o viceversa (option 2)
41 I tre construtti (for, while, do-while) sono equivalenti si distinguono tra di loro in base al controllo anticipato o posticipato della condizione di controllo o alla conoscenza a priori del numero di iterazioni Scelta idonea per una particolare implementazione
42 Il ciclo for (3) /* programma che stampa i caratteri ASCII dal 33 al 127 */ #include <stdio.h> main() { unsigned char i; /* definisco la variabile i di iterazione del ciclo */ for(i=33;i<128;i++) /* ciclo for con indice i*/ { printf("[ %c ]\n",i);/* stampa un carattere racchiuso tra parentesi quadre, ad ogni ciclo */ } }
43 Il ciclo while (3) /* programma che stampa i caratteri ASCII dal 33 al 127 */ #include <stdio.h> main() { unsigned char ch=33; /* inizializzo la variabile al carattere codice ASCII 33*/ */ while(ch<128) { /* ciclo while controllato dall espressione ch<128 printf("[ %c ]\n",ch); /* stampa il singolo carattere ch */ ch++; /* incrementa il valore del carattere */ } }
44 Il ciclo do-while (2) /* stampa I caratteri ascii dal 33 al 128 */ #include <stdio.h> main() { unsigned char ch=33; /* il ciclo do-while viene sempre eseguito almeno una volta. Se ch=128 il ciclo verrebbe eseguito sempre e comunque una volta soltanto perche la condizione ch<128 viene controllata a fine ciclo */ do{ printf("[ %c ]\n",ch); ch++; }while(ch<128); }
45 Istruzione di salto break (1) Questa istruzione consente di uscire forzatamente da un ciclo aggirando la verifica condizionale. Quando in un ciclo si incontra l istruzione break, esso termina immediatamente ed il controllo del programma riprende dall istruzione successiva al ciclo
46 Istruzione di salto continue (1) Serve per ottenere forzatamente l iterazione anticipata di un ciclo aggirando la sua normale struttura di controllo. L uso di continue all interno di un ciclo provoca forzatamente il salto alla successiva iterazione del ciclo stesso saltando il codice che si trova tra il continue e l espressione condizionale che controlla il ciclo.
47 Istruzione di salto continue (2) /* stampa I numeri pari da 0 a 20 */ #include <stdio.h> main() { unsigned int i; } for(i=0;i<=20;i++) /* iteriamo da 0 a 20 compresi */ { if(i%2) continue; /* se il numero e dispari salta alla successiva iterazione del ciclo */ printf(" %d \n",i); /* stampa i numeri */ }
48 while( ) { continue; break; }
49 Cicli infiniti Cause principali: errata espressione Booleana errata (o assente) alterazione delle variabili coinvolte nell espressione Booleana Esempio: int total = 0; int count = 1; while (count!= 10) { total = total + count; count += 2; }
50 Esempi ed esercizi Calcolo del fattoriale Metodo di bisezione Ricerca di numeri primi Riconoscimento di un pattern
51
52
53 Tracciato (o traccia di esecuzione) È una simulazione su carta dell'algoritmo passo-passo per un valore in input delle variabili Usata per verficare se un algoritmo è corretto
54
55
56
57 Metodo di bisezione Determinare numericamente le soluzioni di una funzione f f(x)=0, x 1,x 2,...,x n (a i,b i ) intervallo in cui si trova x i, i=1,...,n Condizione: f(a i ) f(b i )<0 a i x i b i
58 Calcola il punto medio c i =(a i +b i )/2 Calcola il prodotto p=f(a i )f(b i ) Se p<0, l'estremo dx è c i Se p>0, l'estremo sx è c i Se p=0, la soluzione è c i
59 Quante volte ripetere? Condizione di arresto: a i -b i <ε Realizzazione con f(x)=cos(x) in (0,π) (vedi file: cap04_bisezione.c)
60 Numeri primi PB: Determinare tutti i numeri primi compresi tra 2 e N Sottoproblema: determinare se un numero i è primo i è primo se non è divisibile per alcun j<i Condizione: i%j Se i%j!=0, i è primo con j Se i%j==0, i non è primo
61 Quante volte ripetere? Per ogni j<i Miglioramento: per ogni j<jmax (quanto vale jmax?) In realtà: appena trovo j che divide i, esco dal ciclo (vedi file: primo_for.c e primo_while.c)
62 Problema iniziale: Quante volte ripetere? Al più N volte (vedi file: cap04_primi.c) Discussione: complessità?
63 Riconoscimento di un pattern PB: cerca una sequenza particolare in un testo (es. p= ciao in ora vado a casa, ciao! ) carattere per carattere Automa a stati finiti: Se sei in s0 e leggi 'c', vai nello stato s1; Se sei in s1 e leggi 'i', vai nello stato s2; Se sei in s2 e leggi 'a', vai nello stato s3; Se sei in s3 e leggi 'o', vai nello stato s4;
64 Le condizioni sono mutuamente esclusive Attenzione: se nello stato si leggi un carattere diverso da pi, torna nello stato s0 Quante volte ripetere? Finchè non raggiungi lo stato s4 (vedi file: riconoscimento_pattern.c)
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
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
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
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
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
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
Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Strutture di controllo
Informatica A (per gestionali) A.A. 2004/2005 Esercizi C Strutture di controllo 1 Indice 1 Strutture di controllo...3 1.1 Multiplo...3 1.2 Massimo Comun Divisore...3 1.3 Valutazione triangolo...4 1.4 Calcolatrice...5
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
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
Qualsiasi programma in C++ segue lo schema:
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
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
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
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
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
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
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
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",
Java SE 7. Strutture di programmazione (2)
Java SE 7 Strutture di programmazione (2) [email protected] [email protected] Casting (1) E' l'operazione che realizza la conversione di tipo tra oggetti e tra tipi primitivi. E' un'operazione
Istruzione if/else. Espressioni booleane
Istruzione if/else Espressioni booleane Espressioni booleane Possono assumere solo due valori: VERO (TRUE, per il C qualunque valore diverso da 0) FALSO (FALSE, il valore 0) Programmazione 2015/16 Introduzione
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
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
IL COSTRUTTO ITERAZIONE
IL COSTRUTTO ITERAZIONE Ragioniamo su questo esercizio Dati tre numeri farne la somma Modifichiamo il programma perché permetta di fare la somma di 1000 numeri. Il costrutto iterazione Il costrutto iterativo
