Sunteți pe pagina 1din 45

Sintaxa i semantica C++

Programarea Structurat!
Grupele: INF1410G, INF1411G
Profesor: Silviu GNCU
2
Sumar
1. Sintax! i semantic! Alfabetul limbajului C++
2. Date i tipuri de date
3. Declara$ii
4. Variabile
5. Constante
6. Operatori
7. Preceden%a opera%iilor
8. Conversii
3
Sintax! i semantic!
o Un limbaj de programare este un set
de reguli, simboluri i cuvinte speciale
folosite pentru a scrie un program
o Regulile sunt valabile at't pentru
sintax (gramatic!), c't i pentru
semantic (semnifica$ie)
4
Sintax! i semantic!
o Sintaxa este un set de reguli care definesc
exact ce conbina$ii de litere, numere i
simboluri pot fi folosite )ntr-un limbaj de
programare.
o Nu se accept! ambiguit!$i.
o *nc!lcarea oric!rei reguli a limbajului
genereaz! erori de sintax (syntax errors)
i codul surs! nu poate fi compilat p'n! la
corectarea lor
o Semantica este un set de reguli care
determin! semnifica$ia instruc$iunilor scrise
)ntr-un limbaj de programare
5
Sintax! i semantic!
ALFABETUL LIMBAJULUI C++
Pentru elaborarea de programe, )n limbajele
C/C++ pot fi utilizate doar anumite simboluri,
care formeaz! alfabetul limbajului. Acesta
cuprinde:
o Majuscule i minuscule de la A la Z (a-z)
o Caracterul subliniere _
o Cifrele zecimale (0-9)
o operatori (Exemple: +, *, !=)
o delimitatori (cu rolul de a separa cuvintele)
o Grupuri (perechi de caractere).
6
Sintax! i semantic!
ALFABETUL LIMBAJULUI C++
Grupurile de caractere, numite adesea separatori,
pot fi:
o Paranteze rotunde ( ) )ncadreaz! lista de argumente ale unei
func$ii sau sunt folosite )n expresii pentru schimbarea ordinii
de efectuare a opera$iilor;
o Alcolade { } )nceputul/sf'r,itul unei func$ii sau instruc$iuni
compuse;
o Dublu slash // indic! )nceputul unui comentariu care se poate
)ntinde p)n! la sf'r,itul liniei;
o /* */ Indic! )nceputul i sf'r,itul unui comentariu care
poate cuprinde mai multe linii;
o Ghilimele" " )ncadreaz! un ir de caractere;
o Apostrof ' ' )ncadreaz! un caracter imprimabil.
7
Sintax! i semantic!
Identificatorii
Identificatorii reprezint! numele unor date sau ale
unor func$ii. Identificatorul este format dintr-un ir de
litere, cifre sau caracterul de subliniere. *ncepe cu o liter!
sau cu caracterul de subliniere. *n calitate de identificatori
nu pot fi utilizate cuvintele cheie ale limbajului, i anume:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double,
dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable,
namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed,
sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union,
unsigned, using, virtual, void, volatile, wchar_t, while .a.
*n dependen$! de limbajul de programare utilizat
num!rul de cuvinte cheie este diferit. Anumite versiuni de
C/C++ pot con$ine i alte cuvinte rezervate.
Aten#ie !!! Limbajul C/C++ este un limbaj case
sensitive, ceea ce )nseamn! c! se face distinc$ie dintre
minuscule i majuscule.
8
Sintax! i semantic!
Identificatorii
o Identificatori corec$i:
n J9
n GetData
n sum_of_squares
o Identificatori incorec$i:
n 40Hours - nu poate )ncepe cu o cifr!
n Get Data - nu poate con$ine spa$iu
n box-22 - nu poate con$ine pentru c! este
simbol matematic
n int - cuv'ntul int este predefinit )n C++
9
Date i tipuri de date
Rolul unui program este de a prelucra informa$ia.
Pentru ca aceast! s! fie accesibil! pentru prelucrare
informa$ia este prezentat! sub form! de date. Tipul unei
date const! )ntr-o mul$ime de valori pentru care s-a
adoptat un anumit mod de reprezentare )n memoria
calculatorului i o mul$ime de operatori care pot fi aplica$i
acestor valori.
o Datele sunt p!strate )n memoria calculatorului
o Fiecare loca$ie are o adres! unic! pe care o referim
atunci c'nd dorim s! stoc!m sau s! aducem date
o Adresa fiec!rei loca$ii de memorie este un num!r binar
o *n C++ folosim identificatori pentru a denumi loca$iile
de memorie
10
Date i tipuri de date
o *n C++ fiecare dat! trebuie s! fie de
un anumit tip
o Tipul de dat! determin! modul )n care
datele sunt reprezentate )n interiorul
calculatorului i opera$iile care se pot
realiza asupra lor
11
Date i tipuri de date
Tipurile standard
Tipuri simple
n Tipuri integrale
o char
o short
o int
o long
o enum
n Tipuri reale
o float
o double
o long double
Tipuri adres$
n pointer
n referin#$
Tipuri structurate
n tablou (array)
n struct
n union
n class
o Programatorul )i poate defini propriile tipuri de date
12
Date i tipuri de date
Tipurile integrale
o Se refer! la valori )ntregi
o *ntregii sunt secven$e de una sau mai
multe cifre
o Nu se admite virgula
o *n multe cazuri, semnul preced! un
)ntregTipul unsigned int se refer! la
)ntregi nenegativi
n Exemple:
22 16 1 -378 -912
13
Date i tipuri de date
Tipurile integrale
o Tipurile de dat! char, short, int i long
reprezint! )ntregi de diferite dimensiuni cu
mai mul$i sau mai pu$ini bi$i
celula de memorie char
celula de memorie short
celula de memorie int
celula de memorie long
14
Date i tipuri de date
Tipurile integrale
o Cu c't sunt mai mul$i bi$i )n celula de memorie, cu
at't mai mari sunt valorile )ntregi care pot fi
memorate acolo
o Dimensiunile acestor celule de memorie sunt
dependente de main!: pe unele calculatoare datele
de tip int se pot g!si )n intervalul -32768 ... +32767,
iar pe altele )ntre -2147483648 ... +2147483647
o C'nd programul )ncearc! s! calculeze o valoare mai
mare dec't valoarea maxim!, rezultatul este un
integer overflow
o Un )ntreg care )ncepe cu cifra 0 este considerat ca
fiind scris )n baza 8
n Exemplu: 015 este 15
8
15
Date i tipuri de date
Tipurile integrale tipul char
o Tipul de dat! char se folosete
n atunci c'nd se dorete o economie de memorie
i se folosesc )ntregi mici
n pentru a descrie date care constau dintr-un
caracter alfanumeric (liter!, cifr! sau simbol
special)
Exemplu:
'A' 'a' '8' '2' '+' '$' ' '
o C++ face diferen$a dintre data de tip
caracter '8' i valoarea )ntreag! 8, pentru
c! cele dou! sunt p!strate )n mod diferit )n
interiorul calculatorului
16
Date i tipuri de date
Tipurile reale (virgul! mobil!)
o Se utilizeaz! pentru a reprezenta numere
reale
o Numerele reprezentate )n virgul! mobil! au
parte )ntreag! i o parte frac$ionar!,
separate de un punct
n Exemplu:
18.0 127.54 .8 0.57
o Num!rul 0.57 nu este octal. Aceast! regul!
este valabil! doar pentru numere )ntregi
17
Date i tipuri de date
Tipurile reale (virgul! mobil!)
o Valorile reprezentate )n virgul! mobil! pot
avea un exponent, ca )n nota$ia tiin$ific!
o *n loc de 3.504x10
12
, )n C++ scriem
3.504e12
o Datorit! faptului c! memorarea se face )n
form! binar!, multe valori reale pot fi doar
aproximate )n acest sistem.
n Exemplu
Pe unele calculatoare, 4.8 poate fi afiat 4.7999998,
f!r! a fi vorba de o eroare de programare
18
Declara$ii
o Declara#ia este o instruc$iune care asociaz!
un nume (un identificator) cu o dat!, o
func$ie sau un tip de dat!, astfel )nc't
programatorul poate s! se refere la acest
element prin nume
n Exemplu
Prin aceast! instruc$iune, anun$!m c! empNum este numele
unei variabile al c!rei con$inut este de tip int
int empNum;
o C'nd declar!m o variabil!, compilatorul alege
o loca$ie de memorie i o asociaz! cu
identificatorul p!str'nd aceast! asociere la
dispozi$ia programului
19
Variabile
o Variabila este o loca$ie de memorie referit!
printr-un identificator i care p!streaz!
valoarea unei date ce poate fi modificat!
o Numele simbolic asociat variabilei se
numete identificatorul variabilei sau
numele variabilei
10533
(int)
empNum
Tipul de
dat
Variabila
Identificatorul variabilei
(loca#ia de memorie 0x22ff74)
Valoarea
20
Variabile
o Declararea variabilei )nseamn! specificarea
at't a numelui ei c't i a tipului de dat!
o O declara$ie se termina )ntotdeauna cu ;
n Exemplu
int empNum;
n Exemplu
int studentCount, maxScore, sumOfScores;
echivalent cu
int studentCount;
int maxScore;
int sumOfScores;
21
DECLARAREA VARIABILELOR
Modul general de declarare a variabilelor este:
tip_variabile list$_nume_variabile;
Se specific! tipul variabilei(lor) i o list! format! din
unul sau mai mul$i identificatori ai variabilelor de tipul
respectiv. *ntr-un program )n limbajul C variabilele sunt
declarate la )nceputul func$iei sau programului pe c)nd )n
C++, declara$iile de variabile pot fi )n orice loc )n
programul surs!, nu )nainte )ns! de a fi utilizat!. La
declararea variabilelor, se rezerv! )n memorie un num!r
de octe$i corespunz!tor tipului variabilei, urm'nd ca
ulterior, )n acea zon! de memorie, s! fie depus!
(memorat!, )nregistrat!) o anumit! valoare.
22
DECLARAREA VARIABILELOR
Exemple:
int i, j;
Au fost declarate variabile simple numite
corespunz!tor: i i j, iar tipul lor este int (numere )ntregi)
char c;
A fost declarat! variabila c, de tip char (caracter).
float lungime;
A fost declarat! variabila lungime )n care pot fi
memorate prin intermediul programului numere reale.
23
INI.IALIZAREA VARIABILELOR
*n momentul declar!rii unei variabile, acesteia i se
poate da (asigna, atribui) o anumit! valoare. *n acest
caz, )n memorie se rezerv! num!rul de loca$ii
corespunz!tor tipului variabilei respective, iar valoarea
va fi depus! (memorat!) )n acele loca$ii.
Forma unei declara$ii de variabile cu atribuire este:
tip_variabil$ nume_variabil$=expresie;
Se evalueaz! expresia, iar rezultatul acesteia este
asignat variabilei specificate.
24
INI.IALIZAREA VARIABILELOR
Exemple:
char minus=-;
Are loc declararea i ini$ializarea variabilei simple minus
int a=10*19+2;
Are loc declararea variabilei a, de tip int i ini$ializarea ei
cu valoarea 192
float pi=3.14;
Are loc declararea i ini$ializarea variabilei pi cu valoarea
3.14
short int z=13;
Are loc declararea i ini$ializarea variabilei z cu valoarea 13
25
Constante
*n C++, o constant! este o variabil de tipul
cite$te numai, ca de exemplu
const double PI =3.14;
Tipul const a fost introdus i )n C, dup! adoptarea
standardului ANSI. P)n! la apari$ia standardului ANSI, *n
C, pentru declararea constantelor se folosea numai
instruc$iunea #define a preprocesorului. Actualmente,
pentru declararea constantelor at)t )n C c)t i )n C++, se
utilizeaz! cuv)ntul cheie const i instruc$iunea #define.
Dac! )n C, o constant! nu trebuie neap!rat
ini$ializat!, )n C++, acest lucru este absolut obligatoriu.
26
Constante
De exemplu, dac! v este o constant!, )n C putem scrie
const int v; /* Declararea constantei */
pe c)nd )n C++ trebuie scris:
const int v=123; //Declararea i ini$ializarea constantei v
Se putea scrie i
# define v 123
Pentru tipul de date logic pot fi definite dou!
constante :
# define true 1
# define false 0
27
Constante
o Toate numerele, )ntregi sau reale, sunt
constante
o La fel, caracterele (cuprinse )ntre ' ') i
secven$ele de caractere (string-urile,
irurile - cuprinse )ntre )
n Exemple
16 32.3 'A' Boys
o O constant! este un element al c!rui
valoare nu se schimb! niciodat!
o Valoare literal (sau literal) este orice
valoare constant! din program
28
Constante
o Constantele simbolice (sau constante cu
nume) sunt loca$ii de memorie referite
printr-un identificator care p!streaz! date
ce pot fi modificate
n Exemple
const char BLANK = ' ';
const float PI = 3.14159;
const int MAX = 20;
o De regul!, constantele simbolice se scriu cu
litere mari pentru a le distinge mai uor de
variabile la citirea programului
29
OPERATORI
Un operator este un simbol care arat! ce opera$ii se
execut! asupra unor operanzi (termeni). Un operand este
o constant!, o variabil!, un nume de func$ie sau o
subexpresie a c!rei valoare este prelucrat! direct de
operator sau suport! )n prealabil o conversie de tip.
Operatorii, dup! num!rul de operanzi asupra c!rora se
aplic! pot fi : unari, binari i ternari. *n C exist! circa 45 de
operatori diferi$i dispui pe 15 niveluri de prioritate.
Operatorii sunt )mp!r$i$i )n clase de preceden$! (sau
de prioritate). *n fiecare clas! de preceden$! este stabilit!
o regul! de asociativitate, care indic! ordinea de aplicare a
operatorilor din clasa respectiv! : de la st'nga la dreapta
sau de la dreapta la st'nga.
30
Operatorul de atribuire =
este un operator binar care se aplic! tuturor tipurilor de
variabile. Este folosit sub formele urm!toare:
nume_variabil!=expresie; sau: expresie1=expresie2;
Se evalueaz! expresia din membrul drept, iar valoarea
acesteia este atribuit! variabilei din membrul st'ng.
Exemplu:
x=19.18;
a=b=100;//)n C++ pot fi efectuate atribuiri multiple
Aa cum se observ! )n linia a 2-a operatorul de
atribuire poate fi utilizat de mai multe ori )n aceeai
expresie. Asociativitatea operatorului are loc de la dreapta
la st'nga. Astfel, mai )nt'i b=10, apoi a=b.
Operatorul poate fi aplicat tipurilor de date )ntregi,
reale, caracter, pointer.
31
Operatori aritmetici binari:
Operatorul + x+y determin! suma celor doi operanzi x i y;
Operatorul - determin! diferen$a celor doi operanzi x i y;
Operatorul * determin! produsul celor doi operanzi x i y;
Operatorul / determin! c'tul ()n cazul numerelor )ntregi)
celor doi operanzi x i y.
Pentru numere reale )mparte x la y, de exemplu :
Dac! x=5;y=2; de tip )ntreg, atunci x/y va fi 2, iar )n cazul
)n care cel pu$in unul dintre operanzi este num!r real
rezultatul va fi 2.5;
Operatorul %determin! restul celor doi operanzi x i y. Se
aplic! numai operanzilor )ntregi.
32
Exemple
o *mp!r$irea )ntreag! este c'tul ob$inut la
)mp!r$irea a dou! numere )ntregi
o Opera$ia modulo reprezint! restul acestei
)mp!r$iri i se aplic! doar numerelor )ntregi
n Exemple
6/2 & 3
7/2 & 3
6%2 & 0
7%2 & 1
o *mp!r$irea )n virgul! mobil! (real!)
genereaz! rezultat real, iar operanzii trebuie
s! fie reali
n Exemplu
7.0/2.0 & 3.5
33
Operatori aritmetici unari:
Minus unar schimb! semnul operandului de ex. -a. Poate fi
aplicat datelor )ntregi, reale;
Operator de incrementare ++ adun! o valoare operandului. Poate
fi utilizat at)t )n forma postfixat! a++, c't i form! prefixat! ++a;
Operator de decrementare -- scade o valoare operandului. Poate
utilizat at)t )n forma postfixat! a--, c't i form! prefixat! --a;
Operatorii de incrementare i decrementare pot fi aplica$i
datelor numerice sau caracter. Utilizarea acestor operatori )n
expresii, )n form! prefixat! sau postfixat!, determin! evaluarea
acestora )n moduri diferite, astfel:
y=++x;este echivalent cu:x=x+1; y=x;
y=x++; este echivalent cu:y=x; x=x+1;
y=--x; este echivalent cu: x=x-1; y=x;
y=x--; este echivalent cu: y=x; x=x-1;
34
Operatori aritmetici binari compui
se ob$in prin combinarea operatorilor aritmetici binari cu
operatorul de atribuire. To$i aceti operatorii modific! valoarea
operandului st'ng prin adunarea, sc!derea, )nmul$irea sau
)mp!r$irea acestuia prin valoarea operandului drept.
35
Operatori rela!ionali binari
servesc la compararea valorilor celor doi operanzi i nu
modific! valorile operanzilor. Rezultatul unei expresii )n care apare
unul din operatorii rela$ionali binari este )ntreg i are valoarea 0
dac! rela$ia este fals!, sau valoarea 1. Aceti operatorii pot fi
aplica$i datelor de tip )ntreg, real sau caracter.
36
Operatori logici
servesc la compararea expresiilor logice
37
Operatorul condi#ional ?:
Operatorul condi$ional evalueaz! o expresie i )ntoarce o valoare
)n cazul )n care aceast! expresie este adev!rat! i un altul )n cazul
)n care expresie este evaluat! ca fiind fals!. Formatul s!u este:
condi#ie? resultat1: resultat2
dac! condi$ia este adev!rat! atunci este returnat! valoarea
resultat1, )n caz contrar este returnat! valoarea resultat2.
De exemplu :
o 7==5?4:3; //returneaza 3, deoarece 7 nu este egal cu 5
o 7==5+2?4:3;//returneaza 4, deoarece 7 este egal cu 5+2
o 5>3?a:b; //returneaza valoarea a, deoarece 5 > 3
o a>b ?a:b; //returneaza valoare maximala dintre a si b
38
PRECEDEN'A OPERA'IILOR
Preceden$a este ordinea )n care un program execut!
opera$iile )ntr-o expresie. Dac! un operator are preceden$a peste
un alt operator, atunci el este evaluat primul.
Exemple
1.) a = 5 * 8 + 7;
Ini$ial se va evalua expresia 5 * 8 = 40 dup! care se va
evalua expresia 40 + 7 = 47 .
2.) a = 5* (8 + 7);
Prima data se va evalua expresia din paranteza 8 + 7 = 15
dup! care se va evalua expresia 5 * 15 = 75 .
39
Preceden$a celor mai des utiliza$i
operatori este :
40
CONVERSII
o Limbajul C++ este considerat un limbaj cu conversii
implicite. Prin conversii se sub)n$elege
transformarea valorii unei variabile dintr-un tip )n
altul. Conversia poate fi implicit! sau realizat! )n
mod explicit de c!tre programator.
o Conversiile implicite au loc atunci c)nd este necesar
ca operatorii i argumentele func$iilor s!
corespund! cu valorile ateptate pentru acestea.
41
Reguli de CONVERSIE
42
CONVERSII implicite
C)nd un operator binar se aplic! )ntre doi operanzi de tip
diferit, are loc o conversie implicit! a tipului unuia dintre ei, i
anume, operandul de tip mai restr'ns este convertit la tipul
mai larg al celuilalt operand.
Conversii implicite se produc i )n cazul opera$iei de
atribuire, )n sensul c! valoarea din partea dreapt! este convertit!
la tipul variabilei acceptoare din st'nga.
Astfel pentru declara$iile:
int i;float f;double d;char c;
sunt permise atribuirile:
i=f; /* cu trunchierea partii fractionare */
f=i;d=f;f=d;c=i;i=c;
43
REGULI DE CONVERSIE
Operatorii aritmetici convertesc automat operanzii la un anumit
tip, dac! operanzii sunt de tip diferit. Se aplic! urm!toarele
reguli:
1. operanzii char i short int se convertesc )n int, operanzii
float se convertesc )n double.
2. dac! unul din operanzi este double restul operanzilor se
convertesc )n double, iar rezultatul este tot double.
3. dac! unul din operanzi este long restul operanzilor se
convertesc )n long , iar rezultatul este tot long.
4. dac! unul din operanzi este unsigned restul operanzilor se
convertesc )n unsigned, iar rezultatul este tot unsigned.
5. dac! nu se aplic! ultimele 3 reguli, atunci operanzii vor fi de
tip int i rezultatul de asemeni de tip int.
44
CONVERSII explicite
numite cast
Conversiile explicite de tip (numite i cast) pot fi for$ate )n
orice expresie folosind un operator unar (cast) )ntr-o construc$ie
de forma:
(tip) expresie,
)n care expresia este convertit! la tipul numit.
Exemple
int a=10,b=3;
double c;
c=a/b;
rezultatul va fi 3, pentru a ob$ine rezultatul de tip double vom
scrie :
c=(double)a/b;
Operatorul cast are aceeai preceden$! cu a unui operator unar.
45
S$ vedem ce am (n)eles !!!
Fie date urm!toarele instruc$iuni :
int a,b,c,d,e,f;
char x;
a=b=c=d=e=f=0;
a++;
c--;
b=a+c;
c=++b;
e=f+d;
f+=e;
d+=f;
e=++d;
f--;
a+=70;
x=a;
Specifica$i ce valori sunt )n variabilele de mai sus.

S-ar putea să vă placă și