3. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.2. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 3
4. copyright@www.adrian.runceanu.ro
2.1. Programarea şi limbaje de programare
Prin programare se înţelege în mod generic
transpunerea unor operaţii repetitive, asupra unui set de
date, într-un limbaj inteligibil de către un sistem de calcul
care urmează ulterior să le execute.
Acest lucru este realizat în două etape:
1. etapă în care este implicat omul şi anume cea de trecere de
la problema reală la transpunerea într-un limbaj de
programare.
2. o a doua etapă, automată, care transpune codul sursă
(înşiruirea de instrucţiuni specifice limbajului respectiv) într-
un cod direct executabil (inteligibil sistemului de calcul)
lucru de care se ocupă programe specializate numite
compilatoare.
02.12.2016 Curs - Programarea calculatoarelor 4
5. copyright@www.adrian.runceanu.ro
2.1. Programarea şi limbaje de programare
Rolul programării este ca de fiecare dată
când o anumită operaţiune sau o suită de
operaţiuni repetitive care se aplică asupra unor
seturi de date mereu diferite să fie scris un
program care să:
1. ceară setul de date de intrare (cele care trebuie
să fie prelucrate)
2. să execute asupra lor suita standard de
operaţiuni
3. şi să livreze datele de ieşire (adică rezultatele)
02.12.2016 Curs - Programarea calculatoarelor 5
6. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.2. Constante
2.3.2. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 6
7. copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajele de programare de nivel mediu au fost
serios dezvoltate pe la mijlocul anilor '50.
La ora actuală se estimează că există peste 2000 de
limbaje de programare, diferenţele între ele fiind legate
în principal de stilul de programare.
Limbajul C, dezvoltat în 1972 de Dennis M. Ritchie*
la Laboratoarele AT&T Bell, este primul limbaj pentru
crearea de sisteme de operare.
*Dennis M. Ritchie a decedat pe 14.10.2011 (la varsta de 70 de ani)!
02.12.2016 Curs - Programarea calculatoarelor 7
8. copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Numele limbajului provine din faptul că este
rezultatul îmbunătăţirii limbajului B, folosit în scrierea
sistemului de operare UNIX pentru DEC PDP7.
Prima documentaţie despre acest limbaj a fost "The
C Programing Language", scrisă de Dennis Ritchie şi
Brian Kernighan în 1977.
Înaintea ei exista doar "The C Reference Manual",
scrisă de Dennis Ritchie.
O caracteristică importantă a acestui limbaj este
faptul că poate fi considerat simultan şi un limbaj de
nivel mediu şi un limbaj de nivel scăzut.
02.12.2016 Curs - Programarea calculatoarelor 8
9. copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajul C şi versiunile sale OOP (Object
Oriented Programming) C++, Visual C++ şi
mai noul C# sunt printre cele mai folosite
limbaje de programare la ora actuală.
02.12.2016 Curs - Programarea calculatoarelor 9
11. copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajul C permite folosirea a două tehnici
de programare:
1. programare structurată
2. acces direct la maşină
fapt care-l face să fie foarte flexibil.
Ultimul şi poate cel mai important motiv
pentru învăţarea limbajului C este faptul că
permite trecerea cu uşurinţă la varianta sa C++,
la limbajul Java sau la limbajul C#.
02.12.2016 Curs - Programarea calculatoarelor 11
12. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 12
13. copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
Vom studia în cele ce urmează varianta
orientată pe obiecte a limbajului standard C, şi
anume limbajul C++.
02.12.2016 Curs - Programarea calculatoarelor 13
14. copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
1. Tipuri de date. Variabile. Constante
Cuvinte cheie
Limbajul C, ca orice limbaj de programare,
este compus din câteva denumiri (identificatori)
cu o semnificaţie bine stabilită, numite cuvinte
cheie.
Observaţie: Când alegeţi denumiri de variabile
pentru programe să nu utilizaţi aceste denumiri.
02.12.2016 Curs - Programarea calculatoarelor 14
15. copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
Limbajul C++ adaugă noi cuvinte cheie la cele
existente ale limbajului C.
02.12.2016 Curs - Programarea calculatoarelor 15
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
asm bool catch class delete
friend inline mutable namespace new
operator private public protected template
this using virtual
Cuvintele cheie ale limbajului C.
16. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 16
17. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
Un tip de date specifică (precizează):
mulţimea de valori pe care variabila respectivă
le poate lua
cât şi setul de operaţii pe care programatorul le
poate efectua cu acea variabilă
02.12.2016 Curs - Programarea calculatoarelor 17
18. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
NUMELE
TIPULUI
CARACTERISTICI
char
reţine un singur caracter
Exemple: ‘A’, ’a’, ’%’, etc.
int
reţine numere întregi cu semn
Exemple: 23, -45, 0, etc.
float
reţine numere reale în format cu virgulă mobilă, în
simplă precizie
Exemple: 7.8965, -4.123, 7.0, etc.
double
reţine numere reale în format cu virgulă mobilă, în
dublă precizie
Exemple: 123456789.89654321,
-123456789.1234567890, 123456789.0, etc. (se
utilizează când se prelucrează numere foarte mari sau
foarte mici)
void
tip de date special care nu specifică un anumit set de
valori iniţial, dar care poate fi specificat ulterior
declarării.
02.12.2016 Curs - Programarea calculatoarelor 18
19. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
Reprezentarea caracterelor in memoria calculatorului
Programatorii pot folosi in programe valori de orice tip (cifra,
litera mica, litera mare, caractere speciale, alte caractere).
In memoria calculatorului fiecare astfel de caracter se
reprezinta printr-un cod numeric - ASCII (codul numeric al
caracterului respectiv). Intervalul este intre 0 si 255.
02.12.2016 Curs - Programarea calculatoarelor 19
Interval valori (selecție)
Cod ASCII
Semnificație
[0, 32] Caractere neprintabile(netipăribile)
[48, 57] Cifrele de la 0 la 9
[65, 90] Literele mari de la A la Z
[97, 122] Literele mici de la a la z
20. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
1. Tipul de date char
Se reprezintă în memoria calculatorului folosind 8 biţi (un octet) şi
poate păstra valori cuprinse între –128 şi 127.
Dacă se declară fără semn (adică se utilizează modificatorul unsigned),
intervalul de valori se întinde de la 0 la 255.
Programatorii pot atribui valori de tip caracter unei astfel de
variabile în două modalităţi distincte, dar care acţionează identic:
reprezentarea din ASCII (codul numeric al caracterului respectiv)
sau caracterul respectiv între două apostrofuri
02.12.2016 Curs - Programarea calculatoarelor 20
Exemplu:
char litera_mica;
char litera_mica=97;
sau char litera_mica=’a’;
char <definitie_de_data>;
21. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
2. Tipul de date int
Se reprezintă în memoria calculatorului folosind 16
biţi (2 octeţi) şi poate păstra valori cuprinse între
–32768 şi 32767.
Dacă se declară fără semn (adică se utilizează
modificatorul unsigned), intervalul de valori se întinde
de la 0 la 65535.
02.12.2016 Curs - Programarea calculatoarelor 21
int <definitie_de_data>;
Exemplu: int a=9;
int b=6725;
int c=-31567;
22. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
3. Tipul de date float
Se reprezintă în memoria calculatorului folosind 32
biţi (4 octeţi) şi poate păstra valori cuprinse între 3.4E-
38 şi 3.4E+38.
02.12.2016 Curs - Programarea calculatoarelor 22
float <definitie_de_data>;
Exemplu: float x=9.789;
float y=-6725.123;
float z=-3156723;
23. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
4. Tipul de date double
Se reprezintă în memoria calculatorului folosind
64 biţi (8 octeţi) şi poate păstra valori cuprinse între
1.7E-308 şi 1.7E+308.
02.12.2016 Curs - Programarea calculatoarelor 23
double <definitie_de_data>;
Exemplu:
double numar_foarte_mare=123456789123456789.123456789123456789;
double numar_foarte_mic=-123456789123456789.123456789123456789;
double numar_mare=-123456789;
24. copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
5. Tipul de date void
Este tipul de dată vidă (fără tip specificat), utilizat în general
pentru mărirea clarităţii programelor.
Tipul void permite explicitarea faptului că o funcţie nu
returnează nimic sau nu are nici un parametru.
02.12.2016 Curs - Programarea calculatoarelor 24
[void ] <definitie_de_functie([void])
sau
void <definitie_de_pointer>;
Exemplu:
void salut(void)
{
cout<<"SALUTAM PROGRAMATORII IN LIMBAJUL C++ !!!n";
}
25. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 25
26. copyright@www.adrian.runceanu.ro
2.3.2. Modificatorii de tip
Limbajul C++ oferă pe lîngă cele 5 tipuri de bază
prezentate mai sus, un set de modificatori de tip:
1. unsigned (fără semn)
2. long (lung)
3. signed (cu semn)
4. register (registru)
5. short (scurt)
Un modificator de tip schimbă domeniul valorilor pe care o
variabilă le poate păstra, sau modul în care compilatorul
păstrează o variabilă.
Pentru a se modifica un tip de data, se va plasa modificatorul
în faţa tipului respectiv.
02.12.2016 Curs - Programarea calculatoarelor 26
Exemplu: unsigned int numar;
register int i;
long int numar_foarte_mare;
27. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 27
28. copyright@www.adrian.runceanu.ro
2.3.3. Constante
Sunt date a căror valoare nu poate fi modificată în
timpul execuţiei programului.
Ele reprezintă un tip şi o valoare şi astfel pot fi de mai
multe tipuri:
1. constantă întreagă
2. constantă flotantă
3. constantă caracter
4. constantă șir de caractere
02.12.2016 Curs - Programarea calculatoarelor 28
29. copyright@www.adrian.runceanu.ro
2.3.3. Constante
1. constantă întreagă = se reprezintă sub forma unei înşiruiri de cifre.
Se clasifică în:
– constante zecimale (se scriu în baza 10) Exemplu: 14, 568,
17342
– constante octale (se scriu în baza 8) Exemplu: 0şir de cifre în
baza 8
– constante hexazecimale (se scriu în baza 16) Exemplu: 0x şir de
cifre în baza 16
Constantele întregi se reprezintă pe 16 biţi sau pe 32 de biţi. Dacă
la sfârşitul unei constante punem litera l sau L, atunci constanta
respectivă va fi reprezentată pe 32 de biţi.
Exemplu: numărul 17 se reprezintă pe 16 biţi
numărul 17L se reprezintă pe 32 biţi
02.12.2016 Curs - Programarea calculatoarelor 29
30. copyright@www.adrian.runceanu.ro
2.3.3. Constante
2. constantă flotantă este compusă din 2 părţi
– partea fracţionară (care poate fi vidă) şi
– exponent (care poate fi el vid)
O constantă reală este sub următoarea formă:
Exemplu: 3.45e-17 3,45*10-17
Toate constantele flotante se reprezintă pe 16 biţi.
02.12.2016 Curs - Programarea calculatoarelor 30
parte întreagă.parte fracţionară e exponent
31. copyright@www.adrian.runceanu.ro
2.3.3. Constante
3. constantă caracter este de fapt un caracter între apostrofuri.
Se reprezintă pe 8 biţi, fiind chiar reprezentarea în codul ASCII a
caracterului respectiv.
Exemplu:
‘A’ reprezentare internă: 65 (codul ASCII a caracterului ‘A’)
‘a’ reprezentare internă: 97 (codul ASCII a caracterului ‘a’)
În plus avem o notaţie specială ‘’ = backslash, care se poate folosi
împreună cu câteva litere mici cu următoarele semnificaţii:
02.12.2016 Curs - Programarea calculatoarelor 31
Caracter semnificatie
n linie noua
r retur de car
t tabulator orizontal
v tabulator vertical
backslash
nnn valoare ASCII in octal
xnnn valoare ASCII in hexazecimal
32. copyright@www.adrian.runceanu.ro
2.3.3. Constante
4. constantă şir sau şir de caractere
Acest tip de constantă apare ca o succesiune de caractere scrise
între ghilimele.
Poate fi şi şirul vid. Reprezentarea internă este astfel încât fiecare
caracter apare pe câte un singur octet, iar ca terminator de şir
avem caracterul 0 (nul).
Constantele şir pot fi scrise pe linii diferite, dar pe prima linie
ultimul caracter este backslash, înainte de apăsarea tastei
RETURN.
Exemplu: linia 1 : "conti
linia 2 : nuare"
Exemplu: "AbbA" se reprezintă intern astfel:
659898650 A b b A
02.12.2016 Curs - Programarea calculatoarelor 32
33. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 33
34. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Pentru a putea utiliza informaţiile ce pot fi prelucrate
prin intermediul programelor, trebuie să folosim
denumiri (identificatori), care să fie compuşi din
caractere – litere, cifre şi liniuţa de subliniere -
underscore(‘_’) din maximum 31 caractere.
Numim variabilă o denumire (identificator) pe care
compilatorul o asociază cu o anumită zonă de memorie.
02.12.2016 Curs - Programarea calculatoarelor 34
35. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Când se declară o variabilă, trebuie specificat atât
numele ei cât şi tipul de date asociat.
02.12.2016 Curs - Programarea calculatoarelor 35
Exemple:
int variabila_de_tip_intreg;
float variabila_de_tip_real;
char variabila_de_tip_caracter;
void variabila_fara_tip;
Restricţie: Numele variabilelor nu poate să înceapă cu o
cifră.
Exemplu: variabila1 - este corect
1variabila - nu este corect
36. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Observaţie:
Limbajul C este case sensitive, adică face diferenţa dintre
literele mici şi mari, astfel încât, două denumiri de
variabile sau de funcţii, care sunt identice dar sunt scrise
o dată cu litere mici iar apoi cu litere mari, se consideră
ca fiind două denumiri de variabile sau de funcţii
diferite.
Exemplu: int var_intreaga;
int VAR_INTREAGA;
semnifică două denumiri total diferite.
02.12.2016 Curs - Programarea calculatoarelor 36
39. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
2. Variabilele tablou
Prin tablou înţelegem o mulţime ordonată
de acelaşi tip; accesul la elementele tabloului
făcându-se cu ajutorul indicilor.
Declaraţia este:
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 39
tip nume_tablou[dimensiune];
int v[5];
float x[15];
double a[3];
40. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Observaţie:
Numerotarea elementelor unui tablou în
limbajul C++ începe cu indicele 0.
Elementele lui int v[5] vor fi:
v[0],v[1],v[2],v[3],v[4];
Indice poate să fie orice expresie întreagă.
Putem avea chiar şi tablouri de şiruri de
caractere: char t[20];
Numele tabloului este de fapt adresa
primului său element.
02.12.2016 Curs - Programarea calculatoarelor 40
41. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Iniţializarea variabilelor
Poate fi făcută chiar pe linia de declarare a variabilelor:
Exemplu:
Pentru iniţializarea variabilelor de tip şir de caractere avem
următoarele posibilităţi:
char t[15] = { ’s’, ’i’, ’r’, ’ ’, ’c’, ’o’, ’r’, ’e’, ’c’, ’t’, ’0’ };
sau char t[15] = ”sir corect”;
02.12.2016 Curs - Programarea calculatoarelor 41
int i=5;
float x=7.8;
int v[5]={1,2,7,10,-5};
float y[3]={-9.034,89,2};
char c=’B’;
42. copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Comentarii în programe
Numim comentarii, acele texte care nu sunt luate
în considerare de compilator şi care apar între
simbolurile
/* comentariu */
sau
când este vorba despre o singură linie
// comentariu
Se mai pot pune comentarii pentru ca să se
elimine una sau mai multe instrucţiuni din
programul C++.
02.12.2016 Curs - Programarea calculatoarelor 42
43. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 43
44. copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Expresii
O expresie poate să fie un operand sau mai
mulţi operanzi legaţi prin operatori
Orice expresie are tip şi valoare care se obtin
după evaluarea expresiei
02.12.2016 Curs - Programarea calculatoarelor 44
45. copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Operatori
Operatorii folosiţi în limbajul C++ au o asociere
de la stânga la dreapta – în general – cu excepţia
- operatorilor unari (se aplică la un singur operand),
- relaţionali
- şi de atribuire,
la care asocierea se face de la dreapta la stânga.
02.12.2016 Curs - Programarea calculatoarelor 45
46. copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Operatorii sunt împărţiţi în 11 categorii:
Operatori
1 aritmetici
2 relaţionali
3 de egalitate
4 logici
5 logici pe biţi
6 de atribuire
7 de incrementare şi decrementare
8 de conversie explicită (cast)
9 de lungime (sizeof)
10 condiţional
11 virgulă
02.12.2016 Curs - Programarea calculatoarelor 46
47. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 47
48. copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmetici
În cele mai simple programe se pot utiliza operaţii matematice cum ar fi
adunarea, scăderea, înmulţirea şi împărţirea.
OPERATOR FUNCŢIE
+ Adunare
- Scădere
* Înmulţire
/ Împărţire
% Restul împărţirii
+ adunare unară
- scădere unară
02.12.2016 Curs - Programarea calculatoarelor 48
Exemplu:
int i=9, j=2;
atunci i/j are ca rezultat 4
i%j are ca rezultat 1
49. copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmetici
Prezentăm în următorul program scris în C++, principalii operatori
matematici:
#include <iostream.h>
int main(void)
{
int secunde_pe_ora;
float media;
secunde_pe_ora = 60 * 60;
media = (5 + 10 + 15 + 20) / 4;
cout<<“Numarul de secunde intr-o ora este ”<< secunde_pe_ora
<<endl;
cout<<“Media numerelor 5, 10, 15 si 20 este ”<<media<<endl;
cout<<“Numarul de secunde in 48 de minute este
”<<secunde_pe_ora – 12 * 60<<endl;
} 02.12.2016 Curs - Programarea calculatoarelor 49
50. copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmetici
După execuţia programului se vor afişa pe ecran
următoarele rezultate:
Numarul de secunde intr-o ora este 3600
Media numerelor 5, 10, 15 si 20 este 12.000000
Numarul de secunde in 48 de minute este 2880
02.12.2016 Curs - Programarea calculatoarelor 50
51. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 51
52. copyright@www.adrian.runceanu.ro
2.4.2. Operatori relaţionali
În programe, prin aplicarea acestor operatori relaţionali se
pot obţine două valori posibile, la evaluarea expresiilor care îi
conţin:
0 – ceea ce înseamnă că expresia este falsă
1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
02.12.2016 Curs - Programarea calculatoarelor 52
Exemplu:
int i=3, j=8;
Atunci pentru expresia i < j avem valoarea 1
Iar pentru expresia i >= j avem valoarea 0
53. copyright@www.adrian.runceanu.ro
2.4.2. Operatori relaţionali
Se citesc doua numere întregi a si b. Să se realizeze un algoritm
care să verifice care numar este mai mare, afişandu-se un mesaj
corespunzator:
#include <iostream.h>
int main(void)
{
int a,b;
cin>>a; cin>>b;
if(a > b)
cout<<“Numarul a este mai mare decat numarul bn”;
else
cout<<“Numarul b este mai mare decat numarul an”;
}
02.12.2016 Curs - Programarea calculatoarelor 53
54. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.1. Programarea şi limbaje de programare
2.2. Limbajul C
2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date
2.3.2. Modificatorii de tip
2.3.3. Constante
2.3.4. Variabile
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relationali
2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 54
55. copyright@www.adrian.runceanu.ro
2.4.3. Operatori de egalitate
În programe, prin aplicarea acestor operatori de egalitate se
pot obţine două valori posibile, la evaluarea expresiilor care îi
conţin:
0 – ceea ce înseamnă că expresia este falsă
1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
== egal
!= diferit
02.12.2016 Curs - Programarea calculatoarelor 55
Exemplu:
int i=2, j=5, k=2;
Atunci pentru expresia i!=j avem valoarea 1
Pentru expresia i==j avem valoarea 0
Iar pentru expresia i==k avem valoarea 1
56. copyright@www.adrian.runceanu.ro
2.4.3. Operatori de egalitate
Se citeşte un număr întreg a. Să se realizeze un algoritm care să
verifice dacă numărul a este par, afişandu-se un mesaj
corespunzator:
#include <iostream.h>
int main(void)
{
int a;
cin>>a;
if( a % 2 == 0 )
cout<<“Numarul este parn”;
else
cout<<“Numarul este imparn”;
}
02.12.2016 Curs - Programarea calculatoarelor 56
57. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 57
58. 2.4.4. Operatori logici
În limbajul C/C++ nu există valori speciale pentru adevărat
sau fals şi de aceea:
- valoarea de fals este reprezentată prin zero (0)
- iar valoarea de adevarat este reprezentată prin orice număr
diferit de zero (0)
Observaţie:
Din punct de vedere al priorităţii, operatorii unari au cea mai
mare prioritate şi de aceea, în acest caz, operatorul ‘!’ are
prioritatea cea mai mare, urmat în ordine de operatorul ‘&&’ şi
de operatorul ‘||’.02.12.2016 Programarea calculatoarelor 58
OPERATOR FUNCŢIE
! negare
&& şi logic
|| sau logic
59. 2.4.4. Operatori logici
Reamintim tabele de adevăr ale celor trei operatori
logici:
Exemplu:
expresia !0 are valoarea 1
expresia !5 are valoarea 0
expresia !(a==b) are valoarea 1 sau 0 în funcţie de valorile lui
a, respectiv b.
02.12.2016 Programarea calculatoarelor 59
&& 0 0
0 0 0
0 0 1
|| 0 0
0 0 1
0 1 1
!0 1
! 0 0
60. 2.4.4. Operatori logici
Prezentăm mai
jos, un exemplu mai
amplu cu câteva
expresii la care le
evaluăm valorile:
Presupunem că avem
variabilele întregi:
• i = 0
• j 0
• k 0
02.12.2016 Programarea calculatoarelor 60
Expresie
i && j
!i && j
i || j
i ||!j
!(i && j)
!i || !j
!i && j || !j && i
i <= j || j <= k
0
1
1
0
1
1
1
0 sau 1
Valoare
61. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 61
62. 2.4.5. Operatori logici pe biţi
Operatorii logici pe biţi se pot folosi în limbajul C++, pentru a
mări performanţele unui program sau pentru a-i reduce consumul
de memorie utilizată.
Acest tip de operatori se aplică unuia sau mai multor biţi
dintr-o expresie.
02.12.2016 Programarea calculatoarelor 62
OPERATOR FUNCŢIE
~ negație logică pe biţi
& şi pe biţi
| sau pe biţi
^ sau exclusiv pe biţi
<< deplasare la stânga pe biţi
>> deplasare la dreapta pe biţi
63. copyright@www.adrian.runceanu.ro
2.4.5. Operatori logici pe biţi
Operatorul unar “~” returnează operandul
asupra căruia este folosit cu toţi biţii negaţi
Exemplu : ~0 are valoarea 1
010 = 000000002
prin negare bit cu bit se transformă în
~010 = 111111112 (numărul este 25510)
02.12.2016 Programarea calculatoarelor 63
64. 2.4.5. Operatori logici pe biţi
Operatorul binar “&” se utilizează pentru a
transforma în 0 anumiţi biţi, sau pentru a testa o
anumită configuraţie de biţi.
Exemplu:
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------
010 = 000000002 110 = 000000012
expresie valoare
1 & 2 0
1 & 3 1
02.12.2016 Programarea calculatoarelor 64
65. 2.4.5. Operatori logici pe biţi
Operatorul binar “|” se utilizează pentru a
transforma în 1 anumiţi biţi.
Exemplu:
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------
310 = 000000112 310 = 000000112
expresie valoare
1 | 2 3
1 | 3 3
02.12.2016 Programarea calculatoarelor 65
67. copyright@www.adrian.runceanu.ro
2.4.5. Operatori logici pe biţi
Operatorul “<<” se foloseşte pentru a deplasa spre stânga biţii
unui număr întreg cu n biţi specificaţi după operator; biţii rămaşi în
dreapta se completează cu 0.
Exemplu: 2 << 2
210 = 000000102
---------------------
810 = 000010002
Deci, în general, a << n înseamnă, ca valoare, a*2 la puterea n.
Operatorul “>>” realizează deplasarea spre dreapta a biţilor unui
număr întreg cu n poziţii.
Deci, în general, a >> n înseamnă, ca valoare, a/(2^n), fiind de fapt
împărţirea cu 2 la puterea n a numărului.
02.12.2016 Programarea calculatoarelor 67
68. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 68
69. 2.4.6. Operatorul de atribuire
Are cea mai mică prioritate după operatorul virgulă şi
apare sub forma:
Dacă avem var = var operator expresie, atunci în C/C++, se
poate scrie prescurtat:
unde operator poate să fie un operator aritmetic sau un operator
logic pe biţi.
Exemplu: int i, j;
i = i + 2; se poate scrie i + = 2;
j = j | 1; se poate scrie j | = 1;
var = expresie
02.12.2016 Programarea calculatoarelor 69
var operator = expresie
70. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 70
71. 2.4.7. Operatori de incrementare (++) şi de
decrementare (--)
02.12.2016 Programarea calculatoarelor 71
OPERATOR FUNCŢIE
++i incrementare prefixată
--i decrementare prefixată
i++ incrementare postfixată
i-- decrementare postfixată
72. copyright@www.adrian.runceanu.ro
2.4.7. Operatori de incrementare (++) şi de
decrementare (--)
De fapt:
++i i = i + 1 - incrementarea se face înainte de
evaluarea expresiei în care apare ++
i++ i = i + 1 - incrementarea se face după evaluarea
expresiei în care apare ++
--i i = i - 1 - decrementarea se face înainte de
evaluarea expresiei în care apare --
i-- i = i - 1 - decrementarea se face după evaluarea
expresiei în care apare --
Observaţie: Aceşti operatori nu se aplică unor expresii.
02.12.2016 Programarea calculatoarelor 72
73. copyright@www.adrian.runceanu.ro
2.4.7. Operatori de incrementare (++) şi de
decrementare (--)
Pentru a înţelegere mai eficient diferenţa între cele două forme,
prezentăm mai jos o secvenţă de program care utilizează ambii operatori:
Rezultatele execuţiei sunt următoarele:
Utilizarea formei postfixate 1
Valoarea dupa incrementare 2
Utilizarea formei prefixate 2
Valoarea dupa incrementare 2
02.12.2016 Programarea calculatoarelor 73
int valoare = 1;
cout<<"Utilizarea formei postfixate "<<valoare++<<endl;
cout<<"Valoarea dupa incrementare "<<valoare<<endl;
valoare=1;
cout<<"Utilizarea formei prefixate "<<++valoare<<endl;
cout<<"Valoarea dupa incrementare "<<valoare<<endl;
74. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 74
75. 2.4.8. Operatorul de conversie explicită
(cast)
Se foloseşte pentru forţarea tipului unui operand.
Are forma:
unde operand poate fi şi o expresie, iar tip este un operator
unar.
Exemplu:
int i=5, j=2;
float a;
a = i / j; înseamnă că a primeşte valoarea întreagă 2
a = (float) (i / j); înseamnă că a primeşte ca valoare 2
a = (float) i / j; înseamnă că a primeşte ca valoare 2.5
(tip) operand
02.12.2016 Programarea calculatoarelor 75
76. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 76
77. copyright@www.adrian.runceanu.ro
2.4.9. Operatorul de lungime (sizeof)
Este un operator cu o prioritate mare,
folosit în determinarea lungimii în octeţi a unui
operand care poate fi o expresie sau un tip de
date.
02.12.2016 Programarea calculatoarelor 77
sizeof (expresie) sizeof (tip)
78. copyright@www.adrian.runceanu.ro
2.4.9. Operatorul de lungime (sizeof)
Pentru a putea înţelege eficienţa folosirii acestui operator, prezentăm un
scurt program:
În funcţie de compilatorul C/C++ folosit (exemplu MinGW) se obţin
următoarele rezultate:
Variabila de tip int foloseşte 2 octeţi
Variabila de tip float foloseşte 4 octeţi
Variabila de tip double foloseşte 8 octeţi
Variabila de tip unsigned foloseşte 2 octeţi
Variabila de tip long foloseşte 4 octeţi
02.12.2016 Programarea calculatoarelor 78
cout<<"Variabila de tip int foloseste "<<sizeof(int)<<" octetin";
cout<<"Variabila de tip float foloseste "<<sizeof(float)<<" octetin";
cout<<"Variabila de tip double foloseste "<< sizeof(double)<<
" octetin";
cout<<"Variabila de tip unsigned foloseste "<<sizeof(unsigned)<<"
octetin”;
cout<<"Variabila de tip long foloseste "<<sizeof(long)<<" octetin";
79. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 79
80. 2.4.10. Operatorii condiţionali “?” “:”
Se folosesc numai împreună şi funcţionează ca o
instrucţiune if.
Forma este următoarea:
sau
unde expresie1 este o expresie logică care poate fi adevarată sau
falsă; când este adevarată rezultatul este expresie2, iar când este
falsă rezultatul este expresie3.
Exemplu:
modul = x < 0 ? –x : x;
max = a < b ? b : a;
min = a < b ? a : b;
expresie1 ? expresie2 : expresie3
var = expresie1 ? expresie2 : expresie3
02.12.2016 Programarea calculatoarelor 80
81. copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajului
C++
2.4. Operatorii limbajului C++
2.4.1. Operatori aritmetici
2.4.2. Operatori relaţionali
2.4.3. Operatori de egalitate
2.4.4. Operatori logici
2.4.5. Operatori logici pe biţi
2.4.6. Operatorul de atribuire
2.4.7. Operatori de incrementare şi de decrementare
2.4.8. Operatorul de conversie explicită (cast)
2.4.9. Operatorul de lungime (sizeof)
2.4.10. Operatorii condiţionali
2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 81
82. 2.4.11. Operatorul virgulă “,”
Are prioritatea cea mai scazută din toţi
operatorii.
Are următoarea formă:
sau
Această expresie se evaluează de la stânga la
dreapta, evaluându-se pe rând fiecare expresie până
se ajunge la ultima.
expresie1, expresie2, expresie3, . . . , expresien
expresie = expresie1, expresie2, expresie3, . . . , expresien
02.12.2016 Programarea calculatoarelor 82
83. Tabela de priorităţi a operatorilor
În limbajul C/C++, pentru a evalua expresiile în care apar
operatori, s-au stabilit anumite reguli de prioritate (precedenţă)
a operatorilor.
02.12.2016 Programarea calculatoarelor 83
NIVEL DE
PRIORITATE
OPERATOR ASOCIATIVITATE
1 () [] . -> stânga -> dreapta
2 - (unar) + (unar) & (unar) ! ~ *(unar) (cast) (sizeof) ++ -- dreapta -> stânga
3 * (binar) / % stânga -> dreapta
4 + (binar) - (binar) stânga -> dreapta
5 << >> stânga -> dreapta
6 < <= > >= dreapta -> stânga
7 == != stânga -> dreapta
8 & stânga -> dreapta
9 ^ stânga -> dreapta
10 | stânga -> dreapta
11 && stânga -> dreapta
12 || stânga -> dreapta
13 ? : stânga -> dreapta
14 = dreapta -> stânga
15 , stânga -> dreapta
85. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 1
Să se scrie un program care să afișeze toate
numerele perechi de numere prime gemene mai mici
decât un număr natural n dat.
Spunem că două numere a și b sunt prime gemene
dacă îndeplinesc următoarele condiții:
1. sunt prime
2. |a - b|=2
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 85
Pt. n=20 se obțin valorile:
(3,5); (5,7); (11,13); (17,19)
86. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 1: Stabilim care sunt datele de intrare, adică
cele care vor fi prelucrate cu ajutorul
algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr întreg
Date de ieșire: numere prime gemene
02.12.2016 Curs - Programarea calculatoarelor 86
87. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi prelucrate în
cadrul algoritmului.
Verificăm valorile a între 3 și n-2. Pentru aceste
valori verificăm:
a) Numărul a este sau nu număr prim
b) Numărul b=a+2 este sau nu număr prim
Dacă ambele numere sunt prime, atunci am găsit o
pereche de numere prime gemene.
02.12.2016 Curs - Programarea calculatoarelor 87
88. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 3:
Scrierea
algoritmului în
pseudocod:
02.12.2016 Curs - Programarea calculatoarelor 88
întreg n, a, b, prim1, prim2, i, j
citeşte n
pentru a=3,n-2 execută
prim1 <- 1
pentru i=2, a/2 execută
dacă a % i = 0 atunci
prim1 <- 0
sfârșit dacă
sfârșit pentru
89. Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 3:
Scrierea
algoritmului în
pseudocod:
02.12.2016 Curs - Programarea calculatoarelor 89
b <- a+2
prim2 <- 1
pentru j=2, b/2 execută
dacă b % j = 0 atunci
prim2 <- 0
sfârșit dacă
sfârșit pentru
dacă prim1 = 1 și prim2=1 atunci
scrie a, b
sfârșit dacă
sfârșit pentru
stop
90. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 2
Sa se scrie un program care sa determine
toate numerele prime palindrom dintr-un
interval [a, b] dat, cu a si b valori naturale.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 90
Pt. a=10 si b=400 se obțin valorile:
(11, 101, 131, 151, 181, 191, 313, 353, 373)
91. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 3
Se citesc numere naturale strict pozitive până
la întâlnirea numărului 0.
Să se numere câte dintre ele sunt pare,
presupunând că cel puţin primul element este
nenul.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 91
Date de intrare: 4 3 6 5 7 7 0
Date de ieşire: 2 numere pare
92. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 4
Se citesc de la tastatură numere intregi
pozitive până la întâlnirea numărului 0.
Să se scrie un program care să afişeze cea mai mică
şi cea mai mare valoare a acestor numere.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 92
Date de intrare: 550 345 100 45 0
Date de ieşire: max=550 min=100
93. copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 5
Se introduce un număr natural cu maxim 9
cifre. Să se determine şi să se afişeze numărul de
cifre, cea mai mare cifră şi suma tuturor cifrelor
acestui număr.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 93
Date de intrare: 24356103
Date de ieşire:
8 cifre
max = 6
suma = 24
94. copyright@www.adrian.runceanu.ro
Referinte bibliografice
Bibliografia necesară cursului:
1. Adrian Runceanu, Mihaela Runceanu, Noțiuni de programare în
limbajul C++, Academica Brâncuşi, Târgu-Jiu, 2012, ISBN 978-
973-144-550-2, 483 pagini
2. Adrian Runceanu, Programarea şi utilizarea calculatoarelor,
Editura Academică Brâncuși Targu-Jiu, 2003
3. Octavian Dogaru, C++ - Teorie şi practică, volumul I, Editura
Mirton, Timişoara, 2004
4. O.Catrina, I.Cojocaru, Turbo C+, Editura Teora, Bucureşti, 1993
5. D.Costea, Iniţiere în limbajul C, Editura Teora, Bucureşti, 1996
6. K.Jamsa, C++, Editura Teora,1999
7. K.Jamsa & L.Klander, Totul despre C si C++, Teora, 2004
02.12.2016 Programarea Calculatoarelor - curs 94