SlideShare a Scribd company logo
Introduzione al C++ e al C
Storia del linguaggio, struttura dei
programmi, funzioni, librerie, compilazione
e collegamento, macchina astratta, variabili,
istruzioni, commenti, assegnamento,
espressioni aritmetiche elementari

1
Breve storia del linguaggio C

• Il linguaggio C:

– Evoluzione (Dennis Ritchie) di linguaggi
precedenti (tra cui il B)
– Usato per sviluppare il sistema operativo UNIX
• Motivo iniziale del suo successo

– Gran parte dei sistemi operativi oggi sono scritti
in C (C++)
– Portabile tra calcolatori differenti
– Consolidato già intorno agli anni ’70

• Standardizzazione (importante in
Informatica):
– Anni ’80: molte varianti leggermente diverse e
incompatibili
– 1989: comitato per la standardizzazione
(aggiornato ’99)

2
Breve storia del C++
• 1979 Bjarne Stroustrup
ispirato dal linguaggio
Simula67 inventa "C with
Classes"
• 1983 nasce il nome C++
• 1985 pubblicato "The C++
Programming Language"
• 1990 "The Annotated C++,
Reference Manual" esce
Borland Turbo C++
• 1998: "C++ ISO/IEC
14882:1998" standard
• 2011 nuovo standard C++ (C+
+11)
http://www.cplusplus.com/info/history/
3
Principali differenze tra C e C++
• Il linguaggio C offre tutto ciò che serve per codificare
algoritmi
• I suoi concetti riflettono da vicino l'architettura del
calcolatore
• Il principale obiettivo del C è garantire l'esecuzione
efficiente dei programmi, lo sfruttamento completo delle
potenzialità del calcolatore
• Il C++ offre primitive di programmazione più astratte, meno
aderenti alle caratteristiche della macchina
• Contiene caratteristiche più potenti, ma talvolta anche più
complesse
• Mira a non sacrificare l'efficienza in nome della maggior
astrazione e potenza espressiva
4
Le differenze principali
C

C++

Stile di programmazione procedurale

Più di uno stile: procedurale e ad oggetti

Basso livello (vicino all'architettura)

Basso e alto livello

Orientamento alle funzioni

Orientamento alle funzioni e agli oggetti

Tipi predefiniti e definiti dall'utente

Tipi predefiniti, definiti dall'utente e classi

Dati accessibili

Meccanismo di protezione dei dati

Funzioni e dati definiti separatamente

Funzioni e dati definibili congiuntamente

Operatori di significato fisso

Operatori "sovracaricati"

Input output di basso livello

Input output ad oggetti
Tipi reference
Gestione delle eccezioni predefinita
Gestione dei nomi tramite namespace

E molte altre ancora di minor entità…
Il nostro primo programma C++
// The first C++ program
#include <iostream>
using namespace std;

int main() {
cout << "!!Hello World!!" << endl; // prints
return 0;
}

> !!Hello World!!

!!Hello World!!
// The first C++ program
• Si tratta di un commento
• Commento = parte di un programma ignorata
dal compilatore
• Serve per migliorare la leggibilità
• Due formati
– Multilinea /* … */
– Mono linea //

• Prestare attenzione nell'innestarli
#include <iostream>
• # denota istruzioni dirette (direttive) al preprocessore
• Sono eseguite prima di compilare il programma
• I programmi C++ consistono di moduli chiamati funzioni, il
programmatore può:

– creare egli stesso le sue funzioni
– usare le funzioni già offerte dall'ambiente di programmazione (dette
"di libreria")
– organizzare le proprie funzioni in librerie

• #include dichiara l'uso di una libreria di funzioni

– <iostream> è una libreria che contiene oggetti e funzioni per
comunicare con l'utente

• Le funzioni di libreria sono scritte con accuratezza, sono efficienti e
sono portabili
– se esiste già una funzione, è inutile riprogrammarla
int main() { … corpo … }
• I programmi C++ contengono la definizione di una o più funzioni,
una delle quali deve essere il main()
– Nell'esempio, c’è la definizione della sola funzione main()

• L'esecuzione del programma coincide con l'esecuzione della
funzione main()
• Le parentesi tonde ( ) dopo il nome "main" indicano che è una
funzione
• Le funzioni “restituiscono” un valore

– int significa che il main restituisce un valore intero
• Ogni funzione ha un corpo che costituisce la definizione della
funzione. Raccoglie le istruzioni che specificano il “comportamento”
della funzione

• Il corpo è incluso in un blocco, racchiuso in parentesi graffe { }

9
La comunicazione con l'utente
• cout << "!!!Hello World!!!" << endl;
• È una istruzione di stampa
– L’intera riga si chiama istruzione (o statement), termina con ;
– L'istruzione visualizza la sequenza di caratteri tra "…" e va a capo

• cout rappresenta lo stream di output
– Normalmente associato al terminale video, dove il programma stampa le
informazioni

• L’operatore << inserisce informazioni nello standard output
– "!!!Hello World!!!" è una sequenza di caratteri

– endl è un simbolo speciale (manipulator) che assicura che
tutti i caratteri generati dal programma fino a quel punto
siano emessi in output e provoca l’andata a capo
• cout, << e endl sono definiti nella libreria iostream
10
Il valore di ritorno di una funzione
• return 0;

– È un modo di terminare una funzione
– Indica il valore “restituito” come effetto
dell’esecuzione
– È compatibile con la dichiarazione int main()
– return 0 in questo caso significa che il programma
è terminato senza anomalie
• È una convenzione: 0 indica la fine di una esecuzione
corretta. Normalmente, con un valore di ritorno -1 si indica
invece la terminazione in caso di errori
• È una convenzione tipica della funzione main(). Per le altre
funzioni normalmente si usano valori di ritorno legati al
significato della funzione
Prime considerazioni
• C++ è un linguaggio complesso
• Ci si può fermare alla comprensione del suo
funzionamento "pratico"
• Si può cercare di capire a fondo perché
funziona in un certo modo
• Perfino il programma Hello World ha aspetti
non banali
Gli operatori di input-output
• Perché << è un operatore?
• "+" è un operatore, ma "<<" ??
• E' invece proprio cosi
–
–
–
–
–
–

cout << "!!!Hello World!!!"
cout è l'operando di sinistra (un oggetto)
"!!!Hello World!!!" è l'operando di destra
cout << "!!!Hello World!!!" è un'espressione
Come tale ha un valore, che è …. l'oggetto cout stesso
Per questo si può scrivere << endl dopo l'espressione cout <<
"!!!Hello World!!!"
– E come scrivere 1+2+3 che equivale a (1+2)+3
– NB: il ";" finale trasforma l'espressione in un'istruzione !
• facile da capire eh ;-)
Check this out!
#include <iostream>
using namespace std;

Le parentesi
funzionano come
per un operatore
aritmetico!!

int main() {
(cout << "!!!Hello World!!!" ) << endl;
return 0;
}
Librerie e collegatore
• Quando si usa una funzione o un operatore (<<
nell' esempio), il collegatore (linker) la cerca nelle
librerie
– nella libreria standard, ed eventualmente in quelle
indicate da una apposita direttiva al preprocessore

• La funzione è copiata dalla libreria e inserita nel
programma oggetto
• Se c’è un errore nel nome della funzione o
dell'operatore il collegatore lo rileva (non riesce a
trovarla)

15
Visibilità e spazio dei nomi
• Quando un programma è grande, può capitare che lo stesso
"nome" venga dichiarato più volte, con significati diversi
• E' importante capire in che parte del codice del programma o delle
librerie un nome è visibile
• TERMINOLOGIA
– scope = parte di codice in cui un nome ha un determinato significato
– namespace: un particolare tipo di scope che può raccogliere anche
nomi definiti in diverse librerie

• Il nome cout appartiene al namespace delle librerie standard
• Andrebbe scritto come std::cout (è un po' come specificare il
"cognome" del "nome proprio" cout)
• La dichiarazione using namespace std; permette di usare il nome
cout senza specificare il namespace di appartenenza
Somma di due interi
• Requisiti: scrivere un programma che chiede
all’utente due numeri interi e ne stampa la
somma
• Strategia di risoluzione
– Dati: i due numeri e la loro somma
– Algoritmo: chiedere in sequenza all’utente i dati e
poi stampare la somma
// Sum of two integers
#include <iostream>
using namespace std;

Somma interi

int main()
{
int integer1, integer2, sum;
cout << "Enter first integer" << endl;
cin >> integer1;
cout << "Enter second integer" << endl;
cin >> integer2;
sum = integer1 + integer2;
cout << "Sum is: " << sum << endl;
return 0;
}
>
>
>
>
>

Enter first integer
45
Enter second integer
72
Sum is 117

//
//
//
//
//
//
//
//

declaration
prompt
read an integer
prompt
read an integer
assignment
print sum
successful end
Le variabili
•

int integer1, integer2, sum;

• Dichiarazione delle variabili
– locazioni di memoria dove sono memorizzati i dati manipolati dal
programma

• int
– specifica il tipo delle variabili
– le variabili conterranno numeri interi (int)

• integer1, integer2, sum
– nomi di variabili definiti dal programmatore

• Le dichiarazioni devono apparire prima delle istruzioni che
usano le variabili
– le variabili prima si dichiarano, poi si usano
La comunicazione con l'utente
• cin >> integer1;

– L'oggetto CIN rappresenta lo stream di input
– Normalmente è collegato con la tastiera, cioè contiene i caratteri che
l'utente digita
– L'operatore >> denota la lettura (estrazione) di caratteri dallo stream di
input
– La lettura è "formattata" cioè ignora spazi bianchi e tabulazioni, termina
con l'invio del carattere di ritorno (return)

• integer1 indica la variabile che contiene il valore inserito

dall'utente

– cin >> interrompe il flusso di esecuzione (bloccante)

– L’utente risponde digitando un numero e premendo enter
(invio) per far ripartire l’esecuzione
Assegnamento
• = (operatore di assegnamento )
– Assegna un valore a una variabile

• È un operatore binario (cioè che ha due operandi):
– Operando 1: il valore di sinistra (lvalue)
– Operando 2: il valore di destra (rvalue)

• sum = integer1 + integer2;
–

sum è l'lvalue e assume il valore dell'rvalue (l'espressione
integer1 + integer2)
Ancora sull’output
• cout << "Sum is: " << sum;

• sum indica la variabile il cui valore sarà visualizzato a terminale
• Intere espressioni possono essere argomenti di <<
– Ad esempio, si poteva stampare direttamente il calcolo:

cout << "Sum is: " << integer1+integer2;

• L'operatore << può avere un numero qualsiasi di parametri, sia
variabili, sia sequenze di caratteri (literal)
• Ad esempio, si poteva fare:
– cout << "Sum of " << integer1 << "and" <<
integer2 << "is: " << integer1+integer2;

• Le espressioni che si vogliono stampare si concatenano nell'ordine
desiderato mediante l'operatore <<
Il “livello” del linguaggio
• Il C++ è un linguaggio di livello più alto rispetto al
linguaggio assembler
– L’uso di funzioni è il segno della maggiore astrazione
• Permette di non dettagliare ogni volta tutte le operazioni
• Permette di scrivere algoritmi sintetici
– Un algoritmo sintetico è tipicamente più comprensibile per il
lettore umano

– Compromesso tra la pedante esattezza del linguaggio
macchina e la sintesi estrema dell’intuizione umana
• (x+y)-(z+w)
• Molte istruzioni di basso livello che “fanno perdere di vista
l’obiettivo”
Il programma (x+y)-(z+w)
in C++ e in assembler
int main()
{
int x, y, z, w;
cin >> x >> y >> z >> w;
cout << "Risultato: " << (x+y)-(z+w);
return 0;
}

La variabile ausiliaria RIS in C++ non è
esplicitata: è il compilatore che si fa carico
della gestione dei risultati intermedi della
valutazione dell’espressione
(linguaggio di livello più alto)

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

READ
X
READ
Y
READ
Z
READ
W
LOADA Z
LOADB W
ADD
STOREA RIS
LOADA X
LOADB Y
ADD
LOADB RIS
DIF
STOREA RIS
WRITE RIS
HALT
...int....(X).....
...int....(Y).....
...int....(Z).....
...int....(W).....
...int...(RIS)...
La macchina astratta C++
Algoritmi e programmi sono definiti in funzione del loro esecutore
L’esecutore dei programmi C++ è una macchina astratta

BUS

CPU

RAM

Standard Input
a
B
pluto
somma_1
...

di solito è
la tastiera

Standard Output
di solito
è il video
Standard I/O
• Un programma ha due periferiche “standard”
di ingresso e uscita
– stdin : standard input (tastiera)
– stdout : standard output (terminale video)

che possono essere viste come “sequenze”
(stream) di byte, normalmente interpretati
come caratteri
Memoria
• Divisa in celle elementari
• Ogni cella può contenere un dato
• I dati possono essere
–
–
–
–

Numeri
Caratteri
Stringhe (sequenze di caratteri in celle adiacenti)
…

• Semplificazioni / idealizzazioni / approssimazioni /
astrazioni
– Nessun limite al numero delle celle
– Nessun limite ai valori numerici contenuti
Le variabili in memoria centrale
• Variabili: corrispondono a locazioni di memoria
– Ogni variabile ha
•
•
•
•
•

un nome (identificatore)
un tipo (insieme dei valori e delle operazioni ammissibili)
una dimensione
un indirizzo (individua la cella [o le celle] di memoria)
un valore

– La lettura non modifica i valori delle variabili
– Inserendo un nuovo valore in una variabile (per
assegnamento o con una cin >>), si sostituisce (e quindi si
distrugge) il vecchio valore

cella di memoria

nome della variabile
(il suo identificatore)

integer1 45

valore della
variabile
Le variabili
• Rappresentano i dati su cui lavora il programma
• Sono denotate mediante identificatori:
a, B, pluto, somma_1, …
• Variabili diverse devono avere identificatori diversi
• A una variabile ci si riferisce sempre con lo stesso
identificatore
• Durante l’esecuzione del programma le variabili hanno
sempre un valore
– Può essere significativo o non significativo, ma c’è
– Perciò le variabili devono essere sempre inizializzate in
modo opportuno [per evitare errori e sorprese]
Identificatori e parole chiave
• I nomi di variabili sono identificatori:

– Sequenze di lettere, cifre, underscore ‘_’,
– Case sensitive

• cioè “sensibili al maiuscolo”: ‘A’ è diverso da ‘a’

– Il primo carattere deve essere una lettera o underscore
– Esempi:
• h12 i a_modo_mio identificatoreValidoPerUnaVariabileC DopoDomani
nonce2senza4 v01 v09 v10 v17 V17 h7_25 lasciapassareA38 b8ne

• Ci sono “parole-chiave” (o keyword) associate a
elementi del linguaggio
– Non si possono usare come nomi di variabili
– Occorre ricordarle a memoria
• non sono tantissime, non è difficile
Le parole chiave del C++
Struttura di un programma
parte dichiarativa globale
inclusione librerie /∗ per poter invocare funzioni utili (i/o, ...) ∗/
dichiarazione di variabili globali e funzioni
int main ( ) {

parte dichiarativa locale

dichiarazione di variabili locali
istruzione 1;
istruzione 2;
istruzione 3;
istruzione 4;
...
istruzione N;

/∗ tutti i tipi di operazioni, e cioè: ∗/
/∗ istr. di assegnamento ∗/
/∗ istr. di input / output ∗/
/∗ istr. di controllo (condizionali, cicli) ∗/
parte esecutiva

}

Ogni programma deve contenere un modulo int main() {...}
Struttura di un programma
• Parte dichiarativa: le dichiarazioni degli elementi del
programma

– Dati, ed eventualmente funzioni (ma solo nella parte globale)

• Parte esecutiva: le istruzioni da eseguire, che ricadono
nelle categorie:
– Istruzioni di assegnamento (=)
– Strutture di controllo:
• Condizionali (if-then-else e switch)
• Iterative, o cicli (while, do e for)
– Istruzioni di Input/Output (<<, >>, ...)

• In C++ (a differenza del C) la dichiarazione di una
variabile può avvenire anche nella parte esecutiva
– Di solito appena prima del PRIMO uso della variabile
Sum of two integers
nclude <iostream>

Somma interi V2

t main()

int integer1, integer2;
cout << "Enter first integer" << endl;
cin >> integer1;
cout << "Enter second integer" << endl;
cin >> integer2;
int sum;
sum = integer1 + integer2;
cout << "Sum is: " << sum;
return 0;
>
>
>
>
>

Enter first integer
45
Enter second integer
72
Sum is 117

//
//
//
//
//
//
//
//
//

declaration
prompt
read an integer
prompt
read an integer
declaration
assignment
print sum
successful end
Variabili globali e locali
• Le variabili globali sono dichiarate fuori dalle funzioni

– Sono utilizzabili da tutte le funzioni del modulo (file) in cui sono
dichiarate
– per convenzione: poste all’inizio, dopo le direttive #include

• Le variabili locali sono dichiarate internamente alle
funzioni
• In caso di programmi mono-funzione (cioè contenenti
solo la funzione main()), variabili globali e locali sono
(quasi)equivalenti

– Ma è una situazione che vale solo per programmi elementari,
quindi non realistica

• La differenza si ha nei programmi con più di una funzione
e/o di un modulo (file)
• Le variabili globali servono per memorizzare informazioni
che vengono usate da varie funzioni, anche definite in
file diversi
Commenti
• Porzioni di testo racchiuse tra /* e */
• Se un commento si estende da un certo punto fino alla fine di
una sola riga si può anche usare // riga di commento
/*

Programma che non fa nulla ma mostra
i due modi per inserire commenti in C++ */
int main {
int valore; // Dich. inutile: variabile mai usata
return 0;
}

• I commenti sono ignorati dal compilatore
• Servono per aumentare la leggibilità e la facilità di modifica di
un programma
– A distanza di tempo, per persone diverse dall’autore, ...
Check this out
/*
* comment pairs /* */ cannot nest.
* ''cannot nest'' is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
Istruzioni semplici e composte
• Sequenze di istruzioni semplici
– Ogni istruzione semplice termina con ;
– ; è detto il “terminatore” dell’istruzione

• Si possono raggruppare più istruzioni in sequenza
tra { e } a costituire un blocco
– Il blocco costituisce una “super-istruzione”

• Non è necessario il ; dopo }, in quanto il blocco è
già una istruzione
– non necessita del terminatore per diventare
istruzione
Assegnamento
<variabile> = <espressione> ;
• Dove
• = è l'operatore di assegnamento

• da non confondere con quello di uguaglianza ==

• <espressione> può essere

– Un valore costante
– Una variabile
– Un'espressione costruita mediante operatori (p.e.
aritmetici +, −, *, /, %) e parentesi
– L’invocazione di una funzione f()

• ; è il terminatore, che rende l'espressione di
assegnamento, p.e. x=3, un'istruzione
Esempi di assegnamento
x = 23;
w = 'a'; //assegnamento del carattere ‘a’
w = a; //assegnamento del contenuto della variabile a
y = z;
alfa = x + y;
r3 = ( alfa * 43 – xgg ) * ( delta – 32 * j );
x = x + 1;
y = sqrt(99); // invocazione della funzione sqrt() –
// radice quadrata
Forme abbreviate
• Abbreviazioni (operatori di assegnamento):
• Istruzioni della forma
– variabile = variabile operatore espressione;

• si possono scrivere come:

– variabile operatore = espressione;
– a = a + 7; a = a * 5;
– a += 7;
a *= 5;

• L’incremento e il decremento hanno ulteriori
abbreviazioni
– a = a + 1; a = a - 1;
– ++a;
--a;
Domande
• Per ora senza risposta
– Perché l’assegnamento è un operatore?
– Se l’assegnamento è un operatore, allora si può usare in
un’espressione?
– Qual è il valore di un’espressione che contiene un
assegnamento?
– Qual è la precedenza dell’operatore di assegnamento
rispetto agli altri?
– Le regole di associatività valgono anche per
l’assegnamento come per gli operatori aritmetici?
• 3+4+5 = (3+4)+5

More Related Content

What's hot

Destructors
DestructorsDestructors
Destructors
DeepikaT13
 
Presentation on C++ Programming Language
Presentation on C++ Programming LanguagePresentation on C++ Programming Language
Presentation on C++ Programming Language
satvirsandhu9
 
Structure in c
Structure in cStructure in c
Structure in c
Prabhu Govind
 
Structure c
Structure cStructure c
Structure c
thirumalaikumar3
 
Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).pptAlok Kumar
 
Interfaces in java
Interfaces in javaInterfaces in java
Interfaces in java
Shiv Mehmi
 
All experiment of java
All experiment of javaAll experiment of java
All experiment of java
Guru Janbheshver University, Hisar
 
Java Tokens
Java  TokensJava  Tokens
Constructor and Destructor
Constructor and DestructorConstructor and Destructor
Constructor and DestructorKamal Acharya
 
Introduction to C++
Introduction to C++Introduction to C++
Introduction to C++
Sikder Tahsin Al-Amin
 
The compilation process
The compilation processThe compilation process
The compilation process
Alexander Bollbach
 
Command line arguments
Command line argumentsCommand line arguments
Command line arguments
Ashok Raj
 
C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorials
Mayank Jain
 
C language
C languageC language
C language
Mukul Kirti Verma
 
Structure of C++ - R.D.Sivakumar
Structure of C++ - R.D.SivakumarStructure of C++ - R.D.Sivakumar
Structure of C++ - R.D.Sivakumar
Sivakumar R D .
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
Ramish Suleman
 
One dimensional 2
One dimensional 2One dimensional 2
One dimensional 2
Rajendran
 

What's hot (20)

Destructors
DestructorsDestructors
Destructors
 
Presentation on C++ Programming Language
Presentation on C++ Programming LanguagePresentation on C++ Programming Language
Presentation on C++ Programming Language
 
Structure in c
Structure in cStructure in c
Structure in c
 
Structure c
Structure cStructure c
Structure c
 
Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).ppt
 
Interfaces in java
Interfaces in javaInterfaces in java
Interfaces in java
 
All experiment of java
All experiment of javaAll experiment of java
All experiment of java
 
Java Tokens
Java  TokensJava  Tokens
Java Tokens
 
Constructor and Destructor
Constructor and DestructorConstructor and Destructor
Constructor and Destructor
 
Introduction to C++
Introduction to C++Introduction to C++
Introduction to C++
 
Operators in java
Operators in javaOperators in java
Operators in java
 
The compilation process
The compilation processThe compilation process
The compilation process
 
Command line arguments
Command line argumentsCommand line arguments
Command line arguments
 
C language unit-1
C language unit-1C language unit-1
C language unit-1
 
OOP java
OOP javaOOP java
OOP java
 
C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorials
 
C language
C languageC language
C language
 
Structure of C++ - R.D.Sivakumar
Structure of C++ - R.D.SivakumarStructure of C++ - R.D.Sivakumar
Structure of C++ - R.D.Sivakumar
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
One dimensional 2
One dimensional 2One dimensional 2
One dimensional 2
 

Viewers also liked

06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
Fraternali concertation june25bruxelles
Fraternali concertation june25bruxellesFraternali concertation june25bruxelles
Fraternali concertation june25bruxellesPiero Fraternali
 

Viewers also liked (6)

06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
03 1 alg_bool
03 1 alg_bool03 1 alg_bool
03 1 alg_bool
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
Fraternali concertation june25bruxelles
Fraternali concertation june25bruxellesFraternali concertation june25bruxelles
Fraternali concertation june25bruxelles
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 

Similar to 05 1 intro-struttura

Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: AlgoritmiMajong DevJfu
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)STELITANO
 
Corso c++
Corso c++Corso c++
Corso c++
Antonio Furone
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoMajong DevJfu
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
Alberto Minetti
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
I.S.I.S. "Antonio Serra" - Napoli
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Daniele Falamesca
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
I.S.I.S. "Antonio Serra" - Napoli
 

Similar to 05 1 intro-struttura (20)

Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)
 
Corso c++
Corso c++Corso c++
Corso c++
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
C++.pptx
C++.pptxC++.pptx
C++.pptx
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di dato
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
 

More from Piero Fraternali

Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016
Piero Fraternali
 
presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015
Piero Fraternali
 
Crowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della modaCrowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della moda
Piero Fraternali
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioniPiero Fraternali
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusionePiero Fraternali
 
Human computation and participatory systems
Human computation and participatory systems Human computation and participatory systems
Human computation and participatory systems
Piero Fraternali
 
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Piero Fraternali
 
Human and social computation
Human and social computation Human and social computation
Human and social computation Piero Fraternali
 
Web technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringWeb technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringPiero Fraternali
 
Web technologies: recap on TCP-IP
Web technologies: recap on TCP-IPWeb technologies: recap on TCP-IP
Web technologies: recap on TCP-IPPiero Fraternali
 
Web technologies course, an introduction
Web technologies course, an introductionWeb technologies course, an introduction
Web technologies course, an introductionPiero Fraternali
 
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadini
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadiniInformatica delle persone: reti sociali, giochi seri e scienza dei cittadini
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadiniPiero Fraternali
 

More from Piero Fraternali (18)

Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016
 
presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015
 
Crowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della modaCrowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della moda
 
07 2 ricorsione
07 2 ricorsione07 2 ricorsione
07 2 ricorsione
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione
 
03 2 arit_bin
03 2 arit_bin03 2 arit_bin
03 2 arit_bin
 
02 algo programmi
02 algo programmi02 algo programmi
02 algo programmi
 
Human computation and participatory systems
Human computation and participatory systems Human computation and participatory systems
Human computation and participatory systems
 
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
 
So human presentation
So human presentationSo human presentation
So human presentation
 
Human and social computation
Human and social computation Human and social computation
Human and social computation
 
Web technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringWeb technologies: Model Driven Engineering
Web technologies: Model Driven Engineering
 
Common Gateway Interface
Common Gateway InterfaceCommon Gateway Interface
Common Gateway Interface
 
Web technologies: HTTP
Web technologies: HTTPWeb technologies: HTTP
Web technologies: HTTP
 
Web technologies: recap on TCP-IP
Web technologies: recap on TCP-IPWeb technologies: recap on TCP-IP
Web technologies: recap on TCP-IP
 
Web technologies course, an introduction
Web technologies course, an introductionWeb technologies course, an introduction
Web technologies course, an introduction
 
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadini
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadiniInformatica delle persone: reti sociali, giochi seri e scienza dei cittadini
Informatica delle persone: reti sociali, giochi seri e scienza dei cittadini
 

05 1 intro-struttura

  • 1. Introduzione al C++ e al C Storia del linguaggio, struttura dei programmi, funzioni, librerie, compilazione e collegamento, macchina astratta, variabili, istruzioni, commenti, assegnamento, espressioni aritmetiche elementari 1
  • 2. Breve storia del linguaggio C • Il linguaggio C: – Evoluzione (Dennis Ritchie) di linguaggi precedenti (tra cui il B) – Usato per sviluppare il sistema operativo UNIX • Motivo iniziale del suo successo – Gran parte dei sistemi operativi oggi sono scritti in C (C++) – Portabile tra calcolatori differenti – Consolidato già intorno agli anni ’70 • Standardizzazione (importante in Informatica): – Anni ’80: molte varianti leggermente diverse e incompatibili – 1989: comitato per la standardizzazione (aggiornato ’99) 2
  • 3. Breve storia del C++ • 1979 Bjarne Stroustrup ispirato dal linguaggio Simula67 inventa "C with Classes" • 1983 nasce il nome C++ • 1985 pubblicato "The C++ Programming Language" • 1990 "The Annotated C++, Reference Manual" esce Borland Turbo C++ • 1998: "C++ ISO/IEC 14882:1998" standard • 2011 nuovo standard C++ (C+ +11) http://www.cplusplus.com/info/history/ 3
  • 4. Principali differenze tra C e C++ • Il linguaggio C offre tutto ciò che serve per codificare algoritmi • I suoi concetti riflettono da vicino l'architettura del calcolatore • Il principale obiettivo del C è garantire l'esecuzione efficiente dei programmi, lo sfruttamento completo delle potenzialità del calcolatore • Il C++ offre primitive di programmazione più astratte, meno aderenti alle caratteristiche della macchina • Contiene caratteristiche più potenti, ma talvolta anche più complesse • Mira a non sacrificare l'efficienza in nome della maggior astrazione e potenza espressiva 4
  • 5. Le differenze principali C C++ Stile di programmazione procedurale Più di uno stile: procedurale e ad oggetti Basso livello (vicino all'architettura) Basso e alto livello Orientamento alle funzioni Orientamento alle funzioni e agli oggetti Tipi predefiniti e definiti dall'utente Tipi predefiniti, definiti dall'utente e classi Dati accessibili Meccanismo di protezione dei dati Funzioni e dati definiti separatamente Funzioni e dati definibili congiuntamente Operatori di significato fisso Operatori "sovracaricati" Input output di basso livello Input output ad oggetti Tipi reference Gestione delle eccezioni predefinita Gestione dei nomi tramite namespace E molte altre ancora di minor entità…
  • 6. Il nostro primo programma C++ // The first C++ program #include <iostream> using namespace std; int main() { cout << "!!Hello World!!" << endl; // prints return 0; } > !!Hello World!! !!Hello World!!
  • 7. // The first C++ program • Si tratta di un commento • Commento = parte di un programma ignorata dal compilatore • Serve per migliorare la leggibilità • Due formati – Multilinea /* … */ – Mono linea // • Prestare attenzione nell'innestarli
  • 8. #include <iostream> • # denota istruzioni dirette (direttive) al preprocessore • Sono eseguite prima di compilare il programma • I programmi C++ consistono di moduli chiamati funzioni, il programmatore può: – creare egli stesso le sue funzioni – usare le funzioni già offerte dall'ambiente di programmazione (dette "di libreria") – organizzare le proprie funzioni in librerie • #include dichiara l'uso di una libreria di funzioni – <iostream> è una libreria che contiene oggetti e funzioni per comunicare con l'utente • Le funzioni di libreria sono scritte con accuratezza, sono efficienti e sono portabili – se esiste già una funzione, è inutile riprogrammarla
  • 9. int main() { … corpo … } • I programmi C++ contengono la definizione di una o più funzioni, una delle quali deve essere il main() – Nell'esempio, c’è la definizione della sola funzione main() • L'esecuzione del programma coincide con l'esecuzione della funzione main() • Le parentesi tonde ( ) dopo il nome "main" indicano che è una funzione • Le funzioni “restituiscono” un valore – int significa che il main restituisce un valore intero • Ogni funzione ha un corpo che costituisce la definizione della funzione. Raccoglie le istruzioni che specificano il “comportamento” della funzione • Il corpo è incluso in un blocco, racchiuso in parentesi graffe { } 9
  • 10. La comunicazione con l'utente • cout << "!!!Hello World!!!" << endl; • È una istruzione di stampa – L’intera riga si chiama istruzione (o statement), termina con ; – L'istruzione visualizza la sequenza di caratteri tra "…" e va a capo • cout rappresenta lo stream di output – Normalmente associato al terminale video, dove il programma stampa le informazioni • L’operatore << inserisce informazioni nello standard output – "!!!Hello World!!!" è una sequenza di caratteri – endl è un simbolo speciale (manipulator) che assicura che tutti i caratteri generati dal programma fino a quel punto siano emessi in output e provoca l’andata a capo • cout, << e endl sono definiti nella libreria iostream 10
  • 11. Il valore di ritorno di una funzione • return 0; – È un modo di terminare una funzione – Indica il valore “restituito” come effetto dell’esecuzione – È compatibile con la dichiarazione int main() – return 0 in questo caso significa che il programma è terminato senza anomalie • È una convenzione: 0 indica la fine di una esecuzione corretta. Normalmente, con un valore di ritorno -1 si indica invece la terminazione in caso di errori • È una convenzione tipica della funzione main(). Per le altre funzioni normalmente si usano valori di ritorno legati al significato della funzione
  • 12. Prime considerazioni • C++ è un linguaggio complesso • Ci si può fermare alla comprensione del suo funzionamento "pratico" • Si può cercare di capire a fondo perché funziona in un certo modo • Perfino il programma Hello World ha aspetti non banali
  • 13. Gli operatori di input-output • Perché << è un operatore? • "+" è un operatore, ma "<<" ?? • E' invece proprio cosi – – – – – – cout << "!!!Hello World!!!" cout è l'operando di sinistra (un oggetto) "!!!Hello World!!!" è l'operando di destra cout << "!!!Hello World!!!" è un'espressione Come tale ha un valore, che è …. l'oggetto cout stesso Per questo si può scrivere << endl dopo l'espressione cout << "!!!Hello World!!!" – E come scrivere 1+2+3 che equivale a (1+2)+3 – NB: il ";" finale trasforma l'espressione in un'istruzione ! • facile da capire eh ;-)
  • 14. Check this out! #include <iostream> using namespace std; Le parentesi funzionano come per un operatore aritmetico!! int main() { (cout << "!!!Hello World!!!" ) << endl; return 0; }
  • 15. Librerie e collegatore • Quando si usa una funzione o un operatore (<< nell' esempio), il collegatore (linker) la cerca nelle librerie – nella libreria standard, ed eventualmente in quelle indicate da una apposita direttiva al preprocessore • La funzione è copiata dalla libreria e inserita nel programma oggetto • Se c’è un errore nel nome della funzione o dell'operatore il collegatore lo rileva (non riesce a trovarla) 15
  • 16. Visibilità e spazio dei nomi • Quando un programma è grande, può capitare che lo stesso "nome" venga dichiarato più volte, con significati diversi • E' importante capire in che parte del codice del programma o delle librerie un nome è visibile • TERMINOLOGIA – scope = parte di codice in cui un nome ha un determinato significato – namespace: un particolare tipo di scope che può raccogliere anche nomi definiti in diverse librerie • Il nome cout appartiene al namespace delle librerie standard • Andrebbe scritto come std::cout (è un po' come specificare il "cognome" del "nome proprio" cout) • La dichiarazione using namespace std; permette di usare il nome cout senza specificare il namespace di appartenenza
  • 17. Somma di due interi • Requisiti: scrivere un programma che chiede all’utente due numeri interi e ne stampa la somma • Strategia di risoluzione – Dati: i due numeri e la loro somma – Algoritmo: chiedere in sequenza all’utente i dati e poi stampare la somma
  • 18. // Sum of two integers #include <iostream> using namespace std; Somma interi int main() { int integer1, integer2, sum; cout << "Enter first integer" << endl; cin >> integer1; cout << "Enter second integer" << endl; cin >> integer2; sum = integer1 + integer2; cout << "Sum is: " << sum << endl; return 0; } > > > > > Enter first integer 45 Enter second integer 72 Sum is 117 // // // // // // // // declaration prompt read an integer prompt read an integer assignment print sum successful end
  • 19. Le variabili • int integer1, integer2, sum; • Dichiarazione delle variabili – locazioni di memoria dove sono memorizzati i dati manipolati dal programma • int – specifica il tipo delle variabili – le variabili conterranno numeri interi (int) • integer1, integer2, sum – nomi di variabili definiti dal programmatore • Le dichiarazioni devono apparire prima delle istruzioni che usano le variabili – le variabili prima si dichiarano, poi si usano
  • 20. La comunicazione con l'utente • cin >> integer1; – L'oggetto CIN rappresenta lo stream di input – Normalmente è collegato con la tastiera, cioè contiene i caratteri che l'utente digita – L'operatore >> denota la lettura (estrazione) di caratteri dallo stream di input – La lettura è "formattata" cioè ignora spazi bianchi e tabulazioni, termina con l'invio del carattere di ritorno (return) • integer1 indica la variabile che contiene il valore inserito dall'utente – cin >> interrompe il flusso di esecuzione (bloccante) – L’utente risponde digitando un numero e premendo enter (invio) per far ripartire l’esecuzione
  • 21. Assegnamento • = (operatore di assegnamento ) – Assegna un valore a una variabile • È un operatore binario (cioè che ha due operandi): – Operando 1: il valore di sinistra (lvalue) – Operando 2: il valore di destra (rvalue) • sum = integer1 + integer2; – sum è l'lvalue e assume il valore dell'rvalue (l'espressione integer1 + integer2)
  • 22. Ancora sull’output • cout << "Sum is: " << sum; • sum indica la variabile il cui valore sarà visualizzato a terminale • Intere espressioni possono essere argomenti di << – Ad esempio, si poteva stampare direttamente il calcolo: cout << "Sum is: " << integer1+integer2; • L'operatore << può avere un numero qualsiasi di parametri, sia variabili, sia sequenze di caratteri (literal) • Ad esempio, si poteva fare: – cout << "Sum of " << integer1 << "and" << integer2 << "is: " << integer1+integer2; • Le espressioni che si vogliono stampare si concatenano nell'ordine desiderato mediante l'operatore <<
  • 23. Il “livello” del linguaggio • Il C++ è un linguaggio di livello più alto rispetto al linguaggio assembler – L’uso di funzioni è il segno della maggiore astrazione • Permette di non dettagliare ogni volta tutte le operazioni • Permette di scrivere algoritmi sintetici – Un algoritmo sintetico è tipicamente più comprensibile per il lettore umano – Compromesso tra la pedante esattezza del linguaggio macchina e la sintesi estrema dell’intuizione umana • (x+y)-(z+w) • Molte istruzioni di basso livello che “fanno perdere di vista l’obiettivo”
  • 24. Il programma (x+y)-(z+w) in C++ e in assembler int main() { int x, y, z, w; cin >> x >> y >> z >> w; cout << "Risultato: " << (x+y)-(z+w); return 0; } La variabile ausiliaria RIS in C++ non è esplicitata: è il compilatore che si fa carico della gestione dei risultati intermedi della valutazione dell’espressione (linguaggio di livello più alto) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 READ X READ Y READ Z READ W LOADA Z LOADB W ADD STOREA RIS LOADA X LOADB Y ADD LOADB RIS DIF STOREA RIS WRITE RIS HALT ...int....(X)..... ...int....(Y)..... ...int....(Z)..... ...int....(W)..... ...int...(RIS)...
  • 25. La macchina astratta C++ Algoritmi e programmi sono definiti in funzione del loro esecutore L’esecutore dei programmi C++ è una macchina astratta BUS CPU RAM Standard Input a B pluto somma_1 ... di solito è la tastiera Standard Output di solito è il video
  • 26. Standard I/O • Un programma ha due periferiche “standard” di ingresso e uscita – stdin : standard input (tastiera) – stdout : standard output (terminale video) che possono essere viste come “sequenze” (stream) di byte, normalmente interpretati come caratteri
  • 27. Memoria • Divisa in celle elementari • Ogni cella può contenere un dato • I dati possono essere – – – – Numeri Caratteri Stringhe (sequenze di caratteri in celle adiacenti) … • Semplificazioni / idealizzazioni / approssimazioni / astrazioni – Nessun limite al numero delle celle – Nessun limite ai valori numerici contenuti
  • 28. Le variabili in memoria centrale • Variabili: corrispondono a locazioni di memoria – Ogni variabile ha • • • • • un nome (identificatore) un tipo (insieme dei valori e delle operazioni ammissibili) una dimensione un indirizzo (individua la cella [o le celle] di memoria) un valore – La lettura non modifica i valori delle variabili – Inserendo un nuovo valore in una variabile (per assegnamento o con una cin >>), si sostituisce (e quindi si distrugge) il vecchio valore cella di memoria nome della variabile (il suo identificatore) integer1 45 valore della variabile
  • 29. Le variabili • Rappresentano i dati su cui lavora il programma • Sono denotate mediante identificatori: a, B, pluto, somma_1, … • Variabili diverse devono avere identificatori diversi • A una variabile ci si riferisce sempre con lo stesso identificatore • Durante l’esecuzione del programma le variabili hanno sempre un valore – Può essere significativo o non significativo, ma c’è – Perciò le variabili devono essere sempre inizializzate in modo opportuno [per evitare errori e sorprese]
  • 30. Identificatori e parole chiave • I nomi di variabili sono identificatori: – Sequenze di lettere, cifre, underscore ‘_’, – Case sensitive • cioè “sensibili al maiuscolo”: ‘A’ è diverso da ‘a’ – Il primo carattere deve essere una lettera o underscore – Esempi: • h12 i a_modo_mio identificatoreValidoPerUnaVariabileC DopoDomani nonce2senza4 v01 v09 v10 v17 V17 h7_25 lasciapassareA38 b8ne • Ci sono “parole-chiave” (o keyword) associate a elementi del linguaggio – Non si possono usare come nomi di variabili – Occorre ricordarle a memoria • non sono tantissime, non è difficile
  • 31. Le parole chiave del C++
  • 32. Struttura di un programma parte dichiarativa globale inclusione librerie /∗ per poter invocare funzioni utili (i/o, ...) ∗/ dichiarazione di variabili globali e funzioni int main ( ) { parte dichiarativa locale dichiarazione di variabili locali istruzione 1; istruzione 2; istruzione 3; istruzione 4; ... istruzione N; /∗ tutti i tipi di operazioni, e cioè: ∗/ /∗ istr. di assegnamento ∗/ /∗ istr. di input / output ∗/ /∗ istr. di controllo (condizionali, cicli) ∗/ parte esecutiva } Ogni programma deve contenere un modulo int main() {...}
  • 33. Struttura di un programma • Parte dichiarativa: le dichiarazioni degli elementi del programma – Dati, ed eventualmente funzioni (ma solo nella parte globale) • Parte esecutiva: le istruzioni da eseguire, che ricadono nelle categorie: – Istruzioni di assegnamento (=) – Strutture di controllo: • Condizionali (if-then-else e switch) • Iterative, o cicli (while, do e for) – Istruzioni di Input/Output (<<, >>, ...) • In C++ (a differenza del C) la dichiarazione di una variabile può avvenire anche nella parte esecutiva – Di solito appena prima del PRIMO uso della variabile
  • 34. Sum of two integers nclude <iostream> Somma interi V2 t main() int integer1, integer2; cout << "Enter first integer" << endl; cin >> integer1; cout << "Enter second integer" << endl; cin >> integer2; int sum; sum = integer1 + integer2; cout << "Sum is: " << sum; return 0; > > > > > Enter first integer 45 Enter second integer 72 Sum is 117 // // // // // // // // // declaration prompt read an integer prompt read an integer declaration assignment print sum successful end
  • 35. Variabili globali e locali • Le variabili globali sono dichiarate fuori dalle funzioni – Sono utilizzabili da tutte le funzioni del modulo (file) in cui sono dichiarate – per convenzione: poste all’inizio, dopo le direttive #include • Le variabili locali sono dichiarate internamente alle funzioni • In caso di programmi mono-funzione (cioè contenenti solo la funzione main()), variabili globali e locali sono (quasi)equivalenti – Ma è una situazione che vale solo per programmi elementari, quindi non realistica • La differenza si ha nei programmi con più di una funzione e/o di un modulo (file) • Le variabili globali servono per memorizzare informazioni che vengono usate da varie funzioni, anche definite in file diversi
  • 36. Commenti • Porzioni di testo racchiuse tra /* e */ • Se un commento si estende da un certo punto fino alla fine di una sola riga si può anche usare // riga di commento /* Programma che non fa nulla ma mostra i due modi per inserire commenti in C++ */ int main { int valore; // Dich. inutile: variabile mai usata return 0; } • I commenti sono ignorati dal compilatore • Servono per aumentare la leggibilità e la facilità di modifica di un programma – A distanza di tempo, per persone diverse dall’autore, ...
  • 37. Check this out /* * comment pairs /* */ cannot nest. * ''cannot nest'' is considered source code, * as is the rest of the program */ int main() { return 0; }
  • 38. Istruzioni semplici e composte • Sequenze di istruzioni semplici – Ogni istruzione semplice termina con ; – ; è detto il “terminatore” dell’istruzione • Si possono raggruppare più istruzioni in sequenza tra { e } a costituire un blocco – Il blocco costituisce una “super-istruzione” • Non è necessario il ; dopo }, in quanto il blocco è già una istruzione – non necessita del terminatore per diventare istruzione
  • 39. Assegnamento <variabile> = <espressione> ; • Dove • = è l'operatore di assegnamento • da non confondere con quello di uguaglianza == • <espressione> può essere – Un valore costante – Una variabile – Un'espressione costruita mediante operatori (p.e. aritmetici +, −, *, /, %) e parentesi – L’invocazione di una funzione f() • ; è il terminatore, che rende l'espressione di assegnamento, p.e. x=3, un'istruzione
  • 40. Esempi di assegnamento x = 23; w = 'a'; //assegnamento del carattere ‘a’ w = a; //assegnamento del contenuto della variabile a y = z; alfa = x + y; r3 = ( alfa * 43 – xgg ) * ( delta – 32 * j ); x = x + 1; y = sqrt(99); // invocazione della funzione sqrt() – // radice quadrata
  • 41. Forme abbreviate • Abbreviazioni (operatori di assegnamento): • Istruzioni della forma – variabile = variabile operatore espressione; • si possono scrivere come: – variabile operatore = espressione; – a = a + 7; a = a * 5; – a += 7; a *= 5; • L’incremento e il decremento hanno ulteriori abbreviazioni – a = a + 1; a = a - 1; – ++a; --a;
  • 42. Domande • Per ora senza risposta – Perché l’assegnamento è un operatore? – Se l’assegnamento è un operatore, allora si può usare in un’espressione? – Qual è il valore di un’espressione che contiene un assegnamento? – Qual è la precedenza dell’operatore di assegnamento rispetto agli altri? – Le regole di associatività valgono anche per l’assegnamento come per gli operatori aritmetici? • 3+4+5 = (3+4)+5