Professional Documents
Culture Documents
!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
- - 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<
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
!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
Introduzione eenziale del tipo Introduzione eenziale del 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
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
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
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] ] ; ;
;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++
!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
"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
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 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
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
processore processore
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
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
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
!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
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
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
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
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
%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
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
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:
.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
$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
"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
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
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
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
,,, ,,,
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
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
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
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
$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
main*+ main*+ M una M una )unzione peciale )unzione peciale con tre caratteritic#e: con tre caratteritic#e:
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
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