IL LINGUAGGIO C++ C++ (1983) è un linguaggio linguaggio - orientato agli oggetti, cioè fornisce i costrutti per gestire oggetti, classi, ereditarietà anche tipi di dati che non sono oggetti (es. i tipi int, float, char) - ibrido, poiché esistono anche - casesensiti!e, cioè distingue le lettere "inuscole da #uelle "aiuscole. alcune caratteristiche$ "ain() % & !oid !oid "ain "ain() () % & co""ento co co""en "ento si'eof() f()
progra""a principale prog progra ra"" ""a a pri princ ncip ipal ale$ e$ la fun' fun'io ione ne "ain "ain non non res resti titu tuis isce ce null nulla a co""ento su pi* righe co"" co""e ento su un una so sola ri riga (a (anche nche al ter" ter"in ine e di di un unistru stru' 'ion ione) fun fun'ione che restituisce il n di b-tes tes occupati dallargo"ento
for"atta'ione delloutput$ /t0
/t/t0 /n0 dec, dec, oct, oct, he he endl /20 ends flush set(n) setfil fill(") setp setpre reci cisi sion on(p (p))
in una stringa$ tabula'ione, tabula'ione, doppia tabula'ione tabula'ione in una stringa$ fine linea per per usa usare re,, ris rispe pett tti! i!a" a"en ente te,, la la bas base e dec deci" i"al ale, e, otta ottale le,, esa esade deci ci"a "ale le fuori dalla stringa$ fine linea in una stringa$ fine stringa fuori dalla stringa$ fine stringa per e"ettere loutput e!entual"ente ri"asto in coda per i"postare la larghe''a a n battute (default 4 2) per usare un caratter tere di rie"pi"ento di!erso dalla spa'io per per !isu !isual ali' i''a 'are re i !alo !alori ri real realii con con p1 p1 cifr cifre e dopo dopo la !irg !irgol ola a
operatori arit"etici$ 4 + 5 ++ +4 !alore 4 !alore 4 !alore 4 !alore
assegna'ione addi'ione, sottra'ione, di!isione, "oltiplica'ione resto della di!isione tra interi incre"ento unario0 (se precede la !ariabile lincre"ento a!!iene pri"a dellutili''o della !ariabile, !ice!ersa se segue la !ariabile) decre"ento unario0 incre"ento di un !alore specificato decre"ento di un !alore specificato "oltiplicatore per un !alore specificato di!isore per un !alore specificato
operatori di rela'ione$ 44 64 7 74 4 332318218.docAPPUNTI
1
uguaglian'a disuguaglian'a "inore di "aggiore di "inore o uguale di "aggiore o uguale di �
Emi 2007
pag.
operatori logici$ == 6 = A
congiun'ione o prodotto logico (:;<) alternati!a o so""a logica (>?) nega'ione (;>@) congiun'ione (:;<) bit per bit alternati!a (>?) alternati!a esclusi!a (B>?)
t-pedef è il co"ando che per"ette allutente di definire tipi di dati es. t-pedef unsigned short int ushort
dichiara'ione di costanti$ constD tipo no"eCostante 4 !alore es.
double piEreco 4 3.1F G const char lettera 4 Ha G const char aCapo 4/n G
I define è la diretti!a che per"ette di definire una costante si"bolica (è una dichiarati!a di preco"pila'ione). es.
Idefine aCapo H/nG ;.J. non cè il si"bolo 40 Idefine base 12G Idefine piEreco 3.1F
I include è la diretti!a che indica al preprocessore (un progra""a) di includere nel codice le librerie specificate (è unaltra dichiarati!a di preco"pila'ione). es.
Iinclude 7iostrea".h include nel codice lheader file (.h), o file di intesta'ione, che contiene le descri'ioni delle fun'ioni e dichiara'ioni necessarie per gestire lK>.
costanti enu"erati!e$ es.
enu" %L&
enu" giorno %lunedM, "artedM,L, do"enica& e le costanti a!ranno !alori intrinseci 2, 1, L, N
oppure$ enu" giorno %lunedM41, "artedM4O,L, do"enica4P& e le costanti a!ranno !alori stabiliti 1, O, L, P 332318218.docAPPUNTI
2
�
Emi 2007
pag.
fun'ioni definite dal progra""atore for"ato generale$ tipo di !alore restituito no"e della fun'ione (elenco para"etri con tipo e no"e) % !ariabili locali istru'ioni L return !alore restituito &
;ote$
-
-
tipo di !alore restituito per default è int i para"etri elencati accanto al no"e della fun'ione sono i para"etri for"ali se la fun'ione non dà risultati di ritorno, il tipo restituito è !oid (ed in tal caso si parla pi* propria"ente di procedura Q ndr) e return non è seguito dal !alore restituito, an'i return puR essere o"esso se la fun'ione non rice!e para"etri tra parentesi si puR scri!ere !oid oppure non scri!ere niente Sain è una fun'ione, ed è la pri"a ad essere eseguita alla!!io del progra""a. @ra parentesi indica i para"etri che puR rice!ere dalla riga di co"ando del T.>. :lla fine, dopo return si specifica il !alore da restituire e!entual"ente al T.>. (di solito 2).
Uer richia"are una fun'ione$ no"e della fun'ione
(elenco dei !alori da passare ai para"etri)G
in #uesto caso i para"etri sono para"etri attuali (o para"etri reali). Kl passaggio dei para"etri alla fun'ione puR a!!enire$ - per valore - per indirizzo$ in #uesto caso i ca"bia"enti dei !alori dei para"etri for"ali durante lesecu'ione della fun'ione influen'ano i !alori dei para"etri attuali. Uer indicare il passaggio di para"etri per indiri''o si usano i si"boli e $ si specifica nel para"etro attuale$ è il puntatore al dato, #uindi il suo indiri''o o si specifica nel para"etro for"ale (ne indica il !alore). o ;.J. Vn !ettore !iene se"pre passato ad una fun'ione per indiri''o, poiché il no"e del !ettore è, in realtà, il puntatore al pri"o ele"ento del !ettore (lindiri''o dellele"ento di indice 2).
We librerie disponibili in C pre!edono una serie di fun'ioni predefinite di utilità generale$ spesso per utili''arle è necessario utili''are gli header (files con estensione .h) che le contengono. 332318218.docAPPUNTI
3
�
Emi 2007
pag.
fun'ioni per la "anipola'ione di stringhe (string.h)$ strcp-(s1, sO) strncp-(s1, sO, n) strc"p(s1, sO)
stric"p(s1, sO) strcat(s1, sO)
per"ette di copiare una stringa in unaltra per"ette di copiare una stringa in unaltra, specificando il n. di caratteri restituisce !alore 2 se le due stringhe sono uguali, 1 se la pri"a è "aggiore della seconda, 1 se la pri"a è "inore della seconda co"e strc"p(), "a ignora le differen'e tra "aiuscole e "inuscole concatena due stringhe ( s1 4 s1 + sO, ndr)
fun'ioni "ate"atiche ("ath.h)$ po(base, esponente) ep(esponente) s#rt(argo"ento) po(argo"ento, (1.)) log(argo"ento) log12(argo"ento)
calcolo della poten'a calcolo di e esponente calcolo della radice #uadrata calcolo della radice con indice (se O) logarit"o naturale logarit"o in base 12
arra!ettori$ es.
int nu"eriO2DG
dichiara'ione
int !aloriXD 4 %122, O222, F22, X2, 8P2&
dichiara'ione e ini'iali''a'ione
char frase1XD 4 testo di pro!a0
dichiara'ione di una stringa (che è un !ettore di caratteri) con ini'iali''a'ione
char no"i1XDOXD
dichiara'ione di un arra- di stringhe (1X ele"enti di OX caratteri ciascuno)
;.J. la lunghe''a della stringa de!e essere tale da contenere la costante di fine stringa (/20), anche se è sottintesa. "atrici$ es.
int "atrice FD12DG
C++ non effettua controlli sullassegna'ione di un !alore a un arra-$ bisogna perciR controllare di non assegnare "ai un !alore ad unarea di "e"oria non definita Kl no"e dellarra- è un puntatore, cioè contiene lindiri''o del pri"o ele"ento dellarra-. Vn arra- puR essere passato ad una fun'ione solo per referen'a (4 per indiri''o)
332318218.docAPPUNTI
4
�
Emi 2007
pag.
Ttrutture ( o record) struct ;o"eTtruttura % tipo1 ca"po1G tipoO ca"poOG tipo3 ca"po3G L &G ese"pio$ struct
oppure ("eglio)$
struct
struct
assegno alla !ariabile oggi (con struttura
fase 1$ ;Y
struct Uersona % int "atricolaG char no"eO2DG char indiri''o1XDG int anno;ascitaG &G 1) defini'ione di un nuo!o tipo
fase O$ t-pedef struct Uersona :nagrafica ;V>\> @KU>
fase 3$ ;Y \:?K:JKWK
(1)
(O)
O) riferi"ento alla struttura Uersona definita nella fase 1
(3) 3) ;uo!o tipo di dato (è, a tutti gli effetti, un tipo di dato$ co"e int, char, float, L)
:nagrafica
V@KWK[[> <:@K 332318218.docAPPUNTI
if Ttudente.anno;ascita 7 1992 L L printf (5d0,
fase F$
5
oggi.giorno 4 XG oggi."ese2D 4 HsG oggi."ese1D 4 HeG oggi."eseOD 4 HtG oggi."ese3D 4 H/2G oggi.anno 4 O22PG
�
Emi 2007
pag.
ese"pio di struttura co"plessa (che contiene al suo interno una struttura)$ struct Eiorno % int gG int "G int aG &G t-pedef struct Eiorno data defini'ione del nuo!o tipo data struct Uersona % int "atricolaG int no"e32DG data data;ascitaG &G t-pedef struct Uersona anag defini'ione del nuo!o tipo anag anag dipendente dichiara'ione del dato dipendente, di tipo anag (struttura co"plessa) L if dipendente.data;ascita.a 7 1982 L utili''o dellanno di nascita del dipendente L
@abelle Vna tabella è un arra- di record (definiti co"e struttura). es.
struct Uersona % int "atricolaG char no"e32DG int li!elloG &G t-pedef struct Uersona anagG anag dipendentiO22DG definisce un arra- di O22 dipendenti, ciascuno con$ nu"ero di "atricola, no"e e li!ello.
Ttruttura dina"ica di dati 4 struttura alla #uale !iene assegnato lo spa'io di "e"oria centrale necessario.
332318218.docAPPUNTI
6
�
Emi 2007
pag.
Uuntatori Vna !ariabile puntatore (un puntatore) contiene lindiri''o di "e"oria di unaltra !ariabile. Kl puntatore de!e essere dello stesso tipo della !ariabile cui si riferisce. ;ella dichiara'ione il no"e di un puntatore ini'ia se"pre con un asterisco. es.
int puntatore
Uer conoscere lindiri''o di "e"oria di una !ariabile, lo si assegna al puntatore utili''ando il carattere (4 indiri''o di). es.
int nu" 4 XG int puntatoreG ... puntatore 4 nu"G
Uer accedere alla "e"oria puntata da un puntatore si usa loperatore es.
.
*
int a, bG int puntatoreG
(e#ui!ale a b 4 a)
a 4 XG puntatore 4 aG indiri''o di a b 4 puntatoreG assegno alla !ariabile b lindiri''o della !ariabile a printf (5d0, b)G !isuali''o il !alore di b (a!endo lo stesso indiri''o di a, !ale X co"e a) specificatori di for"ato per i puntatori$
deci"ale esadeci"ale esadeci"ale "inuscolo esadeci"ale "aiuscolo
5d 5p (for"ato puntatore) 5 5B
Vtili''o dei puntatori nelle fun'ioni con passaggio di para"etri per indiri''o$ ese"pio$
!oid >rdina (int , int -) % int co"odo G if ( -) % ;Y co"odo 4 G ;Y 4 -G - 4 co"odo G & returnG & ?KC]K:S> ;Y
>rdina (a, b)G
N.B. Ysiste anche l:?K@SY@KC: ?K (!edere pag. 1FX) 332318218.docAPPUNTI
7
�
Emi 2007
pag.
:rchi!i di dati Kl file è una struttura di dati che reali''a in "e"oria di "assa la struttura della tabella. >pera'ioni fonda"entali$ apertura, lettura, scrittura, chiusura. K file trattati dal file s-ste" del T.>. si distinguono, in base allorgani''a'ione dei dati in essi contenuti, in$ file di testo o :TCKK (che contengono il carattere di fine riga per fornire uni"pagina'ione delle infor"a'ioni in essi contenute e in cui ciascun b-te corrisponde a un carattere :TCKK) file binari (flussi continui di bit raggruppati in b-te "a non necessaria"ente distinti luno dallaltro). Vsere"o i file binari per gli archi!i con record a lunghe''a costante e i file di testo per gli archi!i con record a lunghe''a !ariabile. esempio:
struct Uersona % int SatricolaG char ;o"eF2DG char Kndiri''oF2DG int Wi!elloG float Ttipendi13DG &G t-pedef struct Uersona anagG
indica il buffer di K> contenente i dati di una persona che de!ono essere registrati nel file o che !engono letti dal file
anag
file pointer$ rappresenta il riferi"ento interno del progra""a per le opera'ioni sul file. Y il no"e interno che de!e essere usato nelle opera'ioni di lettura e scrittura. Y un puntatore ad una struttura che contiene infor"a'ioni sul file utili''ato (loca'ione del buffer di K> in SC, oppure posi'ione corrente del carattere nel buffer durante la lettura o la scrittura).
:ccesso ai record di un file$ se#uen'iale o diretto (se i record hanno lunghe''a fissa).
332318218.docAPPUNTI
8
�
Emi 2007
pag.
>pera'ioni sul file
fp = fopen (“nomefisico”, “modo”! Apertura
esempi:
fp 4 fopen(anag.dat0, 0)G fp 4 fopen (anag.dat, b)G C"iusura
fc#ose (fp!
fread ($%uffer, dimensione, numero&e#ementi, fp! Lettura
esempio:
fread (
'crittura
frite (
*osiionamento (se #accesso - random
*osiione corrente de# puntatore
posi'iona"ento allini'io del file$ ini'io 4 2 nella posi'ione corrente del puntatore$ ini'io 4 1 posi'iona"ento a fine file$ ini'io 4 O fte## (fp ;.J. il !alore restituito dalla fun'ione è long esempio:
posi' 4 ftell(fp)G
file binari
file di testo
Sodi di apertura dei files$
r%
r
sola lettura
se il file non esiste
%
sola scrittura
se il file non esiste, !iene creatoG se esiste !iene ricreato
r+%
r+
lettura e scrittura
+%
+
scrittura e lettura
a%
a
a+%
a+
scrittura in append
di errore
se il file non esiste, !iene creatoG se esiste !iene effettuata la scrittura in append
scrittura in append e lettura
332318218.docAPPUNTI
9
"essaggio
�
Emi 2007
pag.
Zile ad accesso se#uen'iale esempio:
Iinclude 7stdio.h Iinclude 7stdlib.h procedura ?YEKT@?:
U:?@Y
!oid ?egistra(!oid) % int rispostaG
dichiara'ione di articolo Serce articoloG ZKWY fpG dichiara'ione dei prototipi delle fun'ioni !oid ?egistra(!oid)G !oid Tta"pa(!oid)G U?>E?:SS: U?K;CKU:WY int "ain(!oid) % genera'ione dell^archi!io fp 4 fopen (_Wistino.dat_, _b_)G ?egistra()G fclose (fp)G elenco degli articoli fp 4 fopen (_Wistino.dat_, _rb_)G Tta"pa()G fclose (fp)G s-ste"(_U:VTY_)G return 2G &
332318218.docAPPUNTI
10
�
Emi 2007
do % input da tastiera printf (_Knseri"ento di un articolo /n_)G printf (_
procedura T@:SU: !oid Tta"pa(!oid) % printf (_Wistino articoli /n_)G fread (articolo, si'eof(Serce), 1, fp)G hile (6feof(fp)) % printf (_5OXs _, articolo.descri'ione)G printf (_51O.Of /n_, articolo.pre''o)G fread (articolo, si'eof(Serce), 1, fp)G & returnG &
pag.
Zile ad accesso diretto esempio:
332318218.docAPPUNTI
11
�
Emi 2007
pag.