Sei sulla pagina 1di 89

Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014

Introduzione al linguaggio C/C++ Introduzione al linguaggio C/C++


Tipi di dato e numeri interi Tipi di dato e numeri interi
Variabili e cotanti con nome Variabili e cotanti con nome
!truttura di un programma !truttura di un programma
"ezione 2 "ezione 2
2 2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Promemoria per c#i egue Promemoria per c#i egue

$on dimenticate le raccomandazioni $on dimenticate le raccomandazioni

!e non tate la%orando al PC& iete al !e non tate la%orando al PC& iete al
momento tra i momento tra i candidati alla bocciatura candidati alla bocciatura

"e lide ono uno trumento molto "e lide ono uno trumento molto
ine'cace e non aimilate i concetti ine'cace e non aimilate i concetti
mediante gli eercizi mediante gli eercizi

(ate di tutto per tenere alto il %otro li%ello (ate di tutto per tenere alto il %otro li%ello
di concentrazione di concentrazione

$on eitate a )are domande* $on eitate a )are domande*


3 3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+in)reco eercitazione ,,, +in)reco eercitazione ,,,

- - e .ualc#e piccolo altro pao a%anti ugli e .ualc#e piccolo altro pao a%anti ugli
apetti pratici apetti pratici

!eguire le lide della econda eercitazione !eguire le lide della econda eercitazione
/no all0eercizio di tampa di una %ariabile /no all0eercizio di tampa di una %ariabile
intera ecluo intera ecluo
4 4
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!toria eenziale !toria eenziale del del C C

1e/nito nel 1232 45T6T 7ell "ab8 1e/nito nel 1232 45T6T 7ell "ab8
per otituire l9 per otituire l9assembler assembler nella nella
programmazione di itemi programmazione di itemi
operati%i: in pratica& nato per creare operati%i: in pratica& nato per creare
;$I< ;$I<

Prima de/nizione precia: =ernig#am Prima de/nizione precia: =ernig#am


6 +itc#ie 4123>8 6 +itc#ie 4123>8

Prima de/nizione u'ciale: Prima de/nizione u'ciale: ANSI C ANSI C


412>38 412>38
? ?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
@a giA nel 12>0 ,,, @a giA nel 12>0 ,,,
- - erano in uo %arie %erioni di un linguaggio erano in uo %arie %erioni di un linguaggio
denominato BC con le claiC denominato BC con le claiC

Drano le prime %erioni di .uello c#e arebbe tato Drano le prime %erioni di .uello c#e arebbe tato
il C++ il C++

In%entato& de/nito& ed implementato per la prima In%entato& de/nito& ed implementato per la prima
%olta& da 7Earne !troutrup %olta& da 7Earne !troutrup
#ttp://FFF,reearc#,att,com/Gb/ #ttp://FFF,reearc#,att,com/Gb/

Primo tandard nel 122>: I!H/IDC 14>>2 Primo tandard nel 122>: I!H/IDC 14>>2

Hra iamo allo tandard C++11 Hra iamo allo tandard C++11

1eciamente di ucceo: 1eciamente di ucceo:


#ttp://FFF,tiobe,com/indeI,p#p/content/paperin)o/tpci/indeI,#tml #ttp://FFF,tiobe,com/indeI,p#p/content/paperin)o/tpci/indeI,#tml
#ttp://FFF,troutrup,com/application,#tml #ttp://FFF,troutrup,com/application,#tml
J J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Coa %edremo del C++ Coa %edremo del C++

!olo per c#i a di coa parlo: del !olo per c#i a di coa parlo: del
linguaggio C++ %edremo olo il linguaggio C++ %edremo olo il
ottoinieme procedurale ottoinieme procedurale

$H$ %edremo la programmazione $H$ %edremo la programmazione


ad oggetti ad oggetti

!arA argomento dell0inegnamento !arA argomento dell0inegnamento


di di Programmazione ad Oggetti Programmazione ad Oggetti
3 3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Iniziamo ,,, Iniziamo ,,,

5Kronteremo lo tudio del linguaggio 5Kronteremo lo tudio del linguaggio


incominciando dai eguenti concetti: incominciando dai eguenti concetti:

Introduzione eenziale del tipo Introduzione eenziale del tipo int int

@emoria di un calcolatore& proceore& @emoria di un calcolatore& proceore&


linguaggio macc#ina e linguaggi di alto li%ello linguaggio macc#ina e linguaggi di alto li%ello

@emoria di un programma C/C++ ed oggetti @emoria di un programma C/C++ ed oggetti

Dpreioni letterali Dpreioni letterali

Variabili e cotanti con nome Variabili e cotanti con nome

Compendio tipi di dato primiti%i Compendio tipi di dato primiti%i

!truttura 4empli/cata8 di un programma !truttura 4empli/cata8 di un programma


> >
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Tipo Tipo int int

In un programma C/C++ i poono cri%ere dei In un programma C/C++ i poono cri%ere dei
numeri interi& ad eempio numeri interi& ad eempio
6 6 12 12 700 700

!i poono inoltre !i poono inoltre de/nire de/nire delle delle variabili variabili di tipo di tipo
int int

!ono dei !ono dei contenitori contenitori in cui in cui memorizzare memorizzare numeri numeri
interi interi

Poono contenere un ottoinieme limitato Poono contenere un ottoinieme limitato


dei numeri interi& come %edremo meglio dei numeri interi& come %edremo meglio

Il contenuto di una %ariabile di tipo Il contenuto di una %ariabile di tipo int int puL puL
cambiare durante l0eecuzione del cambiare durante l0eecuzione del
programma programma
2 2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1e/nizione 1e/nizione

Per poter utilizzare una %ariabile di tipo Per poter utilizzare una %ariabile di tipo int int in un in un
programma& biogna prima de/nirla programma& biogna prima de/nirla

$ella de/nizione i tabilice )ondamentalmente: $ella de/nizione i tabilice )ondamentalmente:

l0 l0identifcatore identifcatore

oia il nome c#e ueremo per ri)erirci alla oia il nome c#e ueremo per ri)erirci alla
%ariabile %ariabile

opzionalmente& il %alore iniziale della %ariabile opzionalmente& il %alore iniziale della %ariabile
4 4inizializzazione inizializzazione8 8
10 10
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dempi Dempi

Dcco due eempi di de/nizione di %ariabili di Dcco due eempi di de/nizione di %ariabili di
tipo tipo int int
int a; int a; // definizione di una // definizione di una
// variabile di nome a e di // variabile di nome a e di
// tipo int // tipo int
int k=5; int k=5; // definizione di una // definizione di una
// variabile di nome k e di // variabile di nome k e di
// tipo int, inizializzata col // tipo int, inizializzata col
// valore 5 // valore 5
11 11
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizi Dercizi

!%olgere i primi due eercizi di tampa di una !%olgere i primi due eercizi di tampa di una
%ariabile intera contenuti nella econda %ariabile intera contenuti nella econda
eercitazione eercitazione
12 12
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Variabili Variabili
13 13
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Variabile Variabile

;na %ariabile M un contenitore all0interno del ;na %ariabile M un contenitore all0interno del
.uale di puL memorizzare un %alore .uale di puL memorizzare un %alore

Tale %alore Tale %alore puL %ariare nel tempo puL %ariare nel tempo
14 14
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1e/nizione di una %ariabile 1e/nizione di una %ariabile

In C/C++ M neceario elencare ogni %ariabile In C/C++ M neceario elencare ogni %ariabile
c#e arA utilizzata nel programma& prima di c#e arA utilizzata nel programma& prima di
utilizzarla utilizzarla

In particolare i dice c#e biogna In particolare i dice c#e biogna defnire defnire
ciacuna %ariabile, 5ll0atto della de/nizione ciacuna %ariabile, 5ll0atto della de/nizione
biogna attribuire alla %ariabile biogna attribuire alla %ariabile

un un tipo tipo

un nome 4 un nome 4identi/catore identi/catore8 col .uale ci i 8 col .uale ci i


ri)erirA poi a tale %ariabile ri)erirA poi a tale %ariabile

e%entualmente un %alore iniziale e%entualmente un %alore iniziale


4 4inizializzazione inizializzazione8 8
1? 1?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dempi Dempi

Prima di %edere )ormalmente la intai& Prima di %edere )ormalmente la intai&


ricordiamo i due eempi di de/nizione di ricordiamo i due eempi di de/nizione di
%ariabili di tipo %ariabili di tipo int int
int a; int a; // definizione di una // definizione di una
// variabile di nome a e di // variabile di nome a e di
// tipo int // tipo int
int k=5; int k=5; // definizione di una // definizione di una
// variabile di nome k e di // variabile di nome k e di
// tipo int, inizializzata col // tipo int, inizializzata col
// valore 5 // valore 5
1J 1J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Valore iniziale Valore iniziale

C#e %alore aume una %ariabile e non %iene C#e %alore aume una %ariabile e non %iene
inizializzataN inizializzataN

Per il momento diciamo c#e aume un %alore Per il momento diciamo c#e aume un %alore
casuale casuale

Poi %edremo meglio i ingoli cai Poi %edremo meglio i ingoli cai
13 13
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
$ota ulla intai $ota ulla intai

$ella decrizione della intai del linguaggio $ella decrizione della intai del linguaggio
C/C++ utilizzeremo la notazione con C/C++ utilizzeremo la notazione con
parentei .uadre parentei .uadre [ [... ...] ] per denotare elementi per denotare elementi
opzionali opzionali& oia parti c#e poono o meno & oia parti c#e poono o meno
comparire comparire

Tutto ciL c#e non arA contenuto tra tali Tutto ciL c#e non arA contenuto tra tali
parentei parentei [ [... ...] ] .uadre arA .uadre arA obbligatorio obbligatorio
1> 1>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!intai de/nizione %ariabile !intai de/nizione %ariabile

!intai della de/nizione di una %ariabile: !intai della de/nizione di una %ariabile:
nome_tipo nome_variabile nome_tipo nome_variabile [ [= valore_iniziale = valore_iniziale] ] ; ;

D9 poibile raggruppare le de/nizioni di piO D9 poibile raggruppare le de/nizioni di piO


%ariabili dello teo tipo in una lita eparata %ariabili dello teo tipo in una lita eparata
da da , ,

(orma generale de/nizione %ariabili: (orma generale de/nizione %ariabili:


nome_tipo nome_tipo nome_variabile1 nome_variabile1 [ [=valore_iniziale =valore_iniziale] ], ,
nome_variabile2 nome_variabile2 [ [= valore_iniziale = valore_iniziale] ], ,
,,, ,,, ; ;
12 12
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Completamento eempi Completamento eempi
int a, c;// definizione di due int a, c;// definizione di due
// variabili di nome a e c, di // variabili di nome a e c, di
// tipo int // tipo int
int k=5, d; int k=5, d; // definizione di due // definizione di due
// variabili di nome k e d, // variabili di nome k e d,
// di tipo int, di cui la // di tipo int, di cui la
// prima inizializzata // prima inizializzata
// col valore 5 // col valore 5

Vedremo uccei%amente eempi di Vedremo uccei%amente eempi di


de/nizioni di %ariabili di tipo di%ero da de/nizioni di %ariabili di tipo di%ero da int int
20 20
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
ViibilitA di una %ariabile ViibilitA di una %ariabile

;na %ariabile M ;na %ariabile M visibile visibile& oia puL eere & oia puL eere
utilizzata& utilizzata& olo a partire dal punto in cui %iene olo a partire dal punto in cui %iene
de/nita nel teto del programma de/nita nel teto del programma
21 21
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Itruzione emplice Itruzione emplice

;na de/nizione M di )atto una itruzione del ;na de/nizione M di )atto una itruzione del
C/C++ C/C++

In particolare i tratta di una coiddetta In particolare i tratta di una coiddetta


itruzione emplice itruzione emplice
22 22
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
5egnamento 5egnamento

!i puL aegnare un nuo%o %alore ad una !i puL aegnare un nuo%o %alore ad una
%ariabile mediante una %ariabile mediante una istruzione di istruzione di
assegnamento assegnamento
nome_variabile nome_variabile = = espressione espressione ; ;

Dempi: Dempi:
int v = 3 ;// definizione variabile v int v = 3 ;// definizione variabile v
coutvendl ; coutvendl ;
v = ! ; v = ! ; // a""e#na il valore ! // a""e#na il valore !
// alla variabile v // alla variabile v
23 23
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizi Dercizi

!%olgere i uccei%i eercizi della econda !%olgere i uccei%i eercizi della econda
eercitazione& /no alla lide in cui ci i c#iede eercitazione& /no alla lide in cui ci i c#iede
coa uccede e una lettura da coa uccede e una lettura da stdin stdin )allice )allice
24 24
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
;ltimo tandard C++ ;ltimo tandard C++

Pli tandard& oia le de/nizioni u'ciali dei linguaggi di Pli tandard& oia le de/nizioni u'ciali dei linguaggi di
programmazione& in generale e%ol%ono col tempo programmazione& in generale e%ol%ono col tempo

Il paaggio da uno tandard all0altro introduce peo Il paaggio da uno tandard all0altro introduce peo
cambiamenti c#e )anno Q c#e uno teo programma i cambiamenti c#e )anno Q c#e uno teo programma i
comporti in modo di%ero o addirittura non i compili piO comporti in modo di%ero o addirittura non i compili piO

"0ultimo tandard diponibile per il linguaggio C++ M "0ultimo tandard diponibile per il linguaggio C++ M
denominato C++ 2011 denominato C++ 2011

!peo abbre%iato con C++11 !peo abbre%iato con C++11

"e %erioni piO recenti dei compilatori tipicamente "e %erioni piO recenti dei compilatori tipicamente
upportano anc#e lo tandard C++11 upportano anc#e lo tandard C++11

D0 perL molto probabile c#e ancora utilizzino& come D0 perL molto probabile c#e ancora utilizzino& come
con/gurazione prede/nita& lo tandard precedente al con/gurazione prede/nita& lo tandard precedente al
C++11 C++11
2? 2?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Comportamento gcc 1/2 Comportamento gcc 1/2

Rueto %ale anc#e per il gcc Rueto %ale anc#e per il gcc

!uppoto c#e tiate utilizzando una %erione del !uppoto c#e tiate utilizzando una %erione del
gcc c#e upporta anc#e il nuo%o tandard& a%ete gcc c#e upporta anc#e il nuo%o tandard& a%ete
due poibilitA due poibilitA
18Il compilatore giA ua lo tandard C++11 di Il compilatore giA ua lo tandard C++11 di
de)ault de)ault
28Il compilatore non ua lo tandard C++11 di Il compilatore non ua lo tandard C++11 di
de)ault de)ault

$el gcc lo tandard C++11 M denotato come $el gcc lo tandard C++11 M denotato come c$$0% c$$0%

Vecc#io nome dello tandard C++11 Vecc#io nome dello tandard C++11
2J 2J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Comportamento gcc 2/2 Comportamento gcc 2/2

Potete %eri/care: Potete %eri/care:

e lo tandard C++11 M upportato dalla %erione e lo tandard C++11 M upportato dalla %erione
del compilatore c#e tate utilizzando& e del compilatore c#e tate utilizzando& e

e M elezionato di de)ault e M elezionato di de)ault


controllando& per eempio& la decrizione dell0opzione controllando& per eempio& la decrizione dell0opzione
&"td &"td nella pagina di manuale di g++ nella pagina di manuale di g++

!e il compilatore upporta lo tandard C++11 ma non !e il compilatore upporta lo tandard C++11 ma non
utilizza di de)ault& do%ete aggiungere l0opzione utilizza di de)ault& do%ete aggiungere l0opzione
&"td=c$$0% &"td=c$$0%
alla riga di comando alla riga di comando
23 23
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
In)ormazioni generali In)ormazioni generali

Potete controllare lo tato attuale degli tandard C++ Potete controllare lo tato attuale degli tandard C++
all0;+" all0;+"

#ttp://FFF,open-td,org/Etc1/c22/Fg21/ #ttp://FFF,open-td,org/Etc1/c22/Fg21/

"0ultimo dra)t dello tandard i puL caricare "0ultimo dra)t dello tandard i puL caricare
gratuitamente gratuitamente

"o tandard M il documento u cui M critto "o tandard M il documento u cui M critto TUTTO TUTTO
.uello c#e riguarda il linguaggio .uello c#e riguarda il linguaggio

D0 la riora autoritati%a da utilizzare per c#iarire D0 la riora autoritati%a da utilizzare per c#iarire
ogni dubbio o conocere ogni dettaglio ogni dubbio o conocere ogni dettaglio

Potete controllare lo tato di a%anzamento del gcc in Potete controllare lo tato di a%anzamento del gcc in
merito allo tandard C++11 alla pagina merito allo tandard C++11 alla pagina
#ttp://gcc,gnu,org/proEect/cII0I,#tml #ttp://gcc,gnu,org/proEect/cII0I,#tml
2> 2>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizi Dercizi

+iprendere la econda eercitazione& /no +iprendere la econda eercitazione& /no


all0eercizio ulla moltiplicazione ecluo all0eercizio ulla moltiplicazione ecluo
22 22
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
;n pL di nozioni ;n pL di nozioni

Hra c#e abbiamo ac.uiito un po0 piO di Hra c#e abbiamo ac.uiito un po0 piO di
)amiliaritA col linguaggio& cominciamo ad )amiliaritA col linguaggio& cominciamo ad
accrecere le notre conocenze accrecere le notre conocenze

!tiamo per aKrontare una e.uenza !tiamo per aKrontare una e.uenza
relati%amente lunga di nuo%i concetti relati%amente lunga di nuo%i concetti
prima del proimo eercizio prima del proimo eercizio

Il concetto )ondamentale u cui cotruiremo Il concetto )ondamentale u cui cotruiremo


le nozioni riportate in .ueta preentazione M le nozioni riportate in .ueta preentazione M
.uello di .uello di memoria memoria
30 30
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
@emoria principale @emoria principale

Partiamo da .ualc#e dettaglio ul Partiamo da .ualc#e dettaglio ul


)unzionamento interno di un elaboratore )unzionamento interno di un elaboratore

In particolare& %edremo: In particolare& %edremo:

memoria principale memoria principale

processore processore

linguaggio macchina linguaggio macchina

linguaggi ad alto livello linguaggi ad alto livello


31 31
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
@emoria principale e celle @emoria principale e celle

1e/niamo 1e/niamo memoria memoria 4principale8 di un 4principale8 di un


elaboratore il contenitore in cui ono elaboratore il contenitore in cui ono
memorizzati tutti i dati u cui la%ora il memorizzati tutti i dati u cui la%ora il
proceore proceore

Poiamo c#ematizzare la memoria come una Poiamo c#ematizzare la memoria come una
e.uenza contigua di e.uenza contigua di celle celle 4c#iamate anc#e 4c#iamate anc#e
locazioni di memoria locazioni di memoria8 8

Ciacuna cella )ornice Ciacuna cella )ornice


l0 l0unit minima di unit minima di
memorizzazione memorizzazione& oia & oia
l0elemento piO piccolo in cui l0elemento piO piccolo in cui
i puL memorizzare un0in)ormazione i puL memorizzare un0in)ormazione
32 32
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Contenuto cella Contenuto cella

Hgni cella contiene un Hgni cella contiene un byte byte& oia una & oia una
e.uenza di e.uenza di bit bit 4ci)re binarie8 4ci)re binarie8

Tipicamente un bSte M cotituito da > bit Tipicamente un bSte M cotituito da > bit
Dempio: 01100101 Dempio: 01100101

Tutte le celle #anno .uindi la tea Tutte le celle #anno .uindi la tea
dimenione in termini di numero di bit dimenione in termini di numero di bit

In generale l0eatto numero di bit in un bSte In generale l0eatto numero di bit in un bSte
potrebbe %ariare da una macc#ina all0altra potrebbe %ariare da una macc#ina all0altra
33 33
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!c#ema memoria !c#ema memoria

Ciacuna cella M Ciacuna cella M


univocamente univocamente
indi%iduata mediante indi%iduata mediante
un numero naturale& un numero naturale&
c#iamato c#iamato indirizzo indirizzo
della cella della cella
Memoria Memoria
calcolatore calcolatore
Prima cella
Ultima cella
34 34
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Celle di memoria e numeri Celle di memoria e numeri

I bit contenuti in una cella poono eere utilizzati I bit contenuti in una cella poono eere utilizzati
per memorizzare un numero per memorizzare un numero

Il numero M rappreentato nella coiddetta Il numero M rappreentato nella coiddetta


notazione binaria notazione binaria

!enza entrare nei dettagli della notazione binaria& !enza entrare nei dettagli della notazione binaria&
)acciamo olo un eempio di come i ottiene )acciamo olo un eempio di come i ottiene
.ueto riultato& per eempio con i numeri .ueto riultato& per eempio con i numeri naturali naturali
4oia gli interi non negati%i8 4oia gli interi non negati%i8
3? 3?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+appreentazione +appreentazione nu numeri meri

(acciamo corripondere un numero ad ogni (acciamo corripondere un numero ad ogni


combinazione combinazione 4 4confgurazione confgurazione8 di bit 8 di bit

Dempio in cao di cella da > bit: Dempio in cao di cella da > bit:
00000000 00000000 0 0
00000001 00000001 1 1
00000010 00000010 2 2
00000011 00000011 3 3
,,, ,,,
11111111 11111111 2?? 2??
3J 3J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
$umeri negati%i $umeri negati%i

Con una tecnica imile i poono rappreentare anc#e Con una tecnica imile i poono rappreentare anc#e
numeri negati%i& )acendo corripondere un certo numeri negati%i& )acendo corripondere un certo
ottoinieme delle poibili con/gurazioni di bit ai ottoinieme delle poibili con/gurazioni di bit ai
numeri poiti%i& e l0altro ottoinieme ai numeri numeri poiti%i& e l0altro ottoinieme ai numeri
negati%i negati%i

Idea piO emplice Idea piO emplice

;tilizzare un bit per il egno ;tilizzare un bit per il egno


33 33
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1omanda 1omanda

D0 poibile memorizzare il contenuto di una %ariabile D0 poibile memorizzare il contenuto di una %ariabile
di tipo di tipo int int all0interno di una cella di memoriaN all0interno di una cella di memoriaN
3> 3>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+ipota +ipota

!e il %alore M& per eempio& piO grande di 2?? allora !e il %alore M& per eempio& piO grande di 2?? allora
certamente no* certamente no*
32 32
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
;o di celle conecuti%e 1/2 ;o di celle conecuti%e 1/2

In/ne& per rappreentare numeri piO grandi di .uelli In/ne& per rappreentare numeri piO grandi di .uelli
rappreentabili con una ola cella& i rappreentabili con una ola cella& i accorpano accorpano piO piO
celle celle conecuti%e conecuti%e

!i uano per eempio tutte le con/gurazioni !i uano per eempio tutte le con/gurazioni
poibili di bit di una e.uenza di due o .uattro poibili di bit di una e.uenza di due o .uattro
celle contigue celle contigue

Vediamo un eempio Vediamo un eempio


40 40
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+appreentazione numeri 2/2 +appreentazione numeri 2/2
00000000 00000000
00000000 00000000 0 0
00000000 00000000
00000001 00000001 1 1
00000000 00000000
00000010 00000010 2 2
00000000 00000000
00000011 00000011 3 3
,,, ,,,
00000000 00000000
11111111 11111111 2?? 2??

Dempio in cao di due celle da > bit ciacuna: Dempio in cao di due celle da > bit ciacuna:
00000001 00000001
00000000 00000000 2?J 2?J
00000001 00000001
00000001 00000001 2?3 2?3
00000001 00000001
00000010 00000010 2?> 2?>
00000001 00000001
00000011 00000011 2?2 2?2
,,, ,,,
00000001 00000001
11111111 11111111 ?11 ?11
00000010 00000010
00000000 00000000 ?12 ?12
00000010 00000010
00000001 00000001 ?13 ?13
00000010 00000010
00000010 00000010 ?14 ?14
,

,

,
,

,

,
41 41
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+appreentazione int +appreentazione int

;na %ariabile di tipo int M tipicamente rappreentata u ;na %ariabile di tipo int M tipicamente rappreentata u
4 celle conecuti%e 4 celle conecuti%e

Vedremo i dettagli in eguito Vedremo i dettagli in eguito


42 42
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Proceore Proceore

Pli altri elementi da coniderare per capire i Pli altri elementi da coniderare per capire i
concetti alla bae del linguaggio C/C++ ono il concetti alla bae del linguaggio C/C++ ono il
proceore ed il uo linguaggio proceore ed il uo linguaggio

Tutte le operazioni di elaborazione delle Tutte le operazioni di elaborazione delle


in)ormazioni eKettuate da un calcolatore ono in)ormazioni eKettuate da un calcolatore ono

%olte direttamente dal proceore& oppure %olte direttamente dal proceore& oppure

%olte da altri componenti dietro comando del %olte da altri componenti dietro comando del
proceore proceore
43 43
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hperazioni Hperazioni

;n proceore M in grado di compiere olo operazioni ;n proceore M in grado di compiere olo operazioni
molto emplici: molto emplici:

lettura/crittura/copia di una o piO celle di memoria lettura/crittura/copia di una o piO celle di memoria

omma/ottrazione/moltiplicazione/di%iione del omma/ottrazione/moltiplicazione/di%iione del


contenuto di una o piO celle di memoria contenuto di una o piO celle di memoria

lettura/crittura in zone di memoria 0peciali0 per lettura/crittura in zone di memoria 0peciali0 per
pilotare dipoiti%i di ingreo/ucita 4ad eempio pilotare dipoiti%i di ingreo/ucita 4ad eempio
c#ede %ideo8 c#ede %ideo8

altre emplici operazioni ulle celle di memoria altre emplici operazioni ulle celle di memoria

Tipicamente un proceore riece a la%orare u un certo Tipicamente un proceore riece a la%orare u un certo
numero di celle contigue alla %olta, Tale e.uenza di celle numero di celle contigue alla %olta, Tale e.uenza di celle
M detta M detta parola parola di maccina !macine "ord# di maccina !macine "ord#

!i dice c#e un proceore #a una arc#itettura a 1J& 32 !i dice c#e un proceore #a una arc#itettura a 1J& 32
oppure J4 bit e la%ora u parole da 2& 4 oppure > oppure J4 bit e la%ora u parole da 2& 4 oppure >
bSte bSte
44 44
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggio macc#ina "inguaggio macc#ina

Hgni proceore M caratterizzato da un proprio inieme Hgni proceore M caratterizzato da un proprio inieme
di di istruzioni istruzioni& tramite le .uali M poibile )argli %olgere & tramite le .uali M poibile )argli %olgere
le precedenti operazioni le precedenti operazioni

"0 "0inieme delle itruzioni inieme delle itruzioni di un proceore %iene di un proceore %iene
c#iamato c#iamato linguaggio maccina linguaggio maccina di .uel proceore di .uel proceore

Hgni itruzione M identi/cata da una certa Hgni itruzione M identi/cata da una certa
con/gurazione di bit con/gurazione di bit

!egue un eempio di programma in linguaggio !egue un eempio di programma in linguaggio


macc#ina macc#ina
4? 4?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dempio programma Dempio programma
0011001000110110 0011001000110110
0101010100100011 0101010100100011
0011011001010101 0011011001010101
1110001111100011 1110001111100011
,,, ,,,
1001101011100011 1001101011100011
4J 4J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggio macc#ina "inguaggio macc#ina

Per )ar eeguire un programma ad un proceore& Per )ar eeguire un programma ad un proceore&
bata bata

memorizzare da .ualc#e parte nella memoria la memorizzare da .ualc#e parte nella memoria la
e.uenza di con/gurazioni di bit relati%a alle e.uenza di con/gurazioni di bit relati%a alle
itruzioni da eeguire itruzioni da eeguire

dire al proceore a c#e indirizzo i tro%a la prima di dire al proceore a c#e indirizzo i tro%a la prima di
tali itruzioni tali itruzioni

Il proceore eeguirA& una dopo l0altra& le itruzioni Il proceore eeguirA& una dopo l0altra& le itruzioni
c#e tro%a a partire da tale indirizzo c#e tro%a a partire da tale indirizzo
43 43
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hrdine di eecuzione 1/2 Hrdine di eecuzione 1/2

Hrdine di eecuzione Hrdine di eecuzione predefnito predefnito delle itruzioni: l0una delle itruzioni: l0una
dopo l0altra dopo l0altra
0011001000110110 0011001000110110
0101010100100011 0101010100100011
0011011001010101 0011011001010101
1110001111100011 1110001111100011
,,, ,,,
1001101011100011 1001101011100011
4> 4>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hrdine di eecuzione 2/2 Hrdine di eecuzione 2/2
"0ordine con cui ono eeguite le itruzioni cambia olo "0ordine con cui ono eeguite le itruzioni cambia olo
e %engono incontrate peciali e %engono incontrate peciali itruzioni di alto itruzioni di alto %ero un %ero un
di%ero indirizzo di%ero indirizzo
0011001000110110 0011001000110110
0101010100100011 0101010100100011
0011011001010101 0011011001010101
1110001111100011 1110001111100011
,,, ,,,
1001101011100011 1001101011100011
Cambio di ordine do%uto Cambio di ordine do%uto
ad una itruzione di alto ad una itruzione di alto
in avanti in avanti
;n alto puL anc#e a%%enire all0 ;n alto puL anc#e a%%enire all0indietro indietro& oia %ero un & oia %ero un
indirizzo in)eriore ripetto a .uello in cui i tro%a indirizzo in)eriore ripetto a .uello in cui i tro%a
l0itruzione di alto tea l0itruzione di alto tea
42 42
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1i'coltA linguaggio macc#ina 1i'coltA linguaggio macc#ina

In de/niti%a& data la emplicitA delle itruzioni e dei In de/niti%a& data la emplicitA delle itruzioni e dei
dati u cui la%ora un proceore i #a c#e: dati u cui la%ora un proceore i #a c#e:

cri%ere 4interamente8 in linguaggio macc#ina un cri%ere 4interamente8 in linguaggio macc#ina un


programma c#e )accia coe complee& programma c#e )accia coe complee&

.uale ad eempio un itema operati%o o anc#e .uale ad eempio un itema operati%o o anc#e
piO emplicemente un programma c#e de%e piO emplicemente un programma c#e de%e
diegnare/aggiornare un0inter)accia gra/ca ed diegnare/aggiornare un0inter)accia gra/ca ed
uarla per interagire con gli utenti& uarla per interagire con gli utenti&
di%iene un la%oro etremamente impegnati%o e di%iene un la%oro etremamente impegnati%o e
cotoo cotoo
?0 ?0
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggi di alto li%ello 1/3 "inguaggi di alto li%ello 1/3

Rueto M )ondamentalmente il moti%o per cui ono Rueto M )ondamentalmente il moti%o per cui ono
tati in%entati moltiimi altri linguaggi coiddetti tati in%entati moltiimi altri linguaggi coiddetti ad ad
alto li%ello alto li%ello& c#e ono molto piO 0%icini0 al linguaggio & c#e ono molto piO 0%icini0 al linguaggio
umano ripetto al linguaggio macc#ina umano ripetto al linguaggio macc#ina

Tali linguaggi i baano ul concetto di Tali linguaggi i baano ul concetto di astrazione astrazione
dalla macc#ina ottotante: dalla macc#ina ottotante: atraggono dai dettagli atraggono dai dettagli& &
coiddetti di coiddetti di basso livello basso livello& .uali ad eempio celle di & .uali ad eempio celle di
memoria ed indirizzi& e permettono al programmatore memoria ed indirizzi& e permettono al programmatore
di ragionare e di cri%ere il proprio programma in di ragionare e di cri%ere il proprio programma in
termini di termini di dati ed operazioni piO complei dati ed operazioni piO complei, ,
?1 ?1
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggi di alto li%ello 2/3 "inguaggi di alto li%ello 2/3

5d eempio& .uando abbiamo utilizzato %ariabili di tipo 5d eempio& .uando abbiamo utilizzato %ariabili di tipo
int int

Ci iamo preoccupati di come memorizzare i %alori Ci iamo preoccupati di come memorizzare i %alori
in una e.uenza di celleN in una e.uenza di celleN

Ci iamo preoccupati di do%e memorizzare Ci iamo preoccupati di do%e memorizzare


eattamente in memoria tale e.uenza di celleN eattamente in memoria tale e.uenza di celleN

$o $o& abbiamo utilizzato il tipo & abbiamo utilizzato il tipo int int nel uo igni/cato nel uo igni/cato
atratto di contenitore di numeri interi atratto di contenitore di numeri interi
?2 ?2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggi di alto li%ello 3/3 "inguaggi di alto li%ello 3/3

+iaumendo& col tipo +iaumendo& col tipo int int 4e lo teo accadrA con gli altri 4e lo teo accadrA con gli altri
tipi di dato8 tipi di dato8

si astrae dalle singole celle di memoria si astrae dalle singole celle di memoria: non i : non i
%edono piO le ingole celle di memoria in cui ono %edono piO le ingole celle di memoria in cui ono
memorizzati i numeri memorizzati i numeri

i puL .uindi ragionare e cri%ere il programma i puL .uindi ragionare e cri%ere il programma
direttamente in termini di numeri interi direttamente in termini di numeri interi

i la%ora cioM i la%ora cioM ad alto li%ello ad alto li%ello& enza preoccupari di & enza preoccupari di
come e do%e aranno realmente memorizzati e come e do%e aranno realmente memorizzati e
manipolati tali numeri a bao li%ello manipolati tali numeri a bao li%ello

In generale& d In generale& dato un problema da riol%ere& diporre di dati ato un problema da riol%ere& diporre di dati
ed operazioni piO atratti e complei permette di ed operazioni piO atratti e complei permette di
decri%ere in modo molto piO emplice e c#iaro gli elementi decri%ere in modo molto piO emplice e c#iaro gli elementi
del problema ed i pai c#e i debbono eKettuare del problema ed i pai c#e i debbono eKettuare
?3 ?3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggio ad alto li%ello 1/2 "inguaggio ad alto li%ello 1/2
Java
"inguaggio macc#ina "inguaggio macc#ina
"
i
%
e
l
l
o

d
i

a

t
r
a
z
i
o
n
e

c
r
e

c
e
n
t
e
"
i
%
e
l
l
o

d
i

a

t
r
a
z
i
o
n
e

c
r
e

c
e
n
t
e
?4 ?4
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
"inguaggio ad alto li%ello 2/2 "inguaggio ad alto li%ello 2/2

Il C/C++ M .uindi un linguaggio di alto li%ello Il C/C++ M .uindi un linguaggio di alto li%ello

Il )atto di non coincidere con il linguaggio Il )atto di non coincidere con il linguaggio
macc#ina di neun proceore #a perL un prezzo macc#ina di neun proceore #a perL un prezzo

Per poter eere eeguito da un calcolatore& un Per poter eere eeguito da un calcolatore& un
programma critto in C/C++ %a prima programma critto in C/C++ %a prima tradotto tradotto
nel linguaggio macc#ina nel linguaggio macc#ina del proceore del del proceore del
calcolatore u cui lo %ogliamo eeguire calcolatore u cui lo %ogliamo eeguire

Rueta operazione %iene comunemente Rueta operazione %iene comunemente


c#iamata c#iamata compilazione compilazione& ed i programmi c#e la & ed i programmi c#e la
eeguono %engono c#iamati eeguono %engono c#iamati compilatori compilatori
?? ??
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
@emoria di un @emoria di un
programma C/C++ programma C/C++
ed oggetti ed oggetti
?J ?J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
@emoria di un programma @emoria di un programma

1e/niamo 1e/niamo memoria memoria di un programma in di un programma in


eecuzione& o eecuzione& o processo processo& il contenitore 4logico8 in & il contenitore 4logico8 in
cui ono memorizzati tutti i dati del programma cui ono memorizzati tutti i dati del programma
4ed altre in)ormazioni c#e %edremo in eguito8 4ed altre in)ormazioni c#e %edremo in eguito8
durante la ua eecuzione durante la ua eecuzione

$ei programmi C/C++ la memoria di un $ei programmi C/C++ la memoria di un


programma #a la tea identica truttura della programma #a la tea identica truttura della
memoria del calcolatore %ita precedentemente: M memoria del calcolatore %ita precedentemente: M
una e.uenza contigua di una e.uenza contigua di celle celle 4 4locazioni di locazioni di
memoria memoria8 c#e cotituicono l0unitA minima di 8 c#e cotituicono l0unitA minima di
memorizzazione memorizzazione

"e celle& tutte della tea dimenione& contengono "e celle& tutte della tea dimenione& contengono
un un byte byte ciacuna ciacuna
?3 ?3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1imenione bSte 1imenione bSte

"0 "0eatta dimenione eatta dimenione c#e de%e a%ere un c#e de%e a%ere un byte byte
non M peci/cata nello tandard non M peci/cata nello tandard del linguaggio del linguaggio
C/C++& e& come abbiamo %ito& teoricamente C/C++& e& come abbiamo %ito& teoricamente
puL %ariare da una macc#ina all0altra puL %ariare da una macc#ina all0altra

"o tandard peci/ca olo c#e un bSte "o tandard peci/ca olo c#e un bSte deve deve
eere grande abbatanza da contenere un eere grande abbatanza da contenere un
oggetto di tipo oggetto di tipo car car

Vedremo in eguito coa M un oggetto di tipo Vedremo in eguito coa M un oggetto di tipo
car car& per ora ci bata apere c#e M & per ora ci bata apere c#e M
utilizzato principalmente per memorizzare utilizzato principalmente per memorizzare
caratteri caratteri
?> ?>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1alle celle ai dati 1alle celle ai dati

In C/C++ i poono memorizzare delle In C/C++ i poono memorizzare delle


in)ormazioni piO complee dei emplici in)ormazioni piO complee dei emplici
numeri interi rappreentabili con una numeri interi rappreentabili con una
ingola cella di memoria ingola cella di memoria

!i poono memorizzare i dati all0interno !i poono memorizzare i dati all0interno


di contenitori c#e c#iameremo di contenitori c#e c#iameremo
genericamente genericamente oggetti oggetti
?2 ?2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hggetto& %alore& memoria Hggetto& %alore& memoria

;n ;n oggetto oggetto M un9 M un9atrazione atrazione di cella di memoria di cella di memoria

D0 caratterizzato da un D0 caratterizzato da un valore valore

D0 memorizzato in una D0 memorizzato in una se$uenza di celle se$uenza di celle


contigue contigue

Conideriamo per eempio& come oggetto& Conideriamo per eempio& come oggetto&
un numero naturale maggiore di 2?? un numero naturale maggiore di 2??

Come abbiamo %ito& coQ come i puL Come abbiamo %ito& coQ come i puL
rappreentare ogni numero naturale da 0 a rappreentare ogni numero naturale da 0 a
2?? con una determinata con/gurazione di > 2?? con una determinata con/gurazione di >
bit& i puL rappreentare un %alore naturale bit& i puL rappreentare un %alore naturale
maggiore di 2?? u maggiore di 2?? u N N celle conecuti%e& con celle conecuti%e& con
una determinata con/gurazione dei riultanti una determinata con/gurazione dei riultanti
>T >TN N bit bit
J0 J0
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1igreione u oggetti 1igreione u oggetti

Per c#i a%ee giA a%uto a c#e )are con i Per c#i a%ee giA a%uto a c#e )are con i
coiddetti coiddetti linguaggi ad oggetti linguaggi ad oggetti

Pli oggetti di cui parliamo in .ueto Pli oggetti di cui parliamo in .ueto
coro ono un concetto piO generale di coro ono un concetto piO generale di
.uello di oggetto de/nito in tali .uello di oggetto de/nito in tali
linguaggi linguaggi

;eremo cioM il termine oggetto col ;eremo cioM il termine oggetto col
igni/cato generale di contenitore di igni/cato generale di contenitore di
in)ormazioni 4%alori8 in)ormazioni 4%alori8
J1 J1
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hggetto in memoria& indirizzo Hggetto in memoria& indirizzo
Indirizzo dell0oggetto in Indirizzo dell0oggetto in
memoria: memoria: indirizzo della indirizzo della
prima cella della prima cella della
e.uenza di celle e.uenza di celle
occupate dall0oggetto occupate dall0oggetto
Memoria Memoria
Prima cella
Oggetto Oggetto
Ultima cella
J2 J2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1omanda 1omanda

5bbiamo giA utilizzato .ualc#e tipo di oggettoN 5bbiamo giA utilizzato .ualc#e tipo di oggettoN
J3 J3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
+ipota +ipota

!Q& gli oggetti di tipo !Q& gli oggetti di tipo int int
J4 J4
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Indirizzo& %alore e tipo 1/2 Indirizzo& %alore e tipo 1/2

;n oggetto M caratterizzato da ;n oggetto M caratterizzato da

un un indirizzo indirizzo

5d eempio 132>& il c#e %uol dire c#e l0oggetto i 5d eempio 132>& il c#e %uol dire c#e l0oggetto i
tro%a in memoria a partire dalla cella di indirizzo tro%a in memoria a partire dalla cella di indirizzo
132> 132>

un un valore valore

In .ueto emplice eempio l0oggetto M di tipo In .ueto emplice eempio l0oggetto M di tipo
numerico& occupa una ola cella e la numerico& occupa una ola cella e la
con/gurazione di bit della cella rappreenta il con/gurazione di bit della cella rappreenta il
%alore 4 %alore 4
4
...
...
1328
J? J?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Indirizzo& %alore e tipo 2/2 Indirizzo& %alore e tipo 2/2

un un tipo !di dato# tipo !di dato#

!peci/ca i !peci/ca i %alori poibili %alori poibili per per


l0oggetto e le l0oggetto e le operazioni c#e i operazioni c#e i
poono eKettuare poono eKettuare ull0oggetto ull0oggetto
JJ JJ
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Tipi di dato primiti%i Tipi di dato primiti%i
J3 J3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Tipo di dato Tipo di dato

Tipo di un dato !oggetto# Tipo di un dato !oggetto#


Inieme di %alori c#e l0oggetto puL aumere ed Inieme di %alori c#e l0oggetto puL aumere ed
inieme di operazioni c#e i poono eKettuare u inieme di operazioni c#e i poono eKettuare u
.uell0oggetto .uell0oggetto

Ruali tipi di dato eitono in C/C++N Ruali tipi di dato eitono in C/C++N

Partiamo dai tipi di dato primiti%i Partiamo dai tipi di dato primiti%i
J> J>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Tipi di dato primiti%i Tipi di dato primiti%i
Ruattro tipi di dato primiti%i Ruattro tipi di dato primiti%i
Nome tipo Nome tipo Categoria di dati che rappresenta Categoria di dati che rappresenta
int int ottoinieme dei numeri interi ottoinieme dei numeri interi
%oat %oat ottoinieme dei numeri reali ottoinieme dei numeri reali
double double ottoinieme dei numeri reali ottoinieme dei numeri reali
con maggiore preciione ripetto con maggiore preciione ripetto
al tipo al tipo %oat %oat
car car caratteri caratteri
bool bool booleani 4%ero/)alo& olo C++8 booleani 4%ero/)alo& olo C++8
Per ora %edremo piO in dettaglio il olo tipo Per ora %edremo piO in dettaglio il olo tipo int int
J2 J2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Tipo Tipo int int

Il tipo Il tipo int int M M di%ero di%ero dal tipo I$TD+H inteo in eno dal tipo I$TD+H inteo in eno
matematico& do%e l0inieme in/nito degli interi U M dato da matematico& do%e l0inieme in/nito degli interi U M dato da
V-&-2&-1&0&+1&+2&-W V-&-2&-1&0&+1&+2&-W

H%%ero il tipo H%%ero il tipo int int #a un inieme di %alori #a un inieme di %alori limitato limitato: :

!insieme esatto dei valori possibili dipende dalla !insieme esatto dei valori possibili dipende dalla
macchina macchina

$ormalmente il compilatore M con/gurato in maniera $ormalmente il compilatore M con/gurato in maniera


tale c#e gli oggeti di tipo tale c#e gli oggeti di tipo int int iano memorizzati in una iano memorizzati in una
P5+H"5 1I @5CCXI$5 P5+H"5 1I @5CCXI$5& c#e tipicamente M lunga 2& 4 o > & c#e tipicamente M lunga 2& 4 o >
bSte& oia 1J& 32 o J4 bit bSte& oia 1J& 32 o J4 bit

!e la macc#ina #a parole a 1J bit: !e la macc#ina #a parole a 1J bit:


Y-2 Y-2
1? 1?
& 2 & 2
1? 1?
-1Z o%%ero Y-323J>& +323J3Z -1Z o%%ero Y-323J>& +323J3Z

!e la macc#ina #a parole a 32 bit: !e la macc#ina #a parole a 32 bit:


Y-2 Y-2
31 31
& 2 & 2
31 31
-1Z o%%ero Y-21434>3J4>& +21434>3J43Z -1Z o%%ero Y-21434>3J4>& +21434>3J43Z

,,, ,,,
30 30
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hperazioni aritmetic#e Hperazioni aritmetic#e int int

5l tipo 5l tipo int int ono applicabili i eguenti operatori: ono applicabili i eguenti operatori:
$ $ 5ddizione 5ddizione
& & !ottrazione !ottrazione
' ' @oltiplicazione @oltiplicazione
( ( 1i%iione intera 4di%ero dalla di%iione reale*8 1i%iione intera 4di%ero dalla di%iione reale*8
D,& D,& 10/3 [ 3 10/3 [ 3
) ) @odulo 4reto della di%iione intera8 @odulo 4reto della di%iione intera8
D,& D,& 10\3 [ 1 10\3 [ 1
?\3 [ 2 ?\3 [ 2
In )ormula: dati tre numeri naturali In )ormula: dati tre numeri naturali divid divid& & divis divis e e
ris ris& do%e ri[di%id/di%i 4di%iione intera8& il reto & do%e ri[di%id/di%i 4di%iione intera8& il reto
M il numero naturale M il numero naturale res res tale c#e tale c#e
divid divid [ [ ris ris T T divis divis + + res res
31 31
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dempio Dempio
int v ; int v ; // definizione variabile v // definizione variabile v
v = ! ; v = ! ; // a""e#na il valore ! // a""e#na il valore !
// alla variabile v // alla variabile v
v = 2 ' 3 ; v = 2 ' 3 ; // a""e#na il valore 6 // a""e#na il valore 6
// alla variabile v // alla variabile v
In eguito& %edremo in dettaglio tutti i tipi di In eguito& %edremo in dettaglio tutti i tipi di
espressioni espressioni c#e i poono cri%ere c#e i poono cri%ere
32 32
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizi Dercizi

!%olgere i uccei%i eercizi della econda !%olgere i uccei%i eercizi della econda
eercitazione& /no all0eercizio di cambio dei eercitazione& /no all0eercizio di cambio dei
%alori di due %ariabili ecluo %alori di due %ariabili ecluo
33 33
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dpreioni letterali Dpreioni letterali
34 34
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dpreioni letterali Dpreioni letterali

"e epreioni letterali denotano "e epreioni letterali denotano valori costanti valori costanti

!ono peo c#iamate emplicemente !ono peo c#iamate emplicemente letterali letterali o o
costanti senza nome costanti senza nome

"e poibili epreioni letterali utilizzabili in "e poibili epreioni letterali utilizzabili in
C/C++ ono C/C++ ono

numeri interi numeri interi

numeri reali numeri reali

cotanti carattere cotanti carattere

cotanti tringa cotanti tringa

Vedremo le ultime tre categorie piO a%anti Vedremo le ultime tre categorie piO a%anti
3? 3?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
$umeri interi $umeri interi
In .uanto in%ece ai numeri interi& ecco alcuni o%%i In .uanto in%ece ai numeri interi& ecco alcuni o%%i
eempi dei letterali utilizzabili in un programma eempi dei letterali utilizzabili in un programma
C/C++: C/C++:
6 6 12 12 700 700
3J 3J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Cotanti con nome Cotanti con nome
33 33
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Cotanti con nome Cotanti con nome

;na de/nizione di una ;na de/nizione di una costante con nome costante con nome aocia aocia
permanentemente un oggetto di %alore cotante ad un permanentemente un oggetto di %alore cotante ad un
identi/catore identi/catore

"a de/nizione M identica a .uella di una %ariabile& a parte "a de/nizione M identica a .uella di una %ariabile& a parte

5ggiunta della parola c#ia%e 5ggiunta della parola c#ia%e con"t con"t all0inizio all0inizio

Hbbligo di inizializzazione Hbbligo di inizializzazione

Dempi: Dempi:
con"t int ( = 100; con"t int ( = 100;
con"t int ) ; con"t int ) ; // errato* manca // errato* manca
// inizializzazione // inizializzazione

Per ora conideriamo olo cotanti con nome di tipo Per ora conideriamo olo cotanti con nome di tipo int int
3> 3>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Cotanti e %ariabili Cotanti e %ariabili

;na cotante M un9 ;na cotante M un9atrazione atrazione simbolica simbolica di un %alore: di un %alore: i da i da
cioM un nome ad un %alore cioM un nome ad un %alore

D0 una aociazione D0 una aociazione identi/catore-%alore identi/catore-%alore c#e c#e non cambia non cambia
mai mai durante l9eecuzione durante l9eecuzione

Non si pu* Non si pu* .uindi .uindi assegnare un nuovo valore ad una assegnare un nuovo valore ad una
costante costante mediante una itruzione di aegnamento mediante una itruzione di aegnamento

In%ece& nel cao di una In%ece& nel cao di una variabile variabile

"9 "9aociazione identi/catore-indirizzo non cambia aociazione identi/catore-indirizzo non cambia mai mai
durante l9eecuzione& ma puL cambiare l9 durante l9eecuzione& ma puL cambiare l9associazione associazione
identifcatore"valore identifcatore"valore

;no teo identi/catore puL denotare %alori diKerenti ;no teo identi/catore puL denotare %alori diKerenti
in momenti di%eri dell9eecuzione del programma in momenti di%eri dell9eecuzione del programma
32 32
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizio 1/2 Dercizio 1/2

!cri%ere un programma in cui i


!cri%ere un programma in cui i
de/nice una cotante intera e e ne
de/nice una cotante intera e e ne
tampa il %alore ullo c#ermo col
tampa il %alore ullo c#ermo col
eguente )ormato:
eguente )ormato:
#l valore della costante $ 1%.
#l valore della costante $ 1%.

D i %a a capo
D i %a a capo
>0 >0
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizio 2/2 Dercizio 2/2
&include 'iostream(
&include 'iostream(
using namespace std)
using namespace std)
main*+
main*+
,
,


const int i = 1% )
const int i = 1% )


cout''-#l valore $ .''i''/./''endl )
cout''-#l valore $ .''i''/./''endl )
0
0
>1 >1
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!truttura 4empli/cata8 !truttura 4empli/cata8
di un programma di un programma
>2 >2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!truttura programmi !truttura programmi

In .ueto inegnamento %edremo olo In .ueto inegnamento %edremo olo


programmi %iluppati u di un unico /le programmi %iluppati u di un unico /le
orgente orgente

Vedrete lo %iluppo di un programma u piO Vedrete lo %iluppo di un programma u piO


/le nel coro di /le nel coro di Programmazione II Programmazione II

$elle proime lide iniziamo a %edere la $elle proime lide iniziamo a %edere la
truttura empli/cata di un programma truttura empli/cata di un programma

Come primo pao& per moti%are la preenza Come primo pao& per moti%are la preenza
delle coiddette delle coiddette direttive direttive in un programma& in un programma&
partiamo dal menzionare il partiamo dal menzionare il pre"processore pre"processore
>3 >3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Pre-proceore Pre-proceore

Prima della compilazione %era e propria& il /le orgente Prima della compilazione %era e propria& il /le orgente
%iene manipolato dal coiddetto %iene manipolato dal coiddetto pre&processore pre&processore& il cui & il cui
compito M eKettuare delle modi/c#e o delle aggiunte al compito M eKettuare delle modi/c#e o delle aggiunte al
teto originario teto originario

"a nuo%a %erione del programma %iene memorizzata in "a nuo%a %erione del programma %iene memorizzata in
un un fle temporaneo fle temporaneo& ed M .ueto il %ero /le c#e %iene & ed M .ueto il %ero /le c#e %iene
paato al compilatore paato al compilatore

Il /le temporaneo M poi automaticamente ditrutto alla Il /le temporaneo M poi automaticamente ditrutto alla
/ne della compilazione /ne della compilazione

Vedremo in eguito coa )a il pre-proceore in dettaglio& Vedremo in eguito coa )a il pre-proceore in dettaglio&
.uello c#e ci bata apere per ora M c#e il pre-proceore .uello c#e ci bata apere per ora M c#e il pre-proceore
%iene pilotato dal programmatore mediante le coiddette %iene pilotato dal programmatore mediante le coiddette
direttive direttive inerite nel /le orgente inerite nel /le orgente
>4 >4
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
1ic#iarazioni e de/nizioni 1ic#iarazioni e de/nizioni

$elle proime lide metteremo in e%idenza un $elle proime lide metteremo in e%idenza un
tipo di itruzioni c#iamate tipo di itruzioni c#iamate diciarazioni diciarazioni

;na dic#iarazione M una itruzione in cui i ;na dic#iarazione M una itruzione in cui i
introduce un nuo%o identi/catore introduce un nuo%o identi/catore

"e de/nizioni ono cai particolari di dic#iarazioni "e de/nizioni ono cai particolari di dic#iarazioni

!ono dic#iarazioni la cui eecuzione pro%oca !ono dic#iarazioni la cui eecuzione pro%oca
l0allocazione di pazio in memoria l0allocazione di pazio in memoria

In particolare& la de/nizione di una %ariabile o In particolare& la de/nizione di una %ariabile o


di una cotante con nome pro%oca di una cotante con nome pro%oca
l0allocazione di pazio in memoria per la l0allocazione di pazio in memoria per la
%ariabile o cotante c#e %iene de/nita %ariabile o cotante c#e %iene de/nita
>? >?
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!truttura programma C !truttura programma C
+include "tdio,-. +include "tdio,-.
main/0 main/0
1 1
<dichiarazione> <dichiarazione>
<dichiarazione> <dichiarazione>

<dichiarazione> <dichiarazione>
<istruzione diversa da dichiarazione> <istruzione diversa da dichiarazione>
<istruzione diversa da dichiarazione> <istruzione diversa da dichiarazione>
... ...
<istruzione diversa da dichiarazione> <istruzione diversa da dichiarazione>
2 2
1iretti%e per il pre-proceore 1iretti%e per il pre-proceore
Obbligatorio Obbligatorio: : prima tutte le dic#iarazioni prima tutte le dic#iarazioni& poi .ualiai & poi .ualiai
altro tipo di itruzione altro tipo di itruzione
>J >J
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
!truttura programma C++ !truttura programma C++
+include io"tream. +include io"tream.
u"in# name"pace "td ; u"in# name"pace "td ;
main/0 main/0
1 1
<istruzione qualsiasi> <istruzione qualsiasi>
<istruzione qualsiasi> <istruzione qualsiasi>
... ...
<istruzione qualsiasi> <istruzione qualsiasi>
2 2
1iretti%e per il pre-proceore 1iretti%e per il pre-proceore
1i%eramente dal C& in C++ i poono mecolare tutti i 1i%eramente dal C& in C++ i poono mecolare tutti i
tipi di itruzioni tipi di itruzioni
>3 >3
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
(unzione (unzione main main

main*+ main*+ M una M una )unzione peciale )unzione peciale con tre caratteritic#e: con tre caratteritic#e:

de%e eere empre preente de%e eere empre preente

la prima itruzione della )unzione la prima itruzione della )unzione main*+ main*+ M la prima M la prima
itruzione del programma c#e arA eeguita& itruzione del programma c#e arA eeguita&
indipendentemente da do%e i tro%a la )unzione indipendentemente da do%e i tro%a la )unzione main*+ main*+
all9interno del /le orgente all9interno del /le orgente

.uando termina l9eecuzione del .uando termina l9eecuzione del main*+ main*+& oia dopo & oia dopo
dopo l0eecuzione dell0ultima itruzione contenuta nella dopo l0eecuzione dell0ultima itruzione contenuta nella
)unzione )unzione main*+ main*+& termina l0intero programma & termina l0intero programma

Come i M %ito& in C la )unzione Come i M %ito& in C la )unzione main*+ main*+ contiene due contiene due
ezioni ezioni

Parte dic#iarati%a Parte dic#iarati%a

Parte eecuti%a %era e propria Parte eecuti%a %era e propria


>> >>
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Hrdine di eecuzione Hrdine di eecuzione

In c#e ordine %engono eeguite le itruzioniN In c#e ordine %engono eeguite le itruzioniN

!i de/nice !i de/nice se$uenza se$uenza o o concatenazione concatenazione una e.uenza una e.uenza
di itruzioni critte l0una di eguito all0altra all0interno di un di itruzioni critte l0una di eguito all0altra all0interno di un
programma programma

"e itruzioni/dic#iarazioni di una e.uenza ono "e itruzioni/dic#iarazioni di una e.uenza ono eseguite eseguite
l+una dopo l+altra l+una dopo l+altra
D!D@PIH D!D@PIH
int ( ; int ( ; // prima "i e"e#ue la definizione // prima "i e"e#ue la definizione
( = 3 ; ( = 3 ; // poi l3a""e#namento // poi l3a""e#namento
cout(endl; cout(endl; // infine la "tampa // infine la "tampa
>2 >2
Programmazione I Paolo Valente - 2013/2014 Programmazione I Paolo Valente - 2013/2014
Dercizi Dercizi

!%olgere tutti i rimanenti eercizi della !%olgere tutti i rimanenti eercizi della
econda eercitazione econda eercitazione

Pretare molta attenzione alla Pretare molta attenzione alla


decrizione del proceo rioluti%o decrizione del proceo rioluti%o
riportata in tale eercitazione riportata in tale eercitazione