Le strutture di controllo

Похожие документы
Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

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

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

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

COMANDI ITERATIVI. Ivan Lanese

Istruzioni iterative (o cicliche)

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

PROGRAMMAZIONE: Le strutture di controllo

INFORMATICA. Strutture iterative

Le strutture di controllo in C++

STRUTTURE DI CONTROLLO DEL C++

Fondamenti di Informatica

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

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

Istruzioni iterative. Istruzioni iterative

Strutture di Controllo

Rappresentazione degli algoritmi

3 Costrutti while, for e switch

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

Programmazione strutturata

Diagrammi a blocchi 1

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

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

Unità di apprendimento 7. Dal problema al programma

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Algoritmi e soluzione di problemi

Introduzione alla programmazione Esercizi risolti

Diagrammi a blocchi 1

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

Fondamenti di Informatica T-1 Modulo 2

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

PROGRAMMAZIONE STRUTTURATA

Istruzioni Condizionali in C

Formalismi per la descrizione di algoritmi

Introduzione alla programmazione

Le basi del linguaggio Java

CORSO DI PROGRAMMAZIONE

Algoritmi e basi del C Struttura di un programma

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

Istruzioni Condizionali

Strutture di controllo decisionali

Il linguaggio di programmazione Python

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Iterazione determinata e indeterminata

Matlab. Istruzioni condizionali, cicli for e cicli while.

1 Esercizi in pseudocodice

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

Esempio: somma di due numeri

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

5 - Istruzioni condizionali

Costrutti iterativi. Utilizzo dei costrutti iterativi

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

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

Транскрипт:

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 valore assoluto Inizio Leggi(valore) Vero valore < 0 Falso Selezione ass = - valore ass = valore Scrivi(ass) Fine 2

Selezione - if Le parole chiave if e else permettono di definire due cammini di esecuzione alternativi (è un costrutto di selezione) La condizione è una espressione logica che può essere vera o falsa Il <bloccoif> e il <bloccoelse> sono eseguiti in alternativa in base all esito della valutazione della condizione <istruzione> viene eseguita in ogni caso dopo if (<condizione>) { <bloccoif> else { <bloccoelse> <istruzione> vero bloccoif Condizione falso bloccoelse istruzione 3

Selezione un esempio introduttivo Si disegni il diagramma di flusso di un algoritmo che chiede all utente un valore intero e visualizza il suo valore assoluto Inizio Leggi(valore) Vero valore < 0 Falso ass = - valore ass = valore Scrivi(ass) void main() int valore, ass; scanf("%d ", &valore); if (valore < 0){ ass = - valore; else { ass = valore; printf("%d", ass); Fine 4

Selezione una soluzione alternativa Si disegni il diagramma di flusso di un algoritmo che chiede all utente un valore intero e visualizza il suo valore assoluto Inizio Leggi(valore) valore < 0 Vero valore= - valore Scrivi(valore) Falso void main() int valore; scanf("%d ", &valore); if (valore < 0){ valore = - valore; printf("%d", valore); Fine 5

Selezione - if Il blocco riferito al if è obbligatorio Il blocco riferito al else è opzionale if (<condizione>) { <bloccoif> <istruzione> vero bloccoif Condizione falso istruzione 6

Blocchi di istruzioni Un blocco di istruzioni è una successione di istruzioni racchiuse tra parentesi graffe { istruzione1; istruzione2;... istruzionen; Se <bloccoif> o <bloccoelse> contengono una sola istruzione non è necessario inserire le parentesi Queste regole valgono anche per i costrutti ciclici presentati di seguito 7

Indentazione del codice È necessario formattare correttamente (indentare) il codice per renderlo leggibile: Ogni volta che apriamo un nuovo blocco ci spostiamo verso destra di un livello di tabulazione Ogni volta che chiudiamo un blocco, riprendiamo a scrivere il successivo codice un livello più a sinistra if (condizione1){ istruzione1; istruzione2; if (codizione2){ istruzione3; istruzione4; istruzione5;... istruzionen; istruzionen1; L indentazione non influisce minimamente con la correttezza del programma realizzato 8

Selezione un altro esempio Scrivere un programma che acquisisce un intero che rappresenta un voto e stampa «grav. insuff.» se il voto è minore 10, «insuff.» se il voto è compreso tra 10 e 17 estremi inclusi, «suff.» se è compreso tra 18 e 24 estremi inclusi, «ottimo» se maggiore di 24 void main() int voto; scanf("%d ", &voto); if (voto < 10) printf("grav. insuff.\n"); else if (voto>=10 && voto<=17) printf("insuff.\n"); else if (voto>=18 && voto<=24) printf("suff.\n"); else printf("ottimo\n"); Possiamo concatenare più istruzioni if-else 9

Selezione - concatenare istruzioni if Possiamo scrivere altre istruzioni if all interno di entrambi i blocchi bloccoif e bloccoelse Possiamo concatenare un numero qualsivoglia di if-else Verrà eseguito solo il blocco di codice relativo alla prima condizione che risulta vera if (<condizione1>) { <bloccoif1> else if (<condizione2>) { <bloccoif2> else { <bloccoelse> <istruzione> La condizione2 è valutata solo se si entra nel ramo else del primo if (cioè se la condizione1 è falsa). 10

Selezione un altro esempio Scrivere un programma che acquisisce un intero che rappresenta un voto. Il programma prima verifica che il numero rappresenti un voto valido (un intero tra 0 e 30 estremi inclusi) e poi lo analizza come presentato nell esempio precedente. Altrimenti stampa un messaggio di errore void main() int voto; scanf("%d ", &voto); if (voto>=0 && voto <= 30){ if (voto<10) printf("grav. insuff.\n"); else if (voto>=10 && voto<=17) printf("insuff.\n"); else if (voto>=18 && voto<=24) else else printf("suff.\n"); printf("ottimo\n"); printf("voto non valido\n"); Possiamo annidate più istruzioni if-else una all interno dell altra 11

Condizioni In C i valori vero e falso sono espressi mediante valori interi 0 vuol dire falso Qualsiasi numero intero diverso da 0 vuol dire vero Operatori relazionali Operatori supportati: ==!= > < <= >= Restituiscono 0 (falso) o 1 (vero) Operatori logici Operatori supportati:! && Restituiscono 0 (falso) o 1 (vero) Attenzione a non confonderli con & e Esempio Il valore della variabile a deve essere compresa nell intervallo [0;10] a<=10 && a>=0 12

Condizioni Precedenza degli operatori Operatore Associatività () Da sinistra a destra! - Da destra a sinistra * / % Da sinistra a destra + - Da sinistra a destra > < <= >= Da sinistra a destra ==!= Da sinistra a destra && Da sinistra a destra Da sinistra a destra = Da destra a sinistra, Da sinistra a destra 13

Classici errori La condizione deve essere sempre racchiusa tra parentesi () L errore è sintattico e pertanto è rilevato a tempo di compilazione L istruzione if non deve terminare con il ; Se non c è la clausola else, non viene segnalato alcun errore sintattico È presente però un errore semantico visto che significa se la condizione è vera non fare nulla if (a<0); { a=-a;... Attenzione: non va messo il punto e virgola 14

Iterazione un esempio introduttivo Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero positivo o nullo, e calcola e visualizza il suo fattoriale Inizio Leggi(n) f = 1 Iterazione Vero f = f * n n > 0 Falso Scrivi(f) n = n - 1 Fine 15

Iterazione - while La parola chiave while permette di definire un ciclo a condizione iniziale Il blocco viene eseguito finché la condizione permane vera while (<condizione>) { <blocco di istruzioni> <istruzione>... Condizione Vero Falso Blocco Istruzione 16

Iterazione un esempio introduttivo Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero positivo o nullo, e calcola e visualizza il suo fattoriale Inizio void main() Leggi(n) int n, f; scanf("%d ", &n); f = 1 f = 1; Vero n > 0 Falso while (n > 0){ f = f * n; f = f * n Scrivi(f) n = n - 1; n = n - 1 Fine printf("%d", f); 17

Elementi di un costrutto ciclico Inizializzazione Le variabili interessate, e soprattutto quelle usate nella condizione del ciclo, devono essere inizializzate prima della valutazione della condizione Test Deve essere prevista una valutazione della condizione di permanenza nel ciclo, che determini la ripetizione o la terminazione del ciclo Aggiornamento Almeno una delle variabili della condizione deve essere modificata all interno del ciclo, in modo che prima o poi la condizione di ripetizione diventi falsa, causando la terminazione del ciclo 18

Iterazione un altro esempio Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero positivo e visualizza tutti i numeri da 0 al valore inserito Inizio Leggi(n) c = 0 Iterazione Vero Scrivi(c) c <= n Falso Fine c = c + 1 19

Iterazione una soluzione Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero positivo e visualizza tutti i numeri da 0 al valore inserito Vero Scrivi(c) c = c + 1 Inizio Leggi(n) c = 0 c <= n Falso Fine void main() int n, c; scanf("%d ", &n); c = 0; while(c <= n){ printf("%d ", c); c = c + 1; 20

Iterazione una soluzione Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero positivo e visualizza tutti i numeri da 0 al valore inserito Inizio Vero Scrivi(c) c = c + 1 Leggi(n) c = 0 c <= n Falso Fine void main() int n, c; scanf("%d ", &n); for(c = 0; c <= n; c = c + 1){ printf("%d ", c); 21

Iterazione - for inizializzazione test modifica for (c=0; c<=n; c=c+1) { printf("%d ", c); Blocco di istruzioni da eseguire ciclicamente Il blocco di istruzioni viene eseguito finché la condizione di test è vera 22

Iterazione - for for (inizializzazione; test; modifica) { <blocco di istruzioni> <istruzione>... inizializzazione Vero blocco modifica test Falso istruzione 23

Iterazione - for Anche il ciclo for è un costrutto ciclico a condizione iniziale Utilizzato ogni volta che è noto a priori il numero di cicli da eseguire (detto ciclo di conteggio) Nel while la condizione di uscita era dettata da una condizione generica Nel ciclo for la condizione di uscita predica su un contatore Il contatore è una variabile intera che memorizza il numero di volte che il ciclo è stato eseguito 24

Iterazione - for Gli elementi del ciclo for sono identici agli elementi di un costrutto ciclico generico ma sono applicati al contatore Inizializzazione: il contatore viene inizializzato Test: il contatore viene confrontato con il limite superiore (inferiore) Aggiornamento: il contatore viene incrementato (decrementato) Il costrutto for racchiude tutti e tre gli elementi for (inizializzazione; test; modifica) { <blocco di istruzioni> 25

Equivalenza tra for e while int c, n;... c = 0; while (c <= n) {... printf("%d ", c); c=c+c; int c, n;... for (c=0; c<=n; c=c+1) {... printf("%d ", c); 26

Autoincremento L istruzione i=i+1 può essere sostituita da i++; (autoincremento) L autoincremento vale solo per variabili intere e può essere espresso in due forme variabile++ (prima accedo alla variabile e poi incremento) ++variabile (prima incremento e poi accedo alla variabile) Sostituendo l operatore ++ con -- si ottiene l autodecremento 27

Autoincremento La differenza tra le due forme è evidente solo quando l autoincremento (autodecremento) è inserito in una espressione Esempio 1 a=5; b=a++;/* b vale 5 */ Esempio 2 a=5; b=++a;/* b vale 6 */ In ogni caso, utilizzare le operazioni di autoincremento (autodecremento) all interno di espressioni più complesse o assegnamenti è un cattiva pratica 28

Iterazione un altro esempio Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero e verifica se questo è positivo; in caso la condizione non sia verificata ripete l acquisizione. Una volta letto un valore valido, l algoritmo lo visualizza Inizio Iterazione Vero Leggi(n) n<=0 Falso Scrivi(n) Fine 29

Iterazione do-while Le parole chiave do e while permettono di definire un ciclo a condizione finale do{ <blocco> while (<condizione>); <istruzione>... Vero Blocco Condizione Falso Attenzione: Serve il punto e virgola per terminare l istruzione Istruzione 30

Iterazione un altro esempio Disegnare il diagramma di flusso di un algoritmo che acquisisce un numero intero e verifica se questo è positivo; in caso la condizione non sia verificata ripete l acquisizione. Una volta letto un valore valido, l algoritmo lo visualizza Vero Inizio Leggi(n) n<=0 Falso Scrivi(n) Fine void main() int n; do{ scanf("%d ", &n); while (n <= 0); printf("%d", n); 31

Combinazione di più costrutti I costrutti presentati possono essere combinati come presentato co i diagrammi di flusso Possiamo annidare un costrutto nel corpo di un altro costrutto Possiamo utilizzare più costrutti in sequenza nello stesso blocco di istruzioni... if (...){ do {... while(...); else { if(...){... else {... 32