Programmazione Procedurale in
Linguaggio C++
Elementi di Base
Parte 3
Istruzioni di Assegnazione
versione 2.0
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
G. Mecca – [email protected] – Università della Basilicata
Elementi di Base: Assegnazioni >> Sommario
Sommario
 Introduzione
 Istruzioni
di Assegnazione in C++
 Compatibilità tra i Tipi
 Espressioni in C++
Operandi e Operatori
Funzioni Predefinite
Valutazione delle Espressioni
G. Mecca - Programmazione Procedurale in Linguaggio C++
2
Elementi di Base: Assegnazioni >> Introduzione
Introduzione
 Assegnare
un valore ad una variabile
primo modo: istruzione di assegnazione
secondo modo: lettura del valore da un
dispositivo esterno (es: tastiera o file)
 Istruzioni
di assegnazione
funzionalità essenziale di ogni linguaggio
servono ad effettuare calcoli e a conservare i
risultati nelle variabili
G. Mecca - Programmazione Procedurale in Linguaggio C++
3
Elementi di Base: Assegnazioni >> Istruzioni di Assegnazione
Istruzione di Assegnazione in C++
 Due
elementi principali
variabile (parte sinistra)
espressione (parte destra)
 Esempio:
cerchio = raggio * raggio * pigreco;
 Intuitivamente:
calcola il valore dell’espressione e lo
assegna alla variabile
G. Mecca - Programmazione Procedurale in Linguaggio C++
4
Elementi di Base: Assegnazioni >> Istruzioni di Assegnazione
Istruzione di Assegnazione
 Sintassi
<nomeVariabile> = <espressione>;
 Dove
<nomeVariabile> è un identificatore
= è l’operatore di assegnazione
<espressione> è una formula per il calcolo di
un valore (>>)
G. Mecca - Programmazione Procedurale in Linguaggio C++
5
Elementi di Base: Assegnazioni >> Istruzioni di Assegnazione
Istruzione di Assegnazione
 Semantica
attenzione: il simbolo di uguale non deve
essere inteso come un simbolo di equazione
l’istruzione ha una precisa semantica
 Semantica
“operazionale”
descrive le operazioni effettuate dal
processore per eseguire l’istruzione
per interpretare le istruzioni è necessario
attenersi alla semantica operazionale
G. Mecca - Programmazione Procedurale in Linguaggio C++
6
Elementi di Base: Assegnazioni >> Istruzioni di Assegnazione
Istruzione di Assegnazione
 Semantica
“operazionale”
dell’assegnazione
viene calcolato il valore dell’espressione a
partire dai valori delle costanti e delle variabili
se il valore risultante è compatibile con il tipo
della variabile, viene assegnato alla variabile
(ovvero: il valore viene scritto nello spazio di
memoria associato alla variabile)
altrimenti si genera un errore
G. Mecca - Programmazione Procedurale in Linguaggio C++
7
Elementi di Base: Assegnazioni >> Istruzioni di Assegnazione
Istruzione di Assegnazione
 Esempi:
int
b =
a =
a =
b =
a, b, c;
1;
b * 3;
a + 1;
c ; // *nb*
Memoria RAM
...
#1000
a
129384
34
#1001
b
234
1
56321
#1002
c
56321
#1003
#1004
...
ATTENZIONE: dopo aver cambiato il valore di b con b=c
il valore di a NON cambia
G. Mecca - Programmazione Procedurale in Linguaggio C++
8
Elementi di Base: Assegnazioni >> Compatibilità tra i Tipi
Compatibilità tra i Tipi
 Caso
a
il tipo del risultato dell’espressione è lo
stesso della variabile
es: int a, b;
b = 10;
a = b * 12 - 34;
es: float a, b;
b = 10.1;
a = b * 12.0 / 34;
G. Mecca - Programmazione Procedurale in Linguaggio C++
9
Elementi di Base: Assegnazioni >> Compatibilità tra i Tipi
Compatibilità tra i Tipi
 Caso
b
il tipo del risultato dell’espressione è diverso
dal tipo della variabile
i due tipi sono tipi numerici (interi o reali)
 In
questo caso
avviene una conversione implicita del valore
dell’espressione
l’assegnazione viene effettuata comunque
G. Mecca - Programmazione Procedurale in Linguaggio C++
10
Elementi di Base: Assegnazioni >> Compatibilità di Tipi
Conversione dei Valori Numerici
 Il
valore dell’espressione è convertito nel
tipo della variabile
 Due possibili tipi di conversione
Troncamento: conversione da un tipo più
generale ad un tipo meno generale
es: valore float per variabile intera
Ampliamento: caso contrario
es: valore intero per variabile float
G. Mecca - Programmazione Procedurale in Linguaggio C++
11
Elementi di Base: Assegnazioni >> Compatibilità tra i Tipi
Esempi
 Troncamento
int a;
a = 2.32;
a = .12e+4;
// il valore di a è 2
// il valore di a è 1200
 Ampliamento
float c; double d;
c = 10;
// il valore di c è 0.1E+2
d = 1;
// il valore di d è 0.1E+1
G. Mecca - Programmazione Procedurale in Linguaggio C++
12
Elementi di Base: Assegnazioni >> Espressioni
Espressioni in C++
 Formule
per il calcolo di un valore
composte di operandi e operatori
 Operandi
costanti
variabili
 Operatori
operatori predefiniti
funzioni predefinite
G. Mecca - Programmazione Procedurale in Linguaggio C++
13
Elementi di Base: Assegnazioni >> Espressioni
Espressioni
 Supponendo
int a, b;
const float pigreco = 3.14;
 Esempi
di espressioni
a + b * 34 + pigreco
a + exp(b)/12
a
18
pigreco
G. Mecca - Programmazione Procedurale in Linguaggio C++
ATTENZIONE:
stiamo facendo esempi
di espressioni, non di
istruzioni complete
14
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Predefiniti
 Operatori
aritmetici
tipo intero
tipo reale
 Operatori
booleani
tipo bool
 Operatori
di confronto
per tutti i tipi
G. Mecca - Programmazione Procedurale in Linguaggio C++
15
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori aritmetici
 Tipo
Intero
 operatori: +, - , *
 operatore / (divisione intera), % (modulo)
 Operandi
e risultato di tipo intero
 esempio:
int
j =
i =
j =
i,j;
i + 1;
22 / 6; // NOTA: i è uguale a 3
22 % 6 // j è uguale a 4
G. Mecca - Programmazione Procedurale in Linguaggio C++
16
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori aritmetici
 Tipo
Reale
 operatori: +, - , *, /
 Operandi
e risultato di tipo reale
 esempio:
float x,y;
x = y * 3.14 + 0.33e+2;
y = 22.0 / 6.0; //NOTA: y vale 3.66667
y = 22.0 / 6;
//NOTA: y vale 3.66667
G. Mecca - Programmazione Procedurale in Linguaggio C++
17
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori aritmetici
 Due
operatori particolari su interi e reali
 ++ incremento; a++ coincide con a = a+1
 -- decremento; a-- coincide con a = a-1;
 Esempio:
float x;
x = 1; y
x++; //
y--; //
int y;
= 2;
equivalente a x = x + 1
equivalente a y = y - 1;
G. Mecca - Programmazione Procedurale in Linguaggio C++
18
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori aritmetici
 Altre
forme di assegnazione compatta
+= a+=b coincide con a = a+b
-= a-=b coincide con a = a-b
*= a*=b coincide con a = a*b
/= a/=b coincide con a = a/b
 Esempio:
float x; int y;
x = 1; y = 2;
x += y; // equivalente a x = x + y
G. Mecca - Programmazione Procedurale in Linguaggio C++
19
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Booleani
 Operatori
su valori di tipo bool
servono a combinare valori vero/falso
 Operatore AND:
&&
vero se entrambi gli operandi sono veri
 Operatore
OR: ||
vero se almeno uno degli operandi è vero
 Operatore
NOT: !
vero se l’unico operando è falso
G. Mecca - Programmazione Procedurale in Linguaggio C++
20
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Booleani
 Utilizzo
nella verifica di “condizioni”
strutture di controllo (>>)
 Per
descrivere i risultati degli operatori
booleani, si utilizzano le tabelle di verità
risultato dell’operatore in corrispondenza di
tutti i possibili valori degli operandi
G. Mecca - Programmazione Procedurale in Linguaggio C++
21
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Booleani
 Tabella
di verità dell’operatore && (AND)
op1
op2
op1 && op2
false
false
false
false
true
false
true
false
false
true
true
true
G. Mecca - Programmazione Procedurale in Linguaggio C++
22
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Booleani
 Tabella
di verità dell’operatore || (OR)
op1
op2
op1 || op2
false
false
false
false
true
true
true
false
true
true
true
true
G. Mecca - Programmazione Procedurale in Linguaggio C++
23
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori Booleani
 Tabella
di verità dell’operatore ! (NOT)
op1
!op1
false
true
true
false
G. Mecca - Programmazione Procedurale in Linguaggio C++
24
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori di confronto
 Operatori:
==, !=, >, >=, <, <=
confrontano due operandi di tipo compatibile
restituiscono un valore booleano
 Supponendo
int a, b; float p1, p2;
a = 1; b = 2; p1 = 3.41; p2 = 5.0
Le seguenti sono espressioni valide:
a == b
a != b
p1 >= p2
// restituisce false
// restituisce true
// restituisce false
G. Mecca - Programmazione Procedurale in Linguaggio C++
25
Elementi di Base: Assegnazioni >> Espressioni >> Operatori
Operatori di confronto
 L’ordinamento
tra i valori alfanumerici è
basato sui codici ASCII
lessicografico (cifre, maiuscole, minuscole)
 Supponendo:
char let1, let2, let3;
let1 = ‘c’; let2 = ‘V’; let3 = ‘A’;
Le seguenti sono espressioni valide:
let1 < let2
let3 < let2
let1 < ‘2’
// restituisce false
// restituisce true
// restituisce false
G. Mecca - Programmazione Procedurale in Linguaggio C++
26
Elementi di Base: Assegnazioni >> Espressioni >> Funzioni Predefinite
Funzioni Predefinite
 Funzioni
ad argomenti interi e risultato
intero
valore assoluto di x: abs(x)
 Esempio
int num = - 3;
int x;
x = abs(num);
// x vale 3
G. Mecca - Programmazione Procedurale in Linguaggio C++
27
Elementi di Base: Assegnazioni >> Espressioni >> Funzioni Predefinite
Funzioni Predefinite
 Funzioni
ad arg. numerici e risultato reale
radice quadrata di x: sqrt(x)
valore assoluto di x: fabs(x)
elevamento a potenza xy : pow(x,y)
esponenziale ex: exp(x)
seno di x: sin(x)
coseno di x: cos(x)
arcotangente di x: atan(x)
G. Mecca - Programmazione Procedurale in Linguaggio C++
28
Elementi di Base: Assegnazioni >> Espressioni >> Valutazione
Valutazione delle Espressioni
 Determinare
il valore di una espressione
regole complesse
 Bisogna
tenere in conto
Precedenza degli operatori
Associatività degli operatori
Utilizzo delle parentesi
Conversione implicita di tipo
G. Mecca - Programmazione Procedurale in Linguaggio C++
29
Elementi di Base: Assegnazioni >> Espressioni >> Valutazione
Precedenza degli Operatori
Funzioni predefinite, NOT booleano !, ++, - Operatori moltiplicativi: *, /, %
 Operatori additivi: +,  Operatori di relazione: <, >, <=, >=
 Operatori di uguaglianza-disuguaglianza: ==, !=
 AND booleano: &&
 OR booleano: ||
 Assegnazione: =

G. Mecca - Programmazione Procedurale in Linguaggio C++
30
Elementi di Base: Assegnazioni >> Espressioni
Valutazione delle Espressioni
 Associatività
gli operatori con lo stesso livello di
precedenza vengono valutati normalmente
da sinistra verso destra
esistono operatori associativi a destra
 Utilizzo
delle parentesi
le parentesi alterano l’ordine di valutazione
attenzione: solo parentesi tonde
es: a + b + c rispetto ad a + (b + c)
G. Mecca - Programmazione Procedurale in Linguaggio C++
31
Elementi di Base: Assegnazioni >> Espressioni
Valutazione delle Espressioni
 In
concreto
le regole sono difficili da ricordare
 Regola
ATTENZIONE:
solo parentesi
tonde
pragmatica
utilizzare sempre le parentesi per essere
sicuri dell’ordine di valutazione
 Esempio
annoCorso == 1 && matricola > 15687
(annoCorso == 1) && (matricola > 15687)
((annoCorso == 1) && (matricola > 15687))
G. Mecca - Programmazione Procedurale in Linguaggio C++
32
Elementi di Base: Assegnazioni >> Espressioni
Espressioni: Esempi
ATTENZIONE
errore frequente
Il compilatore stampa un avviso
int i, j, k;
Warning W8060 H:\tmp\expr.cpp 16:
bool b;
Possibly incorrect assignment in function main()
float f;
i = 3; j = 7;
k vale 48
k = (i * 17) – ((193 % 19) * exp(0));
k vale 127
k = ((4 / i) * 127) / cos(0);
b vale false
b = (i + j) < 10;
b = ((i < j) || (i == 7)) && (j != 10); b vale true
b = (i = 7) && (i > 2);
b vale true
b = (i == 7) && (i > 2);
b vale false
f vale 3
f = (i + j) / 3;
f vale 3.3333
f = (i + j) / 3.0;
G. Mecca - Programmazione Procedurale in Linguaggio C++
33
Elementi di Base: Assegnazioni >> Sommario
Riassumendo
 Istruzioni
di assegnazione
<variabile> = <espressione>
semantica “operazionale” (ATTENZIONE)
compatibilità tra tipi (ATTENZIONE)
 Espressioni
operandi
operatori
funzioni predefinite
G. Mecca - Programmazione Procedurale in Linguaggio C++
34
Elementi di Base: Assegnazioni >> Un Semplice Programma
Un Semplice Programma
// Calcolo della superficie del cerchio
#include <iostream.h>
void main() {
// Dichiarazioni
const float pigreco=3.14;
int raggio;
float cerchio, circonf;
// Operazioni
cout << “Immetti la lungh. del raggio” << endl;
cout << “(deve essere un numero intero)” << endl;
cin >> raggio;
cerchio = raggio*raggio*pigreco;
circonf = 2*pigreco*raggio;
cout << “La circonferenza misura: “ << circonf << endl;
cout << “Il cerchio ha superficie: “ << cerchio << endl;
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
>>
35
Ringraziamenti
Ringraziamenti

Parte del materiale di questa lezione è stato sviluppato con la
collaborazione della Dott.ssa Maria Samela
([email protected]), a cui va il mio ringraziamento.
G. Mecca - Programmazione Procedurale in Linguaggio C++
36
Termini della Licenza
Termini della Licenza

This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California
94305, USA.

Questo lavoro viene concesso in uso secondo i termini della
licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere
una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una
lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
G. Mecca - Programmazione Procedurale in Linguaggio C++
37
Scarica

Programmazione Procedurale in Linguaggio C++