prof. pagani corrado linguaggio c: selezione e cicli · ogni linguaggio di programmazione presenta...

19
LINGUAGGIO C: SELEZIONE E CICLI Prof. Pagani Corrado

Upload: nguyennhu

Post on 17-Feb-2019

219 views

Category:

Documents


1 download

TRANSCRIPT

LINGUAGGIO C: SELEZIONE E CICLI

Prof. Pagani Corrado

IF

Ogni linguaggio di programmazione presenta almeno una struttura di controllo decisionale.

La sintassi del linguaggio C è la seguente. if (<espressione>)

<istruzione/istruzioni>;

Si tratta di una selezione, all’interno della quale se e solo se espressione è vera viene eseguita l’istruzione.

OPERATORI DI CONFRONTO

Simbolo Significato Utilizzo

== uguale a a == b

!= diverso da a != b

< minore a < b

> maggiore a > b

<= minore o uguale a <= b

>= maggiore o uguale a >= b

OPERATORI LOGICI

Vero e Falso sono 2 valori Booleani che in

linguaggio C NON hanno un tipo di dato a loro

dedicato.

Per tale motivo sono codificati con valori interi,

rispettivamente 1 (Vero) e 0 (Falso)

Simbolo Significato Utilizzo

&& AND logico a && b

|| OR logico a || b

! NOT logico !a

BLOCCHI DI ISTRUZIONI

Attenzione che se scriviamo più istruzioni dopo l’IF sarà solo la prima ad essere vincolata alla condizione presente nell’IF.

Se vogliamo che più istruzioni siano eseguite quando l’espressione è vera dobbiamo ricorrere ad un blocco di istruzioni che le raccolgano (racchiuse tra Parentesi graffe)

If (x > y)

max = x;

min = y;

If (x > y)

{

max = x;

min = y;

}

In questo caso

l’istruzione

min = y

È eseguita

sempre, anche

se l’espressione

non è vera

IF … ELSE

E’ possibile specificare anche una istruzione (o

blocco di istruzioni) da eseguire solamente se

l’espressione dell’IF è falsa.

In questo caso si ricorre alla parola chiave ELSE

La clausola ELSE, come abbiamo visto dai

primi esempi, è opzionale

if (<espressione>) <istruzione/istruzioni>;

[else <istruzione/istruzioni>;]

IF ANNIDATI

All’interno di un blocco di istruzioni che fa riferimento ad un IF o ad un ELSE è possibile implementare un nuovo controllo IF ad un livello più interno (annidato).

Ciò è ammissibile a più livelli anche se, per facilità di lettura del codice, è consigliato di non abusare di tale tecnica qualora sia possibile.

Possibili alternative possono essere Operatori booleani

Switch case

….

IF ANNIDATI – ESEMPIO

SWITCH – CASE

Per le scelte multiple un’alternativa agli if-else in cascata è la struttura di controllo switch-case

La struttura è composta dalla parola chiave switch che ha l’effetto di valutare espressione.

Se espressione è uguale a una certa costante sono eseguite tutte le istruzioni del blocco a partire da quella posizione.

Se espressione non è uguale ad alcuna costante, sono eseguite le sole istruzioni della parte opzionale default.

Normalmente quel che si desidera è che siano eseguite le sole istruzioni relative a un case, non tutte quelle che seguono. A tale scopo è disponibile l’istruzione break che provoca l’uscita dallo switch.

SWITCH – CASE

switch (espressione)

{

case costante1:

istruzione;

….

[break]

case costante2:

istruzione;

….

[break]

[default:

istruzione;

…. ]

}

Nei diagrammi a blocchi si può

ricorrere ad una sequenza di IF,

oppure alla struttura riportata qua di

seguito

ITERAZIONE

L’iterazione è una struttura che consente di ripetere più volte l’esecuzione di un insieme di istruzioni.

Due tipi di iterazione:

iterazioni enumerative: consentono di eseguire un blocco di istruzioni un numero predefinito di volte.

iterazioni guidate da eventi: non è noto a priori quante volte saranno eseguite. Tutto dipende dal fatto che un certo evento si verifichi o meno; se una condizione è vera (o è ancora vera) il blocco viene eseguito, altrimenti si passa all’istruzione successiva al termine del blocco.

ITERAZIONE – DIAGRAMMI A BLOCCHI

La condizione può essere espressa PRIMA o

DOPO il blocco di espressioni da ripetere

LOOP

Soprattutto per quanto riguarda le iterazioni

guidate da eventi, occorre fare molta

attenzione al fatto che ad un certo punto del

programma, la condizione che gestisce il ciclo

diventi falsa.

In caso contrario il ciclo sarebbe eseguito

all’infinito e il programma, pur NON andando

in errore, non terminerebbe.

CICLO DO … WHILE

L’istruzione continua a essere eseguita fintanto che <espressione> risulta vera.

Nel caso, molto frequente, in cui il corpo del ciclo sia costituito da più istruzioni, si utilizza una coppia di parentesi graffe per racchiudere l’insieme delle istruzioni che fanno parte del ciclo.

do <istruzione>; while (<espressione>);

do { <istruzione1>; <istruzione2>; … <istruzioneN>; } while (<espressione>);

CICLO WHILE

Il linguaggio C mette a disposizione il ciclo while

L’istruzione continua a essere eseguita fino a quando

<espressione> risulta vera.

Nel caso di più istruzioni si ricorre ad un blocco

while (<espressione>)

<istruzione>;

while (<espressione>) { <istruzione1>; <istruzione2>; … <istruzioneN>; };

ITERAZIONI ENUMERATIVE

In molti casi, è noto a priori quante volte il blocco di istruzioni interne al ciclo debba essere eseguito

Le strutture iterative presentate possono essere utilizzate anche per risolvere questo tipo di problemi.

Viene utilizzata una variabile (contatore) che ha la funzione di “contare” il numero di ripetizioni;

Il contatore viene inizializzato prima del ciclo con un valore di partenza, e poi incrementato a ogni esecuzione;

La condizione di ciclo controlla il raggiungimento del numero di iterazioni voluto.

CICLO FOR

Ogni linguaggio presenta uno o più costrutti di programmazione per implementare le iterazioni enumerative Il C fornisce il ciclo for.

<istruzioneIniziale> eseguita una sola volta prima delle istruzioni interne al ciclo. Solitamente utilizzata per inizializzare la variabile indice del ciclo.

<espressione> condizione logica che deve essere soddifatta per entrare nel corpo del ciclo

<istruzioneFinale> eseguita ad ogni iterazione del ciclo, al termine delle istruzioni del ciclo stesso, solitamente utilizzata per l’incremento/decremento della variabile indice del ciclo

for(<istruzioneIniziale>;<espressione>;<istruzioneFinale>) { <istruzione1>; … <istruzioneN>; };

Corpo del ciclo

CICLO FOR ESEMPI

Visualizzare tutti i primi N numeri interi

for(int i = 1; i<=N; i++)

{

printf(“%d \n”,i);

};

Visualizzare tutti i numeri interi compresi tra 2 estremi dati (N1 e N2)

for(int i = N1; i<=N2; i++)

{

printf(“%d \n”,i);

};

CICLI ANNIDATI

Se all’interno del blocco iterativo si può inserire

qualsiasi tipo di istruzione, questo significa che

si può includere anche un’istruzione di

selezione o un altro ciclo; in questo caso si

parla di annidamento (o nidificazione) dei cicli.

Anche in questo caso, è preferibile, ove

possibile, non creare troppi livelli di cicli

annidati, per favorire la

leggibilità/comprensione del codice