Documente Academic
Documente Profesional
Documente Cultură
zona directivelor preprocesor: de cele mai multe ori in program vor fi folosite functii predefinite
de limbajul standard, care sunt stocate in cadrul unor fisiere. Pentru ca functiile respective sa fie
vizibile in programele nostre, este necesara inserarea directivelor preprocesor care specifica
fisierele in care sunt definite functiile predefinite de care avem nevoie.
using namespace std; permite accesarea namespace-ului standard, care include toate
elementele bibliotecii C++.
zona declaratii variabile globale permite declararea variabilelor vizibile pe parcursul intregului
program.
zona de definire a functiilor utilizator
functia principala MAIN() reprezinta corpul efectiv al programului
zona declaratii variabile locale functiei main()
zona de instructiuni - pe langa instructiunni de citire/scriere, conditii, bucle, etc. aici se pot apela
functiile definite de utilizator
Exemplu: Sa se calculeze suma a doua numere a si b citite de la tastatura, prin intermediul unei functii.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
Profesor Ravas Centa
//afisarea rezultatului
25
26
cout<<"Suma dintre "<<a<<" si "<<b<<" este: s;
27
return 0;
28 }
Constantele sunt reprezentate tot printr-un caracter sau o insiruire de caractere alfanumerice, insa, spre
deosebire de variabilele normale, acestea nu-si vor modifica valoarea pe parcursul intregului program.
Constantele pot avea de asemenea valori intregi, reale, caracter, etc.
Exemple de constante:
In tabelul de mai jos sunt reprezentate valorile pe care le pot lua variabilelele si constantele, in functie de
principalele tipuri ale acestora:
Tip
Descriere/Dimensiune
unsigned char
tipul caracter / 8 biti
char
tipul caracter / 8 biti
unsigned int/unsigned short int numere intregi, fara semn / 16 biti
short/short int/signed short int numere intregi, cu semn / 16 biti
long/long int/signed long int
numere intregi, cu semn / 32 biti
<="" td="">
<="" td="">
float
numere reale / 32 biti
double
numere reale / 64 biti
Interval
0...255
-128...127
0...65535
-32768...32767
-2147483648...2147483647
<0...4294967295
3.4E +/- 38
1.7E +/- 308
2
Profesor Ravas Centa
O expresie reprezinta o combinatie intre mai multi operanzi si operatori, aceasta avand, ca si operanzii,
un anumit tip, in functie de combinatia de operatorsi folositi.
Operatori aritmetici unari
OperatorExplicatii
(Post/Pre)Incrementare - aduna valoarea 1 la
++
valoarea operandului
(Post/Pre)Decrementare - scade valoarea 1 de la
-valoarea operandului
Minus unar
Exemple
i++ sau
++i
i-- sau -i
-i
Exemple
x+y
x-y
x*y
x/y
x%y
Observatii
3
Profesor Ravas Centa
Daca in cadrul utilizarii unnui operato binar folosim operanzi de tip intreg, rezultatul va fi tot un
numar intreg, chiar daca rezultatul mathematic poate fi de alt tip (real). De exemplu dacafacem
impartirea x/y unde x si y sunt numere intregi (3/2), rezultatul va fi partea intreaga din raportul
matematic (1).
Operatorii aritmetici binari pot fi combinati cu operatorul de atribuire (=):
OperatorExplicatii
La operandul din stnga se aduna operandul din
+=
dreapta
Din operandul din stnga se scade operandul din
-=
dreapta
La operandul din stnga se inmulteste operandul din
*=
dreapta
Operandul din stnga se imparte la operandul din
/=
dreapta
La operandul din stnga se aduna operandul din
%=
dreapta ??????????????
Exemple
x=x+y
x=x-y
x=x*y
x=x/y
x=x%y
>
<=
>=
!=
==
Exemple
x<=""
td="">
x>y
x<=y
x>-y
x!=y
x==y
Exemple
!x
(x<y)&&(a>b)</y)&&(a>
(xb)
Negare
SI logic
SAU logic
op_1 op_2
||
op
4
Profesor Ravas Centa
se evalueaza expresie_1.
daca aceasta este adevarata,
se executa expresie_2,
altfel
se executa expresie_3.
Scheme logice
Rezolvarea oricarei probleme implica dezvoltarea unul anumit algoritm, prin intermediul caruia sa putem
dezvolta o solutie. Reprezentarea grafica a fiecarui pas elaborat in alcatuirea solutiei reprezinta schema
logica asociata algoritmului de rezolvare a problemei date.
Elementele grafice componente ale unei scheme logice se numesc blocuri.Orice schema logica poate
avea in componenta sa urmatoarele blocuri:
Bloc
Reprezentare grafica
Observatii
Blocul deSTART
Inceputul
schemei
logice.
Blocul deSTOP
Sfarsitul
schemei
logice.
Blocul de citire
Se citeste o
valoare de
la tastatura
si se
stocheaza in
variabila.
Blocul descriere
Blocul
decalcul/atribuire
Valoarea
stocata in
varibila este
afisata pe
ecran. In
afara
valorilor
variabilelor,
se mai pot
face si
afisari de
mesaje/text.
Se
evaluaeaza
expresia si
rezultatul se
stocheaza in
variabila.
5
Profesor Ravas Centa
Se
evalueaza
conditia.
Daca
conditia este
indeplinita
(1), se
executa
instructiunea
1.
Daca
conditia nu
este
indeplinita
(0), se
executa
instructiunea
2.
Blocul dedecizie
Important:
Orice schema logica are un sigur bloc de start si un singur bloc de stop.
Pe oricare ramura a schemei logice ar merge executia algoritmului, trebuie sa se ajunga la
acelasi bloc de stop.
Folosind elementele grafice de mai sus, se pot realiza scheme logice pentru orice problema.
Exemplu
Sa se realizeze schema logica pentru algoritmul care rezolva urmatoarea problema: Se citesc 2
numere de la tastatura. Sa se calculeze diferenta celor doua numere in cazul in care primul
numar este mai mare decat al doilea, respectiv suma celor doua numere, in caz contrar.
Citirea si scrierea datelor in C++
Pe langa operatiile de calcul efectuate intr-un program, de cele mai multe ori este nevoie sa introducem
anumite valori in anumite variabile, sau sa afisam respectivele valori ale variabilelor. Pentru aceste
scopuri de folosesc functiile de citire, respectiv de scriere.
Citirea variabilelor
Citirea variabilelor se realizeaza cu ajutorul functiei cin si consta in introducerea de la tastatura a unei
valori si atribuirea (automata) a acesteia unei anumite variabile.
Sintaxa: cin<<nume_var;
utiliza
functia cin in
cadrul
programelor,
trebuie
utilizata
directiva
6
Profesor Ravas Centa
#include <iostream>
Observatii:
Valoarea introdusa de la tastatura trebuie sa aiba acelasi tip cu tipul variabilei definit in cadrul
programului.
Se
pot
face
mai
multe
citiri
la
un
moment
dat
:
cin<<nume_var_1<<nume_var_2;
Exemple:
cin<<a;
cin<<a<<b;
Scrierea/afisarea variabilelor
Scrierea/afisarea variabilelor se realizeaza cu ajutorul functiei cout si consta in afisarea pe ecran a unei
valori care se gaseste intr-o variabila sau a unui text cuprins intre ghilimele ("").
Sintaxa:
cout>>nume_var;
cout>>"text_de_afisat";
utiliza
functia cout in
cadrul
programelor,
trebuie
utilizata
directiva
#include <iostream>
Observatie: Se pot face mai multe afisari la un moment dat - fie de variabile, fie de text:
cout>>nume_var_1>>"text">>nume_var_2;
Exemple:
cout>>a;
cout>>"Variabila a are valoarea:">>a;
Structura liniara
Structura decizionala
Structura repetitiva
O structura linara este utilizata in cazul problemelor simple, cand instructiunile se executa secvential
(una dupa alta).Structura liniara este suficienta de exemplu pentru afisarea (neconditionata) unui text sau
calcularea unei expresii. Pe masura ce complexitatea algoritmului creste, se impune
utilizarea structurilor decizionale, cu ajutorul carora se poate conditiona executia uneia sau mai multor
instructiuni, in functie de valorile de adevar ale anumitor expresii. In cazul in care o anumita secventa de
instructiuni se repeta pe parcursul programului, se impune utilizarea unei structuri repetitive.
7
Profesor Ravas Centa
Structura liniara
In cazul structurii liniare, toate instructiunile se executa secvential (una dupa alta), in ordinea in care
acestea sunt scrise in cadrul programului.
Exemplu: Sa se calculeze suma a doua numere naturale oarecare, introduse de la tastatura.
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
int a,b,s;
cout<<"Introduceti primul numar: a=";
cin>>a;
cout<<"Introduceti al doilea numar: b=";
cin>>b;
s=a+b;
cout<<"Suma celor 2 numere este: "<<s;
return 0;
}
Observam ca in acest caz nu avem nevoie sa testam valorile care se introduc, deci fiecare nstructiune se
va executa pe masura ce este intalnita pe parcursul programului.
Structura decizionala
Este utilizata atunci cand pe percursul unui program avem nevoie sa testam valorile anumitor variabile,
iar in functie de valoarea de adevar a rezultatului sa se execute un set sau altul de instructiuni.
Instructiunea IF
Forma generala:
if (expresie)
{
instructiune i_1 ;
instructiune i_2 ;
...
instructiune i_n
}
else
{
instructiune j_1
instructiune j_2
...
instructiune j_n
}
Interpretare:
Daca expresia este satistacuta (are valoarea de adevar 1) atunci se executa primul set de
intructiuni (instructiune i_1... instructiune i_n)
Daca expresia nu este satisfacuta (are valoarea de adevar 0) atunci se executa al doilea set de
instructiuni (instructiune j_1...instructiune j_n)
8
Profesor Ravas Centa
Observatie: Ramura else este optionala, aceasta putand fi omisa in cazul in care nu se doreste
executarea nuci unei instructiuni atunci cand conditia nu este indeplinita (expresia este falsa).
Exemplu: Sa se gaseasca solutia ecuatiei de gradul I de forma : a*x+b=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
float a,b,x;
cout<<"Introduceti primul numar: a=";
cin>>a;
cout<<"Introduceti al doilea numar: b=";
cin>>b;
if (a!=0)
{
x=-b/a;
cout<<"x="<<x;
}
else
cout<<"Ecuatia nu are solutii";
return 0;
}
Instructiunea switch
In unele cazuri este necesara testarea unei variabile in raport cu mai multe valori, iar, in fuctie de
valoarea care se afla in variabila respectiva sa se execute un anumit set de instruciuni. Acest lucru se
poate implementa fie printr-o inlantuire de mai multe structuri decizionale simple (if) fie prin
intermediul structurii decizionale multiple SWITCH.
Forma generala:
switch (expresie)
{
case valoare 1 : instructiune 1 [break]
case valoare 2 : instructiune 2 [break]
...
case valoare n-1 : instructiune n-1 [break]
[default instructiune n]
}
Interpretare:
se evalueaza expresia, urmand ca valoarea acesteia sa fie comparata cu valorile date in fiecare
caz in parte.
in cazul in care rezultatul expresiei este egal cu una din cvlaorile date, atunci se executa
instructiunea sau setul de instructiuni corespunzatoare valorii potrivite.
daca se intalneste instructiunea break, atunci restul valorilor ramase nu mai sunt evaluate.
In cazul in care rezultatul expresiei nu se gaseste printre valorile date, atunci se executa
instructiunile din ramura implicita (default). Daca aceasta lipseste, atunci nu se executa nici una
din instructiunile prevazute in cazul structurii de control.
9
Profesor Ravas Centa
Exemplu: Se dau doua numere naturale a si b. Sa se introduca unul dintre caracterele: +, -, *, iar, in
fuctie de caracterul introdus, sa se efectueze operatia corespunzatoare. In cazul in care caracterul
introdus nu este unul din cele trei mentionate, sa se afiseze mesajul "Operatie necunoscuta".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
int a,b;
char c;
cout<<"Introduceti primul numar: a=";
cin>>a;
cout<<"Introduceti al doilea numar: b=";
cin>>b;
cout<<"Introduceti caracterul: c=";
cin>>c;
switch (c)
{
case '+': cout<<a+b;break;
case '-': cout<<a-b;break;
case '*': cout<<a*b;break;
default: cout<<"Operatie necunoscuta";
}
}
Structura repetitiva
In foarte multe dintre cazuri este nevoie sa se repete una sau mai multe instructiuni. Pentru aceste cazuri
se folosesc structurile repetitive. Acestea permit reluarea executiei instructiunilor in functie de valoarea
de adevar a unei conditii. Cand conditia nu mai este adevarata, se iese din blucla respectiva si programul
continua cu executia intructiunii imediat urmatoare structurii repetitive.
Structurile repetitive sunt de trei tipuri:
10
Profesor Ravas Centa
#include <iostream>
using namespace std;
int main()
{
int i, n, a, suma;
cout<<"Cate numere sunt in sir? n=";
cin>>n;
suma=0;
cout<<"Introduceti numerele:"<<endl;
for (i=0;i<n;i++)
{
cout<<"a=";cin>>a;
suma=suma+a;
}
cout<<"Suma celor "<<n<<" numere este: "<<suma;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
int i, n, a, suma;
cout<<"Cate numere sunt in sir? n=";
cin>>n;
i=0;
suma=0;
cout<<"Introduceti numerele:"<<endl;
while (i<n)
{
cout<<"a=";cin>>a;
11
Profesor Ravas Centa
14
suma=suma+a;
15
i=i+1;
16
}
17
cout<<"Suma celor "<<n<<" numere este: "<<suma;
18 }
#include <iostream>
using namespace std;
int main()
{
int i, n, a, suma;
cout<<"Cate numere sunt in sir? n=";
cin>>n;
i=0;
suma=0;
cout<<"Introduceti numerele:"<<endl;
do
{
cout<<"a=";cin>>a;
suma=suma+a;
i=i+1;
}
while (i<n);
cout<<"Suma celor "<<n<<" numere este: "<<suma;
}
Structura liniara/decizionala
1.
12
Profesor Ravas Centa
2.
3.
Doua variabile - a si b - retin valorile pentru doua numere intregi citite de la tastatura. Sa
se interschimbe valorile celor doua numere.
4.
5.
6.
Sa se determine cel mai mare numar natural dintre 3 numere citite de la tastatura.
7.
Scrieti un program care citeste de la tastatura trei valori numerice a, b, c si apoi afiseaza
pe ecran cea mai mare diferenta dintre oricare doua valori date. Ex. a=100, b=15,
c=105. Se va afisa 90.
8.
Intr-un parc se joaca 3 copii care au greutatile a,b,c. Sa se stabileasca daca se pot
aseza pe un balansoar astfel incat acesta sa stea in echilibru.
9.
13
Profesor Ravas Centa
1.
2.
3.
4.
5.
6.
7.
8.
9.
Se citeste un numar n de cel putin 3 cifre. Sa se afiseze de cate ori se poate imparti
numarul n la numarul m (introdus de la tastatura).
10. Sa se determine cel mai mare divizor comun a doua numere naturale a si b citite.
11. Sa se calculeze valoarea lui N factorial, unde N este un numar citit de la tastatura.
12. Sa se numere si afiseze divizorii unui numar.
13. Sa se verifice daca un numar natural este prim.
14. Sa se afiseze si sa se contorizeze toate numerele prime din intervalul [a,b].
15. Sa se afiseze triunghiul:
1
12
123
1234
1 2 3n
pentru un n citit de la tastatura.
16. Sa se afiseze triunghiul :
*
**
***
****.* - de n ori
pentru n citit de la tastatura.
17. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor
pozitive. Numarul 0 nu se ia in calcul.
14
Profesor Ravas Centa
18. Un numar natural se numeste perfect daca el este egal cu suma divizorilor sai mai mici
decat el.De ex 28 este un numar perfect pentru ca 28=1+2+4+7+14.Sa se determine
toate numerele perfecte mai mici decat un numar dat (10000).
19. Fie un numar format din trei cifre. Sa se afiseze cifrele sale incepand cu cifra unitatilor.
20. Sa se afle daca un numar N introdus de la tastatura este sau nu palindrom. Palindromul
este un numar al carui rasturnat este identic cu numarul initial. Ex : 12321, 2536352,
356653
21. Fie a un numar natural format din 5 cifre. Scrieti un algoritm care sa determine si sa
afiseze numarul format din prima, a treia si a cincea cifra din a.
22. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai mare.
23. Fiind dat un numar de 4 cifre, sa se construiasca inversul acestuia si sa se faca media
aritmetica a cifrelor sale.
24. Sa se verifice daca cifrele unui numar sunt ordonate crescator.
25. Numar deal
26. Sa se creeze un program care sa realizeze descompunerea in factori primi a unui numar
natural n si sa afiseze fiecare factor prim si puterea corespunzatoare.
Vectori in C++
Un vector este un sir de mai multe valori care au acelsi tip, componentele acestuia putand fi identificate
prin numele vectorului urmat (intre paranteze drepte) de pozitia acestora in cadrul vectorului.
Declaratia unui vector se realizeaza prin specificarea tipului componentelor vectorului, identificatorul
vectorului urmat apoi de dimensiunea acestuia intre paranteze drepte:
int a[5];
- declara un sir de 5 de numere intregi
float f[10]; - declara un sir de 10 numere reale
char c[20]; - declara un sir de 20 caractere alfanumerice
Observatie: Primul element al vectorului are coordonata 0 (a[0]), al doilea are coordonata 1 (a[1]),
s.a.m.d.:
int a[5];
#include <iostream>
using namespace std;
int main()
{
int i, n, a[10];
cout<<"Cate numere sunt in sir? n=";
15
Profesor Ravas Centa
7
cin>>n;
8
cout<<"Introduceti numerele:"<<endl;
9
for (i=0;i<n;i++)
10
{
11
cout<<"a["<<i<<"]=";cin>>a[i];
12
}
13 }
a[4]=4
Initializarea vectorilor se mai poate face de asemenea fara introducerea de la tastatura ci direct din faza
declaratiei, astfel:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
int i, n;
int a[5]={6,2,9,3,4};
cout<<"Elementele sirului sunt urmatoarele:"<<endl;
for (i=0;i<5;i++)
{
cout<<"a["<<i<<"]="<<a[i]<<endl;
}
}
Exemplu: Sa se calculeze suma elementelor unui sir de n numere naturale oarecare, introduse de la
tastatura.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
int i, n, a[10], suma;
cout<<"Cate numere sunt in sir? n=";
cin>>n;
suma=0;
cout<<"Introduceti numerele:"<<endl;
for (i=0;i<n;i++)
{
cout<<"a["<<i<<"]=";cin>>a[i];
suma=suma+a[i];
}
cout<<"Suma celor "<<n<<" numere este: "<<suma;
}
16
Profesor Ravas Centa
Probleme
1.
2.
3.
Se citesc n numere naturale. Care este suma elementelor aflate pe pozitii impare in
vector? Dar a celor aflate pe pozitii pare ?
4.
5.
6.
7.
8.
9.
Sa se afiseze elementele pare care se gasesc intr-un sir de numere naturale precum si
pozitia pe care se afla acestea in cadrul sirului.
10. Se da un sir x cu n elemente intregi unde n este cuprins in intervalul [a,b], iar a si b sunt
introduse de la tastatura. Sa se calculeze:
a) suma elementelor pozitive;
b) produsul elementelor pare;
c) suma elementelor negative aflate pe pozitii impare
d) media aritmetica a elementelor care dau restul 2 la impartirea cu 5
e) sa sa numere cate elemente sunt mai mici ca 6
f) sa se verifice daca al p-lea element din sir este divizibil cu 4
11. Se da un numar format din n cifre. Sa se afiseze cifrele componente ale acestuia in
ordinea in care apar in numar.
Solutie
17
Profesor Ravas Centa