Espressioni con effetti collaterali

Documenti analoghi
Valutazione di espressioni

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Strutture. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Linguaggio C: Espressioni

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Cap. 4: Espressioni. Operatori

Corso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato

Tipi di dato primitivi

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

IL LINGUAGGIO C TIPI DI DATO

Espressioni ed operatori in C

Espressioni. Espressioni. Valutazione di un espressione. Espressioni semplici

Costanti e Variabili

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Verso i puntatori: Cosa è una variabile?

Programmazione in Java (I modulo)

LINGUAGGI DI PROGRAMMAZIONE!

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

Istruzioni iterative (o cicliche)

5. Tipi di dato ed espressioni. Andrea Marongiu Paolo Valente

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Sintassi. Logica. Sintassi di Matita. Claudio Sacerdoti Coen. Universitá di Bologna 16,18/10/2017. Claudio Sacerdoti Coen

Programmazione Procedurale in Linguaggio C++

direttive del preprocessore simboli speciali parole chiave identificatori costanti

La programmazione strutturata

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Gli Operatori. Università degli Studi di Brescia

Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

IL PROBLEMA DEL PROGETTO

Laboratorio di informatica Ingegneria meccanica

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Introduzione al linguaggio C Puntatori

Fondamenti di Informatica T-1

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Conversioni fra Tipi di Dati. Luca Abeni

$QDOLVLGHOSURJUDPPDTXDGUDWR

Linguaggio C - sezione dichiarativa: costanti e variabili

Espressione di chiamata di funzione

Puntatori. Fondamenti di Programmazione

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Lab 02 Tipi semplici in C

CORSO DI PROGRAMMAZIONE

Tipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Il linguaggio C. Puntatori e Array

Linguaggio C Espressioni e operatori

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Lezione 6 Introduzione al C++ Mauro Piccolo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Foglio Elettronico Lezione 1

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

1 PANORAMICA SUL LINGUAGGIO C

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Laboratorio di Calcolo Linguaggi di programmazione

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

Problemi, algoritmi, calcolatore

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Le basi del linguaggio Java

Espressione composta da: Operatori Operandi (costanti, variabili, )

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Sistemi di Numerazione

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

STRUTTURE DI CONTROLLO DEL C++

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Esonero di Informatica I. Ingegneria Medica

Laboratorio di Programmazione M-Z

EXCEL software Excel .xlxs, La cella intestazione della colonna intestazione di righe l indirizzo della cella testo numeri formule

C: panoramica. Violetta Lonati

Pensiero computazionale. Lezione 3 Istruzioni condizionali Eventi, messaggi Variabili

Programmazione in Python. Moreno Marzolla

Programmazione web lato client con JavaScript. Marco Camurri 1

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

La programmazione nel linguaggio C

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

per costruire specifici componenti software

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.

Istruzioni iterative. Istruzioni iterative

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Strutture di controllo decisionali

Corso di Fondamenti di Programmazione canale E-O. Un semplice programma C p.23. Introduzione

Introduzione ai puntatori in C Definizione

Lezione 7 Alberi binari: visite e alberi di ricerca

Programmazione. Valerio Perticone, Sergio Perticone

Reti combinatorie. Reti combinatorie (segue)

17/10/16. Espressioni Booleane

Il concetto di calcolatore e di algoritmo

Fondamenti di Programmazione. Sistemi di rappresentazione

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Programmazione Procedurale in Linguaggio C++

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Transcript:

Espressioni con effetti collaterali Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Operatore di assegnamento In C l assegnamento (=) è un operatore, e quindi ha un valore che è il valore dell espressione a destra di = Esempio: i = 5 vale 5 b = (i > 7) vale falso Quindi si può assegnare un assegnamento: l1 = l2 = 5; L assegnamento è associativo a destra: l1 = (l2 = 5); prima si esegue l2 = 5; poi si esegue l1 = valore di (l2 = 5) ;, che è 5 Oltre al valore, l assegnamento ha un effetto collaterale (side effect): modifica il valore dell operando a sinistra di = L effetto collaterale ha luogo dopo la valutazione dell espressione Stefano Ferrari Programmazione a.a. 2016/17 1

Assegnamento e uguaglianza È facile confondere uguaglianza logica (==) con assegnamento (=) i = 1; b = (i == 4); b vale false (cioè 0), perché i vale 1 i = 1; b = (i = 4); b vale 4, che viene interpretato come true, e anche i vale 4 Poiché l assegnamento ha un valore convertibile in valore logico, il compilatore non segnala errori Assegnamento composto L assegnamento si può comporre con gli operatori aritmetici variabile += espressione variabile = variabile + (espressione) variabile -= espressione variabile = variabile - (espressione) variabile *= espressione variabile = variabile * (espressione) variabile /= espressione variabile = variabile / (espressione) Si notino le parentesi: 1. si valuta l espressione 2. si esegue l operazione sui valori della variabile e dell espressione 3. si assegna il risultato alla variabile Esempio: i += j * k significa i = i + (j * k) i *= j + k significa i = i * (j + k) Stefano Ferrari Programmazione a.a. 2016/17 2

Incremento e decremento L operatore ++ (incremento) incrementa di 1 una variabile intera L operatore -- (decremento) decrementa di 1 una variabile intera Si possono usare prefissi (++i e --i) o postfissi (i++ e i--) se prefissi, eseguono l operazione subito se postfissi, la eseguono per ultima prima dell istruzione seguente l2 = ++l1; l2 = l1++; incrementa l1 assegna l2 = l1 assegna l2 = l1 incrementa l1 l1 vale l2 l1 vale l2+1 È pericoloso usarli in espressioni composte Tabella delle priorità Priorità alta! ++ -- - (unario) * / % + - (binario) > >= < <= ==!= && Priorità bassa = Stefano Ferrari Programmazione a.a. 2016/17 3

Esempi regolari Supponiamo di avere dichiarato e inizializzato alcune variabili intere int a, b, c, d, e, f; a = 1; b = 2; c = 3; d = 4; e = 5; Valutiamo alcune espressioni composte d = a * b / c; d = 1 * 2 / 3; d vale 0 d = ++a * b - c; d = 2 * 2-3; d vale 1, a vale 2 e = 5 + c * d / e; e = 5 + 3 * 4 / 5; e vale 7 (non 5!) e = 30 / e++ + 29 % c; e = 30 / e++ + 29 % c; e vale 9 (non 7!) Esempi regolari (2) Supponiamo di avere dichiarato e inizializzato alcune variabili intere int a, b, c, d, e, f; a = b = c = d = e = 2; f = 1; Valutiamo l espressione a = b += c++ - d + --e / -f; a = b += 2-2 + 1 / -1; a = 1 a vale 1, b vale 1, c vale 3, e vale 1 le altre variabili sono invariate Stefano Ferrari Programmazione a.a. 2016/17 4

Esempi problematici L ordine di valutazione degli operandi può influire sul valore e sull effetto collaterale dell espressione (b = a + 2) - (a = 1) La valutazione cortocircuitata (interrompere la valutazione appena determinato il valore dell espressione) può influire sul valore e sull effetto collaterale dell espressione c = (a = 1) (b = 2) Lo standard C lascia libertà su questi punti, consentendo comportamenti indefiniti a priori Perché lo fa? Istruzioni In C un istruzione è qualsiasi espressione terminata da ; Esempio: questa istruzione valuta i, somma 1 al risultato e lo getta via i+1; A che scopo consentire questa stranezza? Affinché la parte esecutiva di un blocco abbia una struttura regolare manipolabile meccanicamente dal compilatore, cioè sia una sequenza di istruzioni semplici, composte da espressione e ; blocchi, a loro volta con la stessa struttura In pratica, è ragionevole che ogni istruzione abbia un effetto collaterale (e che ne abbia uno solo) Stefano Ferrari Programmazione a.a. 2016/17 5

Istruzioni, direttive, dichiarazioni In C, istruzione è tutto e solo ciò che termina con ; Le direttive non sono istruzioni! vengono trattate dal precompilatore e non dal compilatore il processore non le vede nemmeno Le dichiarazioni di variabili e di procedure sono istruzioni! aggiungono righe alla tabella dei simboli, per poterli usare in seguito indicano al processore quanta memoria riservare per le variabili e per i dati e i risultati delle procedure Stefano Ferrari Programmazione a.a. 2016/17 6