Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio...

22
Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 1 Lezione 4 Espressioni e Operatori Laboratorio di Algoritmi e Strutture Dati 2001 -02 1 Espressioni ü Un’espressione è formata da una o più operazioni ü Le operazioni sono rappresentate da operandi ed operatori operatore = simbolo che identifica l’operazione operando = argomento su cui deve essere eseguita l’operazione a + b; ü Gli operatori del C++ sono unari, binari o ternari gli operandi di un operatore binario sono distinti in operando sinistro (primo argomento dell’operatore) e operando destro (secondo argomento dell’operatore)

Transcript of Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio...

Page 1: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 1

Lezione 4

Espressioni e Operatori

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

1

Espressioni

ü Un’espressione è formata da una o più operazioniü Le operazioni sono rappresentate da operandi ed

operatori® operatore = simbolo che identifica l’operazione® operando = argomento su cui deve essere eseguita l’operazione

a + b;

ü Gli operatori del C++ sono unari, binari o ternari

®gli operandi di un operatore binario sono distinti in operando sinistro (primo argomento dell’operatore) e operando destro (secondo argomento dell’operatore)

Page 2: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 2

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

2

Valutazione delle Espressioni

üLa valutazione di un’espressione richiede l’esecuzione di una o più operazioni® L’ordine in cui vengono considerati gli

operatori e gli operandi dipende dalle regole di precedenza e di associatività

ü Il risultato dell’espressione è (quasi sempre) un R-value

ü Il tipo del risultato dipende dal tipo degli operandi dell’espressione

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

3

Operatori Aritmetici

ü Gli operatori aritmetici sono +, -, *, /, %

ü Il tipo del risultato di un’operazione aritmetica è uguale al tipo dell’operando più grande

2 * 3.5 // risultato è double7 / 3; // risultato è intero (2)

21 % 3; // risultato è intero (0)21 % 3.5; // ERRORE

Possono verificarsi errori di eccezione aritmetica®divisione per 0, underflow, overflow

Page 3: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 3

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

4

Operatori Logico-Relazionali

ü Gli operatori logico-relazionali sono

>, <, >=, <=, ==, !=, &&, ||, !ü restituiscono un risultato di tipo vero-falso

® un’espressione è falsa se vale 0, vera altrimenti

ü Gli operatori logici vengono valutati da sinistra a destra ® la valutazione termina non appena è stato determinato il valore

dell’espressione

expr1 || expr2; // expr2 non valutata se expr1 è vera

!strcmp(s, t); // equivalente a (strcmp(s, t) == 0)

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

5

Esempio Operatori RelazionaliConta quanti elementi di ivec sono minori del valore di soglia

#include <vector>int conta(const vector<int>& ivec, int soglia){

int cnt = 0;vector<int>::iterator iter = ivec.begin();while(iter != ivec.end() ) {

cnt = cnt + (*iter < soglia);++iter;

}return cnt;

}

Page 4: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 4

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

6

Utilizzo dei Controlli di Sentinella – 1

üCi sono situazioni in cui un'operazione è legale solo se alcune precondizioni sono verificate® Dereferenziazione di un puntatore w solo se il puntatore non è 0

® Accesso ad un elemento di un array w solo se l'indice è corretto

® Divisione w solo se il divisore è diverso da 0

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

7

Utilizzo dei Controlli di Sentinella – 2

ü Se le precondizioni non sono soddisfatte si verifica un comportamento anomalo del programma

ü Si possono usare gli operatori logici per effettuare queste operazioni solo se le precondizioni sono verificate

int *ptr = 0, i;(ptr) && (i = *ptr);

Page 5: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 5

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

8

Operatori di Assegnamento – 1

üL’operatore di assegnamento è =® L'operatore di assegnamento modifica il

valore di una variabile (la variabile aveva gia un valore)

® L'operatore di inizializzazione assegna un valore ad una variabile appena creata

üL’operando di destra è un R-value e l’operando di sinistra è un L-value

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

9

Operatori di Assegnamento – 2 ü Il risultato di un assegnamento è l’R-value

dell’operando destro

ü Il tipo dell’assegnamento è il tipo dell’operando sinistro

int i, *ip, ia[4] = {0}, j;i = ia[0] + 1; // risultato 1, intero

int *ip = &j;*ip = i*2 + ia[i]; // risultato 2, intero

Page 6: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 6

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

10

Operatori di Assegnamentoü È possibile concatenare operazioni di

assegnamento se tutti gli operandi a cui si devono assegnare valori sono dello stesso tipoint i, j;i = j = 0; // CORRETTOint i = j = 0; // ERRORE

ü L’operatore di assegnamento composto permette di compattare la notazione

a op= b; ==> a = a op b;ü È possibile comporre

+, -, *, /, %, &, |, <<, >>, ^

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

11

Operatori di Incremento e Decremento

ü Gli operatori di incremento e decremento sono ++ , --i++ ===> i = i + 1;i-- ===> i = i - 1;

ü Esistono due versioni dello stesso operatore® ++i prima incrementa il valore di e poi lo legge® i++ prima legge il valore di i e poi lo incrementa

int i = 0, ia[3] = { 0, 1, 2 };int c = ia[i++]; // c = 0, i = 1c = ia[++i]; // i = 2, c = ia[2]

Page 7: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 7

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

12

Operatore sizeofü L’operatore sizeof restituisce la dimensione in byte di

un oggetto o di un tipo® Il risultato di un sizeof è di tipo size_t (tipo dipendente dalla

macchina definito nell'header file cstddef)® Il risultato di un sizeof è una costante

sizeof( expr ); // dimensione del tipo di exprsizeof epxr;sizeof( int ); // dimensione di int

ü L’operatore sizeof applicato ad un array restituisce il numero di byte occupati dall’array

int ia[] = { 0, 1, 2 };sizeof( ia ) / sizeof( int ); // il risultato è 3

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

13

Operatore Condizionale – 1

üL’operatore condizionale (if aritmetico) è l’unico operatore ternario del C++

üLa sintassi è expr1 ? expr2 : expr3;

® se expr1 è vera il risultato è expr2, altrimenti è expr3

Page 8: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 8

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

14

Operatore Condizionale – 2

#include <iostream>main() { // calcola parità

int i;cout << “dammi un intero” << endl;cin >> i;cout << i << “ è “ ;cout << (i % 2) ? “dispari” : “pari” << endl;

}

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

15

Operatore Virgola

ü La virgola serve a separare sotto-espressioni

ü Un espressione formata da sotto-espressioni separate da virgole ha come risultato il valore dell’ultima sotto-espressione

int ia[3], m[3][4];int i = ( ia != 0 ) ? ia[1]++, 1 : 0;m[1, 2] = 100; // dove abbiamo scritto?

Page 9: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 9

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

16

Operatori ai Bitü Gli operatori ai bit sono %, |, ,̂ ~, <<, >>

® Leggono gli operandi come sequenze di bit® Possono operare su uno (o più) specifico bit® Il controllo sulla correttezza delle operazioni è delegato

completamente al programmatore

ü Gli operandi sono detti bitvector® Utilizzati per rappresentare in modo compatto insiemi di flag® Sono di tipo intero (int, short, long, char)

® È consigliabile che siano unsigned

ü Nella libreria iostream i bitvector sono usati per rappresentare il formato del flusso (tipo di rappresentazione, numero di cifre decimali, etc.)

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

17

Esempio Operatori ai Bit

unisgned char i = 101; // 01100101 unsigned char j = 151; // 10010111

j = ~j; // 01101000 (104)j << 1; // 11010000 (208)j >> 2; // 00110100 (52)j &= i; // 00100100 (36)j ^= i; // 01000001 (65)j |= i; // 01100101 (101)

Page 10: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 10

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

18

Classe bitset

ü La libreria standard fornisce la classe bitsetche implementa il tipo di dati astratto “sequenza di bit”® Fornisce operazioni per manipolare e testare insiemi

di bit, indipendenti dalla rappresentazione dei bit

ü Definizione di variabili bitset

bitset<24> bitvec;

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

19

Principali operazioni su bitset

test(pos) // controlla se il bit pos è 1any() // controlla se qualche bit è 1none() // controlla se nessun bit è 1count() // conta quanti bit sono 1size() // conta quanti sono i bit[pos] // accedi al bit posflip(pos) // inverte il bit posset(pos) // mette a 1 il bit posreset(pos) // mette a 0 il bit pos

Page 11: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 11

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

20

Conversioni di oggetti bitset

üÈ possibile convertire oggetti bitset in altri tipi:® string con la funzione to_string()

® unsigned long con la funzione to_long()

üQueste conversioni sono utili per passare oggetti bitset a funzioni C o C++ pre-standard che non conoscono la classe bitset

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

21

Esempio uso classe bitset

#include <bitset>bitset<32> bitvec(0xFFFF); // crea un bitset di 32 bitbool is_set = bitvec.any();int count;if(is_set) // se c'è un bit a 1 conta quanti bit sono a 1

count = bitvec.count(); else

bitvec.flip(); // inverte tutti i bitfor(int i = 0; i<bitvec.size(); i++)

if(i % 2) // setta a 1 i bit di posizione pari bitvec.set(i);

elsebitvec.reset(i); // e a 0 gli altri

Page 12: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 12

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

22

Espressioni New e Deleteü Ad ogni programma è assegnata una porzione di

memoria utilizzabile in fase di esecuzioneü Per allocare la memoria si utilizza l'espressione new

int* pi = new int(10); // alloca un int e lo inizializza con 10

int* pia = new int[4];// alloca un vettore di interi con 4 elementi

ü Gli oggetti allocati dinamicamente non hanno nome e devono essere referenziati tramite puntatori

ü Per rilasciare la memoria dinamica si utilizza l'espressione delete

delete pi; //Cancella la memoria allocata a pidelete [] pia; //Cancella il vettore allocato a pia

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

23

Operazioni di Input/Output

ü Il C++ non prevede nessun operatore per effettuare operazioni di input/output® La libreria standard fornisce classi e operatori che permettono

di effettuare operazioni di input/output (iostream)

ü I dispositivi di input/output sono rappresentati dall'astrazione di flusso (stream) ® cin è un oggetto istream che identifica lo standard input® cout è un oggetto ostream che identifica lo standard output

ü L'operatore << inserisce un oggetto nel flusso di outputü L'operatore >> estrae un oggetto dal flusso di input

Page 13: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 13

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

24

Regole di Precedenza

ü La sintassi del C++ definisce delle regole di precedenza tra gli operatori che vengono utilizzate per valutare espressioni composte® un’espressione composta è valutata considerando prima gli

operatori con più alta precedenza, in ordine da sinistra a destra

6+3*4/2+2; // 6+((3*4)/2)+2 = 14while(ch = nextChar() != '\n') // che fa?

ü È possibile modificare l’ordine di valutazione degli operatori utilizzando le parentesi® una coppia di parentesi individua una sotto-espressione ® la valutazione di una sotto-espressione ha massima

precedenza

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

25

Regole di Associatività

ü Per ogni operatore è definito un livello di precedenza ed un tipo di associatività ® Associatività a destra o a sinistra

ü La regola di associatività specifica come viene interpretata un'espressione in cui compare più volte lo stesso operatore® Associatività a destra

i = j = k = 1; // (i = (j = (k = 1)))

i + j + k; // (i + j) + k)

® Associatività a sinistra

Page 14: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 14

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

26

Regole di Conversione di Tipo

üQuando in un’espressione sono presenti operandi di tipo diverso il programma deve operare delle conversioni di tipo

üUna conversione di tipo non provoca alterazioni nel contenuto della memoria® Modifica solo il tipo di un dato

üEsistono tre tipi di conversioni® Implicite, aritmetiche ed esplicite

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

27

Regole di Conversione Implicita

ü Le conversioni implicite sono eseguite automaticamente dal compilatore

ü Le conversioni implicite sono eseguite secondo regole dette conversioni standard

ü Il programma può introdurre proprie regole di conversione standard (ma non per i tipi predefiniti)

Page 15: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 15

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

28

Regole di Conversione Implicita

ü In un assegnamento si converte automaticamente l’R-value dell’operando destro al tipo dell’operando sinistro

ü Il tipo della variabile passata ad una funzione viene convertito nel tipo dell’argomento della funzione

ü Il tipo dell'oggetto restituito dal return è convertito nel tipo del risultato della funzione

ü Tutte queste conversioni sono realizzate con la creazione di variabili temporanee

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

29

Regole di Conversione Aritmeticaü Le conversioni aritmetiche garantiscono che gli

operandi di un operatore binario siano dello stesso tipo® Tutti gli operandi sono convertiti nel tipo

dell’operando più grande

ü Le regole sono® Ogni operando può essere solo promosso® Tutti gli operandi più piccoli di un int sono sempre promossi

ad int prima di essere valutati

ü Promuovere un operando char a int significa® Leggere il valore ASCII del char® Copiarlo in una variabile int temporanea

Page 16: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 16

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

30

Regole di Conversione Esplicitaü Viene effettuata attraverso l’operazione di cast

tipo_cast<tipo>(expr);® L'operazione di cast è pericolosa perché aggira il sistema di

controlli sui tipi del compilatore

ü Non tutti i cast sono sicuri® La conversione di un tipo in un tipo più piccolo è non sicura

perché tronca la rappresentazione del dato

ü Il compilatore non esegue mai automaticamente un cast non sicuro

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

31

Utilizzo dei Cast

üReferenziare puntatori generici (void)üEvitare delle conversioni inutili nella

valutazione di un’espressioneüScavalcare il controllo sui tipi predisposto

dal compilatoreüEliminare ambiguità nella valutazione di

un’espressione® se più conversioni implicite sono possibili il

compilatore non sceglie e segnala un errore di ambiguità

Page 17: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 17

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

32

Tipi di Cast

ü Il C++ standard distingue 4 diversi tipi di cast, a seconda dell'utilizzo® Solo per migliorare la leggibilità del codice

const_cast<T>(expr); // rende expr (non) costantestatic_cast<T>(expr); // trasforma il tipo di expr in Treinterpret_cast<T>(expr);

/* legge il pattern di bit all'indirizzo di expr come se fosse di tipo T */

dynamic_cast<T>(expr)/* implementa il run time type identification */

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

33

Cast C-styleü Nel C++ pre-standard esisteva un solo di tipo di cast

T (expr);(T) expr; // converte il tipo di expr a Tint (3.14); // tronca la parte decimale(short) 123456l;

// tronca la rappresentazione del numero

ü Per motivi di compatibilità, nello standard è ancora supportato questo tipo di cast, ma ne è deprecato l'uso

Page 18: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 18

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

34

Istruzioni

ü Un’istruzione è la più piccola unità di codice eseguibile di un programma C++® Ogni istruzione è caratterizzata da un ; come carattere finale

ü Un’istruzione composta è formata da più operazioni elementari® un’operazione composta è racchiusa tra {} e non è seguita dal ;

ü Un’istruzione composta può sostituire un’istruzione semplice

ü Un blocco è un’istruzione composta che contiene definizioni

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

35

Istruzioni di Dichiarazione

ü Dichiarano o definiscono una variabile® Possono comparire in qualunque punto del codice

ü Il C++ incoraggia a definire le variabili solo nel momento in cui servono® Evita di definire variabili non inizializzate® Evita inutili inizializzazioni® Consente di allocare memoria solo alle variabili realmente

utilizzate

ü È possibile definire variabili nella linea di controllo di un'istruzione di controllo del flusso® La variabile è visibile solo all'interno del blocco associato

all'istruzione

Page 19: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 19

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

36

Istruzioni di Controllo del Flusso

üL’ordine di esecuzione delle istruzioni di un programma è sequenziale, a partire dalla prima linea della funzione main()

üLe istruzioni di controllo del flusso servono a modificare l’ordine di esecuzione delle istruzioni del programma

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

37

if then else

ü L’if è un’istruzione condizionale che permette di scegliere tra al più due casi

if (expr) ist1;

else ist2;

ü Istruzioni di if annidate sono fonti di potenziali errori

– dangling else

® se expr è vera viene eseguita ist1, altrimenti viene eseguita ist2

® l'istruzione ist è eseguita solo se expr è vera

if (expr) ist;

Page 20: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 20

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

38

switchü Lo switch è un’istruzione condizionale che

permette di scegliere tra più casi

switch (expr) {case i:

ist-i;break;

case j:ist-j;break;

default:ist;

}

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

39

while

ü Il while è un’istruzione di ciclo

while (expr) ist;

®esegue ist fino a quando expr è vera

ü L’ordine di esecuzione è®1) valuta expr®2) se expr è vera esegui ist e torna ad 1®3) esegui la prossima istruzione

Page 21: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 21

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

40

for

ü Il for è un’istruzione di ciclofor( ist_iniz; expr1; expr2)

ist;

®esegue ist_iniz, quindi esegue ist e expr2 fino a quando expr1 è vera

ü L’ordine di esecuzione è® 1) esegui ist_iniz® 2) valuta expr1® 3) se expr1 è vera esegui prima ist, poi expr2 e torna a 2)® 4) esegui prossima istruzione

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

41

do while

ü Il do è un’istruzione di ciclo

®esegue ist fino a quando expr non diventa falsa®almeno una volta l’istruzione ist viene eseguita

ü L’ordine di esecuzione è® 1) esegui ist® 2) valuta expr® 3) se expr è vera torna a 1), altrimenti esegui prossima

istruzione

do ist;

while (expr);

Page 22: Espressioni e Operatori - INTRANET · 2002-05-21 · Lezione 4 Espressioni ed operatori Laboratorio di Algoritmi e Strutture Dati 2001/02 3 Laboratorio di Algoritmi e Strutture Dati

Lezione 4Espressioni ed operatori

Laboratorio di Algoritmi e Strutture Dati 2001/02 22

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

42

Salti

ü Le istruzioni di salto spostano il controllo del programma

ü Esistono tre istruzioni di salto® breakw interrompe il ciclo che si sta eseguendo

® continuew interrompe l’iterazione del ciclo che si sta eseguendo

® goto labelw salta incondizionatamente all’istruzione etichettata labelw label deve stare nella stessa funzione che contiene goto