Storia del C e C++
‰ Linguaggio C
 1972, nato come evoluzione
l
di
d due
d linguaggi
l
Fondamenti di Informatica
9 BCPL e B
– Lingaggi senza nozione di “tipo
tipo di dati”
dati

C++: Introduzione
Introduzione,, Tipi di Dato Fondamentali,
Fondamentali, Variabili


Dennis Ritchie (Bell Laboratories)
Linguaggio di sviluppo di Unix
Indipendente dall’Hardware
9 Portabilità
Prof. Francesco Lo Presti


1989: standard approvato
1990: pubblicato standard ANSI e ISO
9 ANSI/ISO 9899: 1990
Storia del C e C++
2
C++: Introduzione
4
Un Primo Esempio
‰ Linguaggio C++
 Inizio anni ‘80:
‘
Bjarne Stroustrup (Bell
( ll Laboratories))
 Estensione del C
 Fornisce funzionalità per la programmazione orientata
agli oggetti
// Programma di Esempio
Hello, World!
#include <iostream>
using namespace std;
9 Oggetti: componenti software riusabili
– Modellano entità
à del mondo reale
9 Programmi objectobject-oriented
g
stile di programmazione
p g
– Migliore
– Facilità nel modificare/correggere programmi

C++: Introduzione
int main(( ) {
cout << "Hello, World!\n";
return 0;
}
Linguaggio--Ibrido
Linguaggio
9 Si può
ò usare uno stile
til CC-like
lik
9 Si può usare uno stile ObjectObject-oriented
possono usare entrambi gli
g stili
9 Si p
C++: Introduzione
3
Un Primo Esempio
// Programma di Esempio
#include <iostream>
using namespace std;
int main(( ) {
cout << "Hello, World!\n";
return 0;
Un Primo Esempio
// Programma di Esempio
Righe che iniziano con // vengono
considerate righe di commento.
commento Non
hanno nessun effetto sul programma
#include <iostream>
Direttive. Le frasi che iniziano con il
simbolo
b l cancelletto
ll
(#) sono direttive
d
per il preprocessore del compilatore. La
direttiva include richiede l’inclusione del
file iostream.h che contiene le
di hi
dichiarazioni
i id
delle
ll operazioni
i i basilari
b il i di
I/O definite nella libreria standard
using namespace std;
int main(( ) {
cout << "Hello, World!\n";
return 0;
La funzione main e’
e il punto da cui inizia
l’esecuzione di un programma C++
}
main( ) restituisce un valore intero
istruzioni
C++: Introduzione
1.
Scrittura del programma

Codice
d
sorgente
2. Compilazione del codice sorgente
 File
Fil oggetto
tt
Stringa: una sequenza di caratteri
racchiusi tra virgolette “”
Ogni istruzione termina con un
punto e virgola ;
Costante numerica (intero)
}
Le Fasi della Programmazione
L’effetto dell’operatore << e’ quella di
inserire una sequenza di caratteri
(“Hello, World!\n”) nel flusso.
newline – andare a capo
return X fa terminare la funzione e
restituisce il valore X
tipo restituito nome funzione (lista arg) {
cout e’ il flusso standard di output del
C++ (di solito indirizzato allo schemo).
schemo)
\n: Escape Sequence
}
Definizione di funzione:
I nomi del programma appartengono allo
spazio dei nomi std
5
// Programma di Esempio
Costante stringa
C++: Introduzione
6
Ambiente Integrato di Programmazione
#i l d <iostream>
#include
i t
using namespace std;
‰ IDE (Integrated Development Environment)
 Ambiente per lla stesura, compilazione
l
e debugging
d
di
d
programmi
int main()
{
cout << "Hello, World!\n";
return 0;
}
3. Collegamento (linking)
 “Collega”
Collega il codice oggetto con il codice delle librerie
9 Librerie contengono il codice delle funzioni invocate dal
programma

Codice eseguibile
4. Caricamento ed Esecuzione
Codice
Sorgente
Compilatore
Programma
Oggetto
Librerie
Linker
Programma
Eseguibile

C++: Introduzione
7
Useremo DEVDEV-Cpp (disponibile anche sul sito del corso)
C++: Introduzione
8
…oppure
1.
…oppure
Scrivere il codice usando un semplice editor di
t t
testo

2. Compilare il file sorgente da linea di comando
g++ -o hello hello.cpp
E.g., Blocco Note
C++: Introduzione
9
C++: Introduzione
…oppure
Errori
3. Eseguire il programma da linea di comando
‰ Errori di Sintassi: Errori a tempo di compilazione
 Ill codice
d
sorgente viola
l le
l regole
l di
d sintassi
hello
10
// Programma di Esempio
#include <iostream>
using namespace std;
int main( ) {
cout << "Hello, World!\n ;
return 0
}
C++: Introduzione
11
C++: Introduzione
12
Errori
Inizio
Il Ciclo ModificaModifica-Compila
Compila--Debug
Modifica del
Programma
‰ Errori Logici: Errori a tempo di esecuzione
 Ill programma non svolge
l ill compito desiderato
d d
// Programma di Esempio
Compilazione
#include <iostream>
Errori di
Compilazione
using namespace std;
int main( ) {
Test del
Programma
cout << "Hell, World!\n”;
return 0;
}
Errori a
runtime
C++: Introduzione
Un Programma che Elabora Numeri
#include <iostream>
using namespace std;
FineC++: Introduzione
13
14
Un Programma che Elabora Numeri
#include <iostream>
Total value = 1.23
using namespace std;
int main()
int main()
{
{
Di hi
Dichiarazione
i
di variabili
i bili
int pennies = 8;
int pennies = 8;
int dimes = 4;
int dimes = 4;
quarters = 3;
int q
quarters = 3;
int q
Operatore di assegnazione
double total = pennies * 0.01 + dimes * 0.10
double total = pennies * 0.01 + dimes * 0.10
Costante numerica (virgola mobile)
+ quarters * 0
0.25;
25; /* valore totale delle monete */
+ quarters * 0
0.25;
25; /* valore totale delle monete */
cout << "Total value = " << total << "\n";
cout << "Total value = " << total << "\n";
return 0;
return 0;
}
}
Sintassi alternativa per i commenti
/* commento */
C++: Introduzione
15
C++: Introduzione
16
Costanti
Costanti
‰ Una costante è una qualsiasi espressione che ha un
‰ Caratteri
valore
l
prefissato
fi t

‘x’, ‘T’,’1’
‰ Stringhe
“Salve gente”, “Hello, World”, “”, “x”
Numeri interi, Numeri in virgola mobile, Caratteri,
Stringhe
‰ Numeri Interi
 Decimali:
 Esadecimali
9 Si premette 0x
75
75
-23
23
-23
23
0x4b
75
‰ I letterali che rappresentano caratteri sono
racchiusi da carattere apice (‘)
‰ Sequenze di letterali che rappresentato stringhe
sono racchiusi da tra due caratteri doppio apice (“)
‰ Numeri
N
i in
i virgola
i
l mobile
bil
 Numeri con parte frazionaria e/o fattore esponenziale
3.1456
3.1456
6.02e23
6.02·1023
1.6e-19
1.6·10-19
Variabili
‰ Le variabili sono spazi di
memoria,
i id
identificati
tifi ti d
da un nome
nome,,
che possono conservare valori di
un determinato tipo
‰ Ciascuna variabile deve essere
definita indicandone tipo e nome
‰ Una variabile puo’ contenere
soltanto valori del suo stesso
pennies
i
tipo
dimes
‰ Nella definizione di una variabile,
variabile,
qu rt rs
e’ possibile assegnarle un valore quarters
iniziale
total
C++: Introduzione
17
C++: Introduzione
18
I Nomi delle Variabili
…
int pennies = 8;
‰ Identificatore
Identificatore:: sequenza di lettere, numeri e simbolo di
int dimes = 4;
sottolineatura “_”
int quarters = 3;

…
Deve iniziare con una lettera
9 5pennies non va bene
Memoria

Non puo’’ essere una parola
l o simbolo
b l riservato del
d l linguaggio
l

Non p
puo’ contenere spazi
p
9 return non va bene
9 Pen nies non va bene
‰ Nomi validi
8

4

3
‰ Case
C
sensitive:
i i
maiuscole
i
l e minuscole
i
l vengono considerate
id
diverse
1.23
C++: Introduzione
pippo,
pippo pluto,
pluto ciao5,
ciao5 salve_a_tutti
salve a tutti
E’ bene scegliere nomi che descrivano adeguatamente il
contenuto della variabile

19
Pippo
pp e pippo
p pp sono due variabili diverse
C++: Introduzione
20
Dichiarazione di variabili
Dichiarazione di variabili
‰ Prima di usare una variabile occorre dichiararla
‰ Una volta dichiarate le variabili possono essere
specificando
ifi
d a quale
l tipo
ti di d
dato
t essa appartenga
t
‰ Sintassi
usate
t nell programma all’interno
ll’i t
d
dell lloro campo di
validita’ (scope)

nomeTipo nomeVariabile;
‰ E’ possibile dichiare piu’ variabili
nomeTipo
p nomeVariabile = espressione
p
;
‰ Definire una nuova variabile
contemporaneamente indicando una sola volta il
tipo
nomeVariabile, di tipo
nomeTipo nomeVariabile1, …, nomeVariabileN;
nomeTipo
Ti , ed
d eventualmente
t l
t assegnarle
l il valore
l
…
iniziale espressione

Altrimenti la variabile
ha un valore iniziale
indefinito
nomeTipo nomeVariabile1=espressione1, …, nomeVariabileN=espressioneN;
int pennies = 8;
…
int dimes = 4;
int pennies = 8, dimes = 4, quarters = 3;
int quarters = 3;
double total = pennies * 0.01 + dimes * 0.10
double total = pennies * 0.01
0 01 + dimes * 0.10
0 10
+ quarters * 0.25; /* valore totale delle monete */
+ quarters * 0.25; /* valore totale delle monete */
…
Tratteremo questo aspetto in seguito
C++: Introduzione
…
21
L’Assegnazione
C++: Introduzione
22
L’Assegnazione
‰ Abbiamo visto come i programmi usino le variabili
#include <iostream>
per memorizzare
i
i valori
l i da
d elaborare
l b
e i risultati
i lt ti
dell’elaborazione
‰ Le variabili sono posizioni in memoria che possono
conservare valori di un determinato tipo
‰ Il valore memorizzato in una variabile puo’
puo essere
inizializzato,, ma anche modificato durante
inizializzato
programma
g
l’esecuzione di un p
‰ Il cambiamento del valore di una variabile si
ottiene con un enunciato di assegnazione
using namespace std;
int main()
{
int pennies = 8;
double total= pennies*0.01;
totall viene definito
d f
ed
d
inizializzato
int dimes = 4;
total=total+ dimes * 0.10;
total viene modificato
int quarters = 3;
total=total+ quarters * 0
0.25;
25;
cout << "Total value = " << total << "\n";
return 0;
}
C++: Introduzione
23
C++: Introduzione
24
L’Assegnazione
L’Assegnazione
‰ Sintassi
…
nomeVariabile = espressione;
total=total+ quarters * 0.25;
…
…
Calcola
Memoria
total=total+ quarters * 0.25;
total+ quarters
total
1.23
. 3 * 0.25
0. 5
…
espressione e memorizza il
risultato nella posizione di memoria assegnata alla
variabile nomeVariabile
‰ L’assegnazione
L’
i
è un particolare
ti l
tipo
ti di espressione
i
‰ Calcola il valore di
pennies
i
8
dimes
4
quarters
qu
rt rs
3
total
C++: Introduzione
M
Memorizza
i
il
risultato in total
1.23
0.48
25
C++: Introduzione
Assegnazione o Dichiarazione?
Costanti Definite (#define)
‰ Non confondere la dichiarazione di una variabile
‰ E’ possibile usare la direttiva #define del
26
preprocessore per dare un nome ad una costante
con un enunciato
i t di assegnazione
i
#define id_costante
double total=pennies*0.01;
costante
‰ Ovunque viene usato l’identificatore
l identificatore, il
…
preprocessore provvederà a sostuirlo con la
costante
total=total+ quarters * 0.25;
#define PI 3.14142
‰ La dichiarazione specifica il tipo, l’assegnazione no
‰ Una variabile puo’:
 essere definita una volta sola
 Essere
Ess
aggiornata
i n t qu
quante
nt volte
lt si vuole
u l
…
…
double raggio=1;
double raggio=1;
double area=raggio*raggio*PI;
double area=raggio*raggio*3.14142;
‰ #define non è una istruzione C++ ma una direttiva
per il preprocessore
C++: Introduzione
27
C++: Introduzione
28
Costanti Dichiarate
Comunicazione da Console
‰ Usando il prefisso const si possono dichiarare delle
‰
costanti appartenenti ad un determinato tipo
esattamente allo stesso modo in cui si dichiarano le
variabili;
‰
La console è l’interfaccia
l’interfaccia base
del calcolatore
Composta da:

…

Tastiera: unità standard di
Tastiera:
input
Video:: unità standard di output
Video
const double lire_per_euro=1937,26;
double valore_in_euro=15,36;
double valore_in_lire=valore_in_euro*lire_per_euro;
…
‰ Sintassi const nome_tipo nome_variabile=espresssione
‰ Costanti
C st nti dichiarate
dichi r t sono
s n delle
d ll variabili
v ri bili il cui vvalore
l r
non può essere modificato

devono p
pertanto essere inizializzate al momento della
loro creazione
C++: Introduzione
29
Comunicazione da Console
‰
1.
2.
‰
Sono
S
d
definiti
fi iti iinoltre
lt altri
lt i d
due
flussi – cerr e clog – il cui scopo
è quello di segnalare eventuali
messaggi di errore
30
Output (cout)
C++ le operazioni di input ed
output
p di un programma
p g
vengono gestire da due flussi di
dati (stream
(stream):
):
cin per l’input
l’input (normalmente
assegnato
t alla
ll tastiera)
t ti
)
cout per l’output
l’output (normalmente
diretta al video)

C++: Introduzione
‰ In C++ l’output
l’output si effettua applicando l’operatore
di inserimento
i
i
t << all flusso
fl
cout.
cout
t.
‰ << inserisce il valore alla sua destra nel flusso di
dati alla sua sinistra

Costante Stringa
cout << “Frase
Frase di output
output”;;
Programma
C++

cout << 120;;
Usando questi due flussi un
programma può interagire con
un utente mostrando messaggi
sullo schermo e ricevendo
l’input da parte dell’utente dalla
tastiera

31
120
Variabile
cout << x;
C++: Introduzione
Frase di output
Costante Numero
valore di x
C++: Introduzione
32
Output (cout)
Input (cin)
‰ L’operatore di inserzione << può essere usato più
‰ In C++ l’input
l’input si effettua applicando l’operatore di
estrazione >> al flusso cin
cin.. L
L’operatore
operatore deve essere
seguito dalla variabile in cui si deve memorizzare il
valore da leggere
volte
lt nella
ll stessa
t
frase
f
cout << “Salve” << “ a “ << “tutti”;
Salve a tutti
‰ Si
Sintassi
t i
cout << espr. 1 << … << espr. n ;
int numero
cin >> numero;
‰ Per
P andare
d
a capo bisogna
b
inserire nell flusso
fl
ill
‰ Il programma attende che l’utente digiti un numero
carattere speciale newline ‘\
‘\n’
cout << “Prima
“P
frase”;
f
”
e prema il tasto “invio”.

Prima fraseSeconda frase
cout << “Seconda frase”;

cout << “Prima frase\n”;
Prima frase
cout << “Seconda
Seconda frase
frase”;;
Seconda frase
C++: Introduzione
L’input
L
input viene elaborato da cin solo dopo aver premuto il
tasto invio
Il valore (costante) introdotto deve essere dello stesso
tipo della variabile
9 Altrimenti lo stream cin fallisce
– Tralasciamo per ora la gestione di queste situazioni
33
C++: Introduzione
Input (cin)
34
Esempio
‰ L’operatore di inserzione >> può essere usato più
volte
lt nella
ll stessa
t
istruzione
i t
i
cin >> a >> b;
‰ Si
Sintassi
t i
cin >> var. 1 >> … >> var. n ;
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
int main()
int main()
{
{
int x,y;
cout >> “Inserire il primo numero\n”;
cin >> x;
‰ L’utente
L’
deve
d
fornire
f
valori
l
di
d tipo appropriato,
int x,y;
cout >> “Inserire i due numeri da sommare
\n”;
cin >> x >> y;
cout >> “Inserire il secondo numero\n”;
uno per variabile
‰ I valori
l id
devono essere separati
ti da
d uno o più
iù
caratteri spazio/tabulazione/newline
int somma=x+y;
cin >> y;
int somma=x+y;
cout << “Somma= " << somma << "\n";
return 0;
cout << “Somma= " << somma << "\n";
return 0;
}
}
C++: Introduzione
35
C++: Introduzione
36
Esempio
Input (cin)
#include <iostream>
‰ I valori devono essere separati da uno o più
…
caratteri spazio/tabulazione/newline
cout << "How many dimes do you have? ";
using namespace std;
cin >> a >> b >> c >> d;
cin >> count;
total = count * 0.10 + total;
‰ E
E’ possibile inserire i dati
 uno dopo l’altro separati da spazi/tab
int main( )
{
y pennies
p
do you
y have? ";
cout << "How many
";
total = count * 0.25 + total;
cin >> count;
double total = count * 0.01;
0 01;

3
6
2
- 4 \n
oppure su righe succesive
cin
6
return 0;
3 \n 6 \n 2 \n - 4 \n
2
}
-4
…

C++: Introduzione
o una loro combinazione
37
Input (cin)
C++: Introduzione
38
Tipo di Dato Fondamentali in C++
‰ L’input da tastiera è bufferizzato
 I caratteri digitati
d
sono raggruppati tra loro
l
e l’input
l’
viene elaborato quando si preme il tasto invio
coutt << “ Primo
P im num.
m ”;
cin
c
n
3
cout << "Total value = " << total << "\n";
cout << "How many nickels do you have? ";
total = count * 0.05 + total;
3 6 2 -4
4
cin >> count;
int count;
cin >> count;
cout << "How many quarters do you have?
cin
i >> a;;
3
cout << “ Secondo num. “; cin >> b;
6
cout << “ Terzo num. “;
“
2
cin >> c;
cout << “ Quarto num. “; cin >> d;
-4
Nome
byte
y
char
1
Carattere o intero di 8 bit
Signed: -128…127
Unsigned: 0…255
short/
byte
1
Intero di 8 bit
Signed: -128…127
128 127
Unsigned: 0…255
long
4
Intero di 32 bit
3 6 2 -4
4
C++: Introduzione
39
Intervallo
Signed: -2147483648…2147483647
Unsigned: 0
0…4294967295
4294967295
Intero. La sua lunghezza dipende dalla
dimensione di una parola (word) usata
dal sistema.
s stema. Nei
Ne sistemi
s stem a 32
3 bit
b t è di
d 32
3
bit
int
‰ Che succede digitando direttamente?
Descrizione
float
4
Numero in virgola mobile a singola
precisione
p
±3.4·10±38
double
8
Numero in virgola mobile a doppia
precisione
±1.7·10±308
bool
b l
1
Valori
V l i booleani
b l
i
t
true
e false
f ls
C++: Introduzione
40
Numeri interi in C++
Numeri in virgola mobile in Java
‰ In C++ tutti i tipi di dati fondamentali per numeri
‰ In C++ tutti i tipi di dati fondamentali per numeri
interi
i t i usano internamente
i t
t lla rappresentazione
t i
iin
complemento a due

in
i virgola
i
l mobile
bil usano iinternamente
t
t una
rappresentazione binaria codificata dallo standard
internazionale IEEE 754
‰ float (32bit), double (64 bit)
‰ La divisione con divisore zero non è un errore se
effettuata tra numeri in virgola mobile
byte int
byte,
int, long
‰ le condizioni di overflow nelle operazioni
aritmetiche non vengono segnalate

si ottiene semplicemente un risultato errato
‰ L’unica operazione
p
aritmetica tra numeri interi che

genera un’errore è la divisione per zero

C++: Introduzione
se il dividendo è diverso da zero,, il risultato è infinito
(con il segno del dividendo)
se anche il dividendo è zero, il risultato è indeterminato,
cioè non è un numero,
numero e viene usata la codifica speciale
NaN (Not a Number)
41
C++: Introduzione
Errori di arrotondamento
Arrotondamento
‰ Gli errori di arrotondamento sono un fenomeno
…
d bl f = 4
double
4.35;
35
cout << setprecision(10) << f;
…
naturale
t
l nell calcolo
l l in
i virgola
i
l mobile
bil eseguito
it con
un numero finito di cifre significative


calcolando 1/3 con due cifre significative
significative, si ottiene 0
0,33
33
moltiplicando 0,33 per 3, si ottiene 0,99 e non 1
4.349999905
‰ Il numero 4,35 non ha una rappresentazione esatta
nell sistema b
binario, proprio come 1/3 non h
ha una
rappresentazione esatta nel sistema decimale
‰ Siamo abituati a valutare questi errori pensando
alla rappresentazione dei numeri in base decimale,
ma i computer rappresentano i numeri in virgola
mobile in base binaria e a volte si ottengono dei
risultati inattesi
C++: Introduzione
42

43
4,35
4 35 viene rappresentato con un numero appena inferiore
a 4,35
C++: Introduzione
44
Assegnazioni con Conversione
Assegnazioni con Conversione
…
d bl f
double
f;
int pennies=3;
f=pennies;
p
…
…
d bl f
double
f=2.3;
23
int pennies;
p
pennies=f;
…
‰ In un’assegnazione, il tipo di dati dell’espressione
dell’espressione e della
variabile
b l a cui la
l si assegna devono
d
essere compatibili
bl

‰ In questo caso si ha perdita di informazione,
se i tipi non sono compatibili, il compilatore genera un
messaggio
gg di warning
g
perché la parte frazionaria di un valore in virgola
mobile
bil non può
ò essere memorizzata
i
t iin una variabile
i bil
di tipo intero
I tipi non sono compatibili se provocano una possibile perdita
di informazione durante la conversione
‰ L
L’assegnazione
assegnazione di un valore di tipo numerico intero ad una
variabile di tipo numerico in virgola mobile non può provocare
perdita di informazione
‰
C++: Introduzione
45
C++: Introduzione
Operatore Esplicito di Conversione (casting)
Aritmetica
‰ Ci sono casi in cui si vuole effettivamente ottenere
‰ C++ supporta le quattro operazioni elementari
 addizione
dd
e sottrazione: +  moltiplicazione e divisione: * /
la
l conversione
i
di un numero iin virgola
i
l mobile
bil iin un
numero intero
‰ Lo si fa segnalando al compilatore l’intenzione
l intenzione
esplicita di accettare l’eventuale perdita di
informazione, mediante un “cast”
cast
…
…
double f=2.3;
double f=2.3;
int pennies;
int pennies;
pennies= (int) f;
pennies=static_cast<int> f;
…
…
46
‰ Le operazioni di moltiplicazione e divisione hanno
precedenza su addizione e sottrazione
a+b/2
b/2
a+(b/2)
(b/2)
‰ E
E’ possibile usare coppie di parentesi tonde per
indicare in quale ordine valutare le sottosottop
espressioni
C++: Introduzione
(a+b)/2
47
(a+b)/2
C++: Introduzione
48
Aritmetica: Divisione
Funzioni Matematiche
‰ Se uno dei due operandi è un numero floating point,
‰ Operazioni più complesse, e.g., la radice quadrata,
il logaritmo vengano realizzare tramite funzioni
il risultato
i lt t e’’ un numero fl
floating
ti point
i t

7.0/4.0
7/4.0
/
double
d
bl x;
cin >> x;
cout
u << sqrt(x);
q ( );
1.75
7.0/4
‰ Se entrambi
b gli
l operando
d sono interi, ill risultato
l
è
‰ Sintassi
un intero
7/4
1
nome_funzione (espr1, …,esprn)
‰ L’operatore modulo % restituisce il resto della
‰ Calcola il valore della funzione
divisione tra interi
7%4
Le funzioni C++ saranno studiate in dettaglio in seguito
nome_funzione
_
con
argomenti/parametri espr1,…,esprn
3

C++: Introduzione
Si dice che la funzione restituisce (return) il valore
calcolato
49
Esempio
C++: Introduzione
50
C++: Introduzione
52
Funzioni Matematiche
‰ Per invocare le funzioni matematiche bisogna
Funzione
i l d
includere
il fil
file di iintestazione
t t i
<cmath>
th
#include <iostream>
#include <cmath>
Inclusione del file di intestazione <cmath>
Descrizione
sqrt(x)
radice quadrata di x
pow(x,y)
xy
sin(x)
sin x
cos(x)
cos x
tan(x)
tan x
int x;
exp(x)
ex
cout << “Inserire un numero \n”;
log(x)
logaritmo naturale loge(x), x>0
using namespace std;
int main()
{
cin >> x;
log10(x)
double radice=sqrt(x);
cout << “Radice quadrata= " << radice << "\n";
return 0;
}
C++: Introduzione
51
logaritmo decimale log10(x)
ceil(x)
il più piccolo numero intero ≥x
floor(x)
il più grande numero intero ≤x
fabs(x)
valore assoluto di x
Caratteri
Classi
‰ Il tipo char permette di memorizzare un carattere
‰ In C++ una classe e’ un tipo di dato definito
dall’utente
dall
utente
con codifica
difi ASCII ad
d 8 bit
‰ Tipo: rappresentazione concreta di un concetto
 tipo int e’
e la rappresentazione (approssimata) di un
numero intero
 tipo double e’ la rappresentazione (approssimata) di un
numero reale
char x=‘a’,y;
y=‘b’;
‘b’
‰ char è un tipo compatibile con int (eredità del C)
 corrisponde
i
d ad
d un b
byte
t
 valore=numero binario corrispodente alla codifica ASCII
del carattere
 ‘a’ ha codifica 01100001, codifica binaria di 97
…
char x=‘a’;
int a=x;
c ut << a;;
cout
…
‰ In C++ e’ possibile definire nuovi tipi per
1.
97
2
2.
3.
4
4.
C++: Introduzione
rappresentare concretamente:
Stringhe
I i
Impiegati
ti
Conto in Banca
…
53
C++: Introduzione
Classi
Stringhe
‰ In C++ una classe e’ un tipo di dato definito
‰ Stringa: Sequenza di caratteri
racchiusa tra doppi apici
d ll’ t t
dall’utente
‰ Una classe e’ caratterizzata da:
1. Dati
D ti (Attributi)
(Att ib ti)



“Hello”, “a”, “”
I doppi apici non fanno parte
d ll stringa
della
i
‰ Per usare le stringhe in C++
attributi
#include <iostream>
#include <string>
using namespace std;
int main()
bisogna
g includere il file di
{
intestazione <string>
string nome;
‰ Dichiarazione, Assegnazione,
string frase=“Inserire un nome\n”;
input ed output simili ai tipi
cout >> frase;
numerici
cin >> nome;
‰ Il tipo string è il primo esempio
cout << “Ciao
Ciao " << nome << "\n";
\n ;
di classe
l
che incontriamo in C++
2 Funzioni (Comportamento)
2.
 funzioni membro
‰ Oggetto e’ un’istanza di una classe
 una particolare stringa,
stringa un particolare impiegato,
impiegato etc.
etc
‰ Interfaccia Pubblica
 Insieme delle funzioni membro accessibili dall’esterno
dall esterno
C++: Introduzione
54


55
stringhe in C++ sono oggetti
in C il tipo string non esiste
9 in C stringhe sono array di
caratteri
return 0;
}
C++: Introduzione
56
Stringhe
Stringhe
‰ Funzioni membro della classe string
‰ Invocazione di una funzione membro
1.
funzione membro length( )

saluto.length()
restituisce la lunghezza della stringa (numero di caratteri)
‰ Sintassi
…
int x;
string
g saluto=“Ciao
u
Mondo\n”;
M
\ ;
x=saluto.lenght( );
cout << saluto << “ è lunga “ << x << “ caratteri\n”;
…
espressione.funzione_membro(espr1, espr2,…,esprn)
‰ Calcola
C l l il valore
l
della
d ll funzione
f
i
membro
b
funzione_membro con argomenti/parametri
espr1,…,esprn e espressione (parametro implicito)

C++: Introduzione
57
Stringhe
2.
…
string
g saluto=“Ciao Mondo\n”;
string porzione=saluto.substr(2,4);
cout << porzione;
…
C
i
a
o
1
2
3
‰
‰
4
M
o
n
d
o
\n
5
6
7
8
9
10
…
string nome=“Harry”;
strin co
string
cognome=
nome “Potter”
Potter”
string mago=nome + “ “ + cognome;
cout << mago;
g
…
ao M
identico a quello dell’operatore di addizione
‰ Almeno una delle due stringhe deve essere una
variabile stringa
la posizione dei caratteri nelle stringhe viene numerata a partire
da 0. Perché?
il secondo parametro è la quantità di caratteri (consecutivi) da
estrarre
C++: Introduzione
Harry Potter
‰ Il simbolo dell’operatore di concatenazione è
il primo parametro è la posizione del primo carattere che si
vuole estrarre

58
‰ Concatenazione di Stringhe: Operatore +
restituisce una sottostringa
0
C++: Introduzione
Stringhe
funzione membro substr(primo carattere,lunghezza)

Si dice che la funzione restituisce (return) il valore
calcolato
59
C++: Introduzione
60
Classe Impiegato
Classe Impiegato
‰ Esempio Capitolo 3 (Employee)
‰ Costruzione
‰ Rappresentazione di un Impiegato
‰ Sintassi
1.
Attributi

nome_classe (parametri_costruzione);
name, salary
‰ Crea una variabile oggetto della classe
nome_classe usando i parametri
parametri_costruzione
parametri costruzione per inizializzarlo
2. Comportamento
 Costruzione
C t
i
 Accesso al nome, stipendio
 Variazione dello stipendio
string get_name( )
 Distruzione
Employee
name
double get
get_salary(
salary( )
void set_salary(double )
Employee(“Fantozzi, Ugo”, 2000);
Employee
name
salary
“Fantozzi, Ugo”
2000
salary
C++: Introduzione
61
Classe Impiegato
C++: Introduzione
62
Classe Impiegato
‰ Esempio
‰ Dichiarazione variabile oggetto
‰ Sintassi
Sint ssi
file di intestazione classe
Employee
#include <iostream.h>
#include “ccc_empl.h”
nome_classe nome_variabile=nome_classe(parametri
costruzione);
using
i namespace std;
d
nome_classe nome_variabile(parametri costruzione);
int main( )
{
Employee fantozzi(“Fantozzi, Ugo”, 2000);
Employee fantozzi=Employee(“Fantozzi, Ugo”, 2000);
Employee fantozzi(“Fantozzi, Ugo”, 2000);
‰ Definisce una nuova variabile
oggetto della classe nome_classe
usando i parametri
parametri_costruzione
i
i
per
inizializzarlo
fantozzi=
double nuovo_stipendio=fantozzi.get_salary( )-100;
Employee
fantozzi.set_salary(nuovo
f
y(
_stipendio);
p
);
name
salary
“Fantozzi, Ugo”
2000
C++: Introduzione
63
}
cout << “Il nuovo stipendio del dipendente “ << fantozzi.get_name( );
cout << “ è “ << fantozzi.get_salary( ) << “\n”;
return 0;
C++: Introduzione
64
Scarica

Fondamenti Fondamenti di Informatica Informatica