Sunteți pe pagina 1din 71

Cuprins

Vocabular
Citirea,afisarea si atribuirea
Fisiere
Vectori
Matrici
Functii
Tipul string
Tipul struct
Liste alocate static
Pointeri

1
Codeblocks

Forma generala a unui program in C++ (Codeblocks) este:

#include <iostream> //include fisierul iostream(in out stream) in program. Fisierul contine
// declaratiile unor functii pt. operatii de intrare/ iesire
using namespace std; //spatiul de nume std grupeaza logic functii si clase specifice P.O.O

int main() //programul (functia) principala


{ //inceput program

cout <<"Salut" << endl; //corpul programului


return 0;

} //sfarsitul programului
Programul de mai sus afisaza „Salut” pe ecran.
In C++ este diferenta intre literele mari si mici. Ex: Void ≠void , MAIN ≠main

Tipuri standard de date: 1)Tipul INTREG 100 , -100 (char,int,long, long long,unsigned int..)
2)Tipul REAL ex. 2.1231, -123.32, 102(float,double,long double)

TIP MEMORIE LIMITE


OCUPATA
Tip intreg

bool 1B true(1) false(0)


char 1B [0 , 255]
short int 2B [-32.768 , 32.767]
unsigned short int 2B [0 , 65.535]
int 4B [-2.147.483.648 , 2.147.483.647]
unsigned int 4B [0 , 4.294.967.295]
long 4B [-2.147.483.648 , 2.147.483.647]
unsigned long 4B [0 , 4.294.967.295]
long long 8B [-9.223.372.036.854.775.808 ,
9.223.372.036.854.775.807]
unsigned long long 8B [0 , 18.446.744.073.709.551.615]
Tip real

float 4B [1.17549e-038 , 3.40282e+038]


double 8B [2.22507e-308 , 1.79769e+308]
long double 12B [3.3621e-4932 , 1.18973e+4932]

Afisarea momoriei ocupate si a limitelor datelor pentru un tip specificat se face:


g << "Dimensiune int: " << sizeof(int) << endl;
g << "Limite: " << numeric_limits<int>::min() << ' ' << numeric_limits<int>::max() <<endl;

2
VOCABULARUL
Setul de caractere 1) Litere a,b,..z,A,B…Z
2) cifre 0,1,2,…9
3) caractere speciale @!#%<,.?/ etc.

Identificatori - nume de costante , variabile sau functii - incep cu o litera sau cu _ urmata de litere
sau cifre. Ex: a12s, as33, _007, 1a ,nt@

Cuvinte cheie - while,for,if , int ,cout,cin etc


Comentarii // pentru un rand
/* pentru
mai
multe
randuri */
Separatori space
, (virgula)
;
Enter

Citirea,afisarea si atribuirea

Citirea ( cin ) – realizeaza citirea variabilelor de la tastatura


cin>>a; //citeste variabila a de la tastatura
cin>>a>>b>>x; //citeste variabilele a,b si x de la tastatura

Afisarea (cout) – realizeaza afisarea pe ecran a unui mesaj si/sau a unei variabile
1)cout<<"Salut"; //afiseaza cuvantul salut pe ecran
2)cout<<s; //afiseaza cotinutul variabilei s pe ecran
3)cout<<"suma este: "<<s<<endl;
//daca variabila s are valoarea 201 se afiseaza pe ecran „ suma este: 201” si apoi cursorul
trece la rand nou
4)cout<<"suma este: "<<s<<endl << cout<<"produsul este: "<<p;
//afiseaza suma este: 201
produsul este: 330 (pe randuri diferite din cauza lui „endl”)
Atribuirea ( = )
x=2; // x primeste valoarea 2
a=a+1; //a creste cu 1
s=s+x; //s creste cu x
p=p*x; //p creste de x ori
x=y; // lui x i se atribuie valoarea lui y
Probleme
1.Suma a doua numere
#include <iostream>
using namespace std;
int a,b,s;
int main()
{

3
cout << "dati doua numere";
cin>>a>>b;
s=a+b;
cout<<"suma este:"<<s;
return 0;
}
1.1)Suma a trei numere
1.2)Produsul a 4 numere
2.Aria unui dreptunghi
#include <iostream>
using namespace std;
int l,L,aria;
int main()
{
cout << "dati latimea si lungimea dreptunghiului";
cin>>l>>L;
aria=l*L;
cout<<"aria dreptunghiului este:"<<aria;
return 0;
}
2.1)Gigel este un mare mincinos. El spune in fiecare zi cate o minciuna si drept urmare ii creste
nasul cu y cm dupa fiecare minciuna. Initial lungimea nasului lui Gigel este de x cm. Se cere sa se
afiseze care este lungimea nasului lui Gigel dupa n zile, stiind ca el spune in fiecare zi cate o
minciuna.

3.Media aritmetica a 3 numere


#include <iostream>
using namespace std;
int a,b,c;
float med;
int main()
{
cout << "trei numere a,b,c:";
cin>>a>>b>>c;
med=(float)(a+b+c)/3;
cout<<"media este:"<<med;
return 0;
}
10/3,5 = 2.85
11/4 = 2
(float)11/4 = 2.75

4
Operatori in C++

a)Operatori aritmetici
+ (adunare) a+b
- (scadere) a-b
* (inmultire) a*b
% (modulo restul impartirii 10%3 este 1, 125%10 este 5)
Ex:
#include <iostream>
using namespace std;
long long a,b,c,s,p;
int main()
{
cout<<"Dati doua numere";
cin>>a>>b;
cout<<"a mod b este:"<<a%b;
return 0;
}
/ (impartire sau div(=câtul))
1) / este „div” - atunci cand ambele numere din operatie sunt intregi
#include <iostream>
using namespace std;
long b , a, x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / b;
cout << "x=" << x << endl;
return 0;
}
Pentru a=101 si b=20 se afiseaza 5

2) / „este impartire” - atunci cand cel putin unul din numere este un numar real
#include <iostream>
using namespace std;
float b , a, x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / b;
cout << "x=" << x << endl;
return 0;
}
Pentru a=101 si b=20 se afisaza 5.05
Daca avem int a; si float b; sau float a; si int b; rezultatul afisat va fi acelasi.

5
Impartirea a doua numere intregi se face prin conversia catre un numar real cu comanda „(float)”
#include <iostream>
using namespace std;
int a,b;
float x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / (float)b; //sau (float)a/b; sau (float)a/(float)b;
cout << "x=" << x << endl;
return 0;
}
Daca a=101 si b=20 se afisaza 5.05
In C++ se pot face atribuiri de genul:
1) int <-float

#include <iostream>
using namespace std;
int a;
float x;
int main() {
cout << "dati x";
cin >> x;
a=x;
cout << "a=" << a << endl;
return 0;
}
Daca x=2.35 se afiseaza 2 (a primeste doar valoarea 2 nu si 0.35)
2) float <- int
Daca la programul anterior se face atribuirea float x=a; (se citeste a, int a=100) in x se va memora
100.00

b) Operatori relationali
> (mai mare)
< (se subintelege!!!)
>= (mai mare si egal)
<= (mai mic si egal)
== (egal !!!!!!!)
!= (diferit)

c) Operatori de incrementare/decrementare
++ (incrementare cu 1 adica creste cu 1)
--(decrementare cu 1 adica scade cu 1)
a++ ( explicatie: a=a+1; a creste cu 1)
++a (a creste cu 1)
a-- ( explicatie: a=a-1; a scade cu 1)
--a (a scade cu 1)

6
#include <iostream>
using namespace std;
int a,b;

int main() {
cout << "dati a si b";
cin >> a>>b;
a++;b--; // sau echivalent ++a;--b;
cout << "a="<<a << endl;
cout << "b="<<b << endl;
return 0;
}

Pentru a=100 si b=20 se afisaza a=101 si b=19


Obs:
++a este diferit de a++ daca “a” este implicat intr-o operatie
#include <iostream>
using namespace std;
int a,b,s;
int main() {
cout << "dati a si b";
cin >> a>>b;
s=b+(++a); //mai intai se face ++a si apoi se face s=b+a
cout << "a="<<a << endl;
cout << "s="<<s << endl;
return 0;
}
Daca a=100 si b=20 se afiseaza a=101 si s=121

Daca se inlocuieste s=b+(++a); cu s=b+(a++); se afiseaza 120 (se face mai intai s=b+a si apoi se face
a++)

Ex 1: Ex1:
a=3; a=3;
b=++a; => b=4 si a=4 a++;b=a;

ex2: ex2:
a=3; a=3;
b=a++; => b=3 si a=4 b=a;a++;

d) Operatori logici
! not (negat)
&& and (si)
|| or (sau)
Ex: a<=b && a<c (explicatie: a<=b si a<c)
7
c!=a || c!=b (c diferit de a sau c diferit de b)
!a (explicatie: not a)
!(a<=b)  a>b (atentie !!!!!!!!!!!!!)
!(a<b)  a>=b (atentie !!!!!!!!!!!!!)
!(a!=b)  a==b (atentie !!!!!!!!!!!!!)

e) Operatori de atribuire
= se da (ex: a=x; a=3;)
*= (p=p*a  p*=a)
+= (s=s+a  s+=a)
-= (s=s-a  s-=a)
/= (x=x/10  x/=10)
%= (cif=cif%10  cif%=10)
&=
|=
^=

Tipul char
- Se foloseste pentru memorarea unui caracter
- (int) in fata unui caracter returneza codul ASCII a caracterului
- (char) in fata unui numar returneaza caracterul cu codul ASCII corespunzator numarului
Ex1:
#include <iostream>
using namespace std;
char a,b,c;
int main()
{
cout<<"dati un caracter " ;
cin>>a;
cout <<"caracterul citit este: " <<a<<" si are codul ASCII "<<(int)a<<endl;
b=82; // se memoreaza caracterul cu codul ASCII 82(82 este codul ASCII a R)
cout<<b<<" are codul ASCII "<<(int)b<<endl; //afiseaza caracterul cu codul ASCII 82
c='*'; //se memoreaza caracterul *
cout<<c<<" are codul ASCII "<<(int)c<<endl; //afiseaza caracterul * si codul sau ASCII 42
return 0;
}

Ex2:
#include <iostream>
using namespace std;
int x;
int main()
{
cout<<"dati un numar intre 0 si 127 " ;
cin>>x;
cout <<"caracterul cu codul ASCII introdus este: " <<(char)x<<endl;
x=x+1;
cout<<"caracterul care se afla inaintea sa este: " <<(char)x<<" "<<endl;
return 0;
8
}
Ex3:
//afisati cel mai mare caracter din doua citite, si caracterul dinainte si dupa primul caracter citit
#include <iostream>
using namespace std;
char a,b,c,d;
int main()
{
cout<<"dati doua caractere " ;
cin>>a>>b;
if(a>b)cout<<"caracterul mai mare este "<<a;
else cout<<"caracterul mai mare este "<<b;
cout<<endl;
c=a-1;d=a+1;
cout<<"caracterul care se afla inaintea sa este: " <<c<<" si cel dupa el este "<<d<<endl;
return 0;
}
/* for(char c=1;c<127;c++){
cout<<c<<" -> "<<(int)c<<" ";
if(c%8==0)cout<<endl;
}*/

9
f) Operatori logici pe biti – actioneaza la nivel de bit pe numere (adica pe reprezentarea
numarului in baza 2 !!!)
<< deplasare la stanga
>> deplasare la drepta
& si
| sau
^ sau exclusiv(xor)
~ not
a b a&b a|b a^b
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
~1=0
~0=1

Operatorul deplasare la stanga „<<” Operatorul deplasare la dreapta „>>”


a=3; a=17;
cout<<(a<<2); cout<<(a>>2);
3(10)=11(2) => 1100(2) deplasat => 12(10) deci 17(10)=10001(2) => 100(2) deplasat => 4(10) deci
(3(10)<<2)=12(10) (17(10)>>2)= 4(10)
Practic a<<x este a*2x Practic a>>x este a/2x (div)
a=1; a=13;
cout<<(a<<3); se afiseaza 8 (1 1000 ) cout<<(a>>3); se afiseaza 1

Operatorul si „&” Operatorul sau „|”


a=13; b=7; a=13; b=7;
cout<<(a&b); se afisaza 5 cout<<(a|b); se afisaza 15
13(10)=1101(2) 13(10)=1101(2)
7(10)= 0111(2) 7(10)= 0111(2)
& 0101(2) =5(10) | 1111(2) =15(10)

Operatorul sau exclusiv „^” Operatorul not „~”


a=13; b=7; ~1101=0010
cout<<(a^b); se afisaza 9
13(10)=1101(2)
7(10)= 0111(2)
1010(2) =10(10)

10
Prioritatea operatorilor
1. ( )[ ] paranteze rotunde, paranteze vectori
2. ! ~ + - ++ -- not logic, not pe biti, +5,-5,a++,a--
3. * -> pointeri
4. * / % inmultire, div sau impartire, mod
5. + - a+b,a-b
6. >> << deplasare pe biti
7. < > <= >= operatori relationali
8. == != operatori relationali egal, diferit
9. & „si” operator logic pe biti
10. ^ „sau exclusiv” operator logic pe biti
11. | „sau” operator logic pe biti
12. && and„si” operator logic
12. || or „sau” operator logic
13. = += -= /= %= >>= <<= operatori de atribuire
Ex:
3%2*5=(3%2)*5=1*5=5
a<=b && z>c
b=a[i++]+4 b=a[i]+4; i++;
a>b||c>b&&d<c  a>b||( c>b&&d<c)
!4=0 !0=1 !!1=1 !!2=!0=1
a>!b && x<=y  !b , (a>!b) &&( x<=y)

Instructiunea IF
f. generala (variante a),b),c) )

if(conditie) operatie1; if(conditie) { if(conditie) operatie1;


else operatie2; operatii1;
} sau
else {
operatii2; if(conditie) {
} operatii1;
}
varianta a) varianta b) varianta c)

Explicatii:
Varianta a)
Daca conditia este adevarata se executa „operatie1”, iar daca este falsa se executa „operatie2”.
Nu se pot executa ambele operatii ( „operatie1” si „operatie2” ).
La executia if-ului se face „operatie1” sau „operatie2”, nu se poate sa nu se execute nici una.
Varianta b)
Daca if-ul sau else-ul au mai multe operatii ( 2,3,..) acestea se grupeaza intre acolade {….}
11
Varianta c)
La if-ul simplificat se realizeaza executia „operatie1” daca condita este adevarata, si daca conditia
este falsa nu se face nimic.
Daca if-ul are mai multe operatii ( 2,3,..) acestea se grupeaza intre acolade {….}

In C++ 0 este fals si ≠0 adevarat ( 0 =fals 1=adevarat, -128 =adevarat, 65201= adevarat)
Tabel pentru conditii logice: 0 false 1 true
a b a&&b a||b
F F F F
F A F A
A F F A
A A A A

Pr1. Min a doua numere


#include <iostream>
using namespace std;
int a,b;
int main()
{
cout <<"Dati valori pentru a si b";
cin>>a>>b;
if (a<b)
cout << "minimul este:"<<a<<endl;
else
cout << "minimul este:"<<b<<endl;
return 0;
}
Pr2. Max a 3 numere

#include <iostream>
using namespace std; #include <iostream>
int a,b,c; using namespace std;
int main() int a, b, c, maxi;
{ int main() {
cout << "Dati valori pentru a, b si c" << endl; cout << "dati 3 numere";
cin >>a>>b>>c; cin >> a >> b >> c;
if(a>=b && a>=c) cout<<"Maximul este a"<<endl; maxi = a;
if(b>=a && b>=c) cout<<"Maximul este b"<<endl; if (maxi < b) maxi = b;
if(c>=a && c>=b) cout<<"Maximul este c"<<endl; if (maxi < c) maxi = c;
return 0; cout<<"Max este:"<<maxi;
} return 0;
}

Pr3. Max a 5 numere


#include <iostream> #include <iostream>
using namespace std; using namespace std;
int a,b,c,d,e,maxi; int a, b, c, d, e, maxi;
int main() int main() {
{ cout << "dati 5 numere";
cout << "Dati valori pentru a,b,c,d si e" << endl; cin >> a >> b >> c >> d >> e;
cin >>a>>b>>c>>d>>e; maxi = a;
12
if(a>=b && a>=c && a>=d && a>=e) maxi=a; if (maxi < b) maxi = b;
if(b>=a && b>=c && b>=d && b>=e) maxi=b; if (maxi < c) maxi = c;
if(c>=a && c>=b && c>=d && c>=e) maxi=c; if (maxi < d) maxi = d;
if(d>=a && d>=c && d>=b && d>=e) maxi=d; if (maxi < e) maxi = e;
if(e>=a && e>=c && e>=d && e>=b) maxi=e; cout<<"Max este:"<<maxi;
cout<<"maximul este:"<<maxi; return 0;
return 0; }
}

Pr4. Ec de gr.I Pr5. Ec de gr.II


a X + b =0 2x+4=0 0x+5=0 a x2 + b x +c=0 sqrt(25)=5
#include <iostream> #include <iostream>
using namespace std; #include <cmath>
int a,b; using namespace std;
float x; int a, b, c, d;
int main() float x1, x2;
{ int main() {
cout << "Dati coeficientii ecuatiei a si b" << cout << "Dati valori pentru a, b si c" << endl;
endl; cin >> a >> b >> c;
cin>>a>>b; if(a!=0){
if(a!=0){ d=b*b-4*a*c;
x=-(float)b/a; if(d>=0){
cout<<x<<endl; x1=(-b+sqrt(d))/(float)(2*a);
} x2=(-b-sqrt(d))/(float)(2*a);
else cout<<"x1="<<x1<<endl<<"x2="<<x2;
if(b==0) }
cout<<"orice x este solutie"<<endl; else
else cout <<"nu exista solutii reale";
cout<<"nu exista solutii"; }
return 0; else{
if(b!=0){
} x1=-(float)c/b;
cout <<x1<<endl;
}
else{
if (c==0)
cout<<"orice x1 e solutie a ecuatiei";
else
cout<<"nu exista solutie pt ecuatie";
}
}
return 0;
}

13
Pr6. Relatia intre 2 numere(<,>,=)
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int a,b; int a,b;
int main() int main()
{ {
cout << "Dati valori pentru a, b" << endl; cout << "Dati valori pentru a, b" << endl;
cin >>a>>b; cin >>a>>b;
if(a>b) cout<<"a >b"<<endl; if(a>b) cout<<"a >b"<<endl;
if(a<b) cout<<"a<b"<<endl; else
if(a==b) cout<<"a==b"<<endl; if(a<b) cout<<"a<b"<<endl;
return 0; else cout<<"a==b"<<endl;
} return 0;
}

//intersectia a doua intervale [a,b] si [c,d]


#include <iostream>
using namespace std;
int a, b, c, d;
int main() {
cout << "Dati valori pentru [a, b] [c,d]";
cin >> a >> b >> c>>d;
if(c<a) {swap(a,c);swap(b,d);} // swap(a,c);  aux=a;a=c;c=aux;(metoda paharelor)
if(b<c)cout<<"multimea vida";
else if(d>b)cout<<"["<<c<<","<<b<<"]";
else cout<<"["<<c<<","<<d<<"]";
return 0;
}

Pr7. Adunarea a doua durate de timp


9 30’ 20” (h1 m1 s1) +
3 42’ 50” (h2 m2 s2)
13 13’ 10” (h m s )

#include <iostream>
using namespace std;
int h, h1, h2, m, m1, m2, s, s1, s2;
int main() {
cout << "Dati valori pentru h1,h2,m1 si m2,s1,s2:" << endl;
cin >> h1 >> m1 >> s1 >> h2 >> m2 >> s2;
s = s1 + s2;
m = m1 + m2;
h = h1 + h2;
if (s >= 60) {
s = s - 60;
m = m + 1;
}
if (m >= 60) {
m = m - 60;
h = h + 1;
14
}
cout << h << " " << m << " " << s << endl;
return 0;
}

Pr8. Inversul unui numar short int


Pr9. Comparati doua date calendaristice
Pr10. Fie a,b,c laturile unui triunghi. Precizati tipul triunghlui: oarecare, isoscel, echilateral,
dreprunghic, dreptunghic isoscel.
Pr11. Fie 3 numere a,b,c. precizati relatiile dintre ele: a=b=c,a≠b≠c,a=b≠c,a=c≠b,b=c≠a
Tema
Inversul unui numar de 3 cifre
Min 4 nr
//Fie un nr de maxim 3 cifre.Calculati inversul sau.
#include <iostream>
using namespace std;
int x, cif1, cif2, cif3, y;
int main()
{
cout << "Dati un numar x"<< endl;
cin>>x;
if(x>=0&&x<=9) y=x;
if(x>=10&&x<=99){
cif1=(x%10);
cif2=(x/10);
y=cif1*10+cif2;
}
if(x>=100&&x<=999){
cif1=(x%10);
cif2=(x/10%10);
cif3=(x/100);
y=cif1*100+cif2*10+cif3;
}
cout<<"Numarul este:"<<y<<endl;
return 0;
}
/*148 cif1=8 cif2= 4 cif3=1
cif1*100+cif2*10+cif3=800+40+1=841

1258%10=8 x%10=ultima cifra a lui x


1258%100=58 x*100=numarul format din ultimele doua cifre
1258/10=125 x/10=numarul taiat(fara ultima cifra)
345/10=34
1258/100=12 x/100= taie doua cifre din x
1258/10%10=5
*/
//suma cif. unui numar de maxim 5 cifre
#include <iostream>
using namespace std;
int x, c1, c2, c3,c4,c5,s;
int main()

15
{ cout<<"dati x";
cin>>x;
if (x>=0 && x<=9) s=x;
if (x>=10 && x<=99) {
c1=x%10;
c2=x/10;
s=c1+c2;
}
if (x>=100 && x<=999) {
c1=x%10;
c2=x/10%10;
c3=x/100;
s=c1+c2+c3;
}
if (x>=1000 && x<=9999) {
c1=x%10;
c2=x/10%10;
c3=x/100%10;
c4=x/1000;
s=c1+c2+c3+c4;
}
if (x>=10000 && x<=99999) {
c1=x%10;
c2=x/10%10;
c3=x/100%10;
c4=x/1000%10;
c5=x/10000;
s=c1+c2+c3+c4+c5;
}
cout<<"suma cifrelor lui x este:"<<s;

return 0;
}
//afisati cifra maxima dintr-un numar(cu maxim 3 cifre)
using namespace std;
int x, c1, c2, c3, maxi;
int main()
{ cout<<"dati valoare lui x";
cin>>x;
if (0<=x && x<=9) maxi=x;
if (10<=x && x<=99) { c1=x%10;
c2=x/10;
if (c1>c2) maxi=c1;
else maxi=c2;
}
if (100<=x && x<=999) {c1=x%10;
c2=x/10%10;
c3=x/100;
if (c1>c2) maxi=c1;
else maxi=c2;
if (maxi<c3) maxi=c3;

16
}
cout << "cifra maxima este:" <<maxi<< endl;
return 0;
}
//fie un numar de doua cifre. Afisati cel mai mare numar
//ce se poate forma cu cifrele sale
//ex: x=29 => 92
//x=71 => 71
#include <iostream>
using namespace std;
int x, c1, c2,nr;
int main()
{ cout<<"dati valoare lui x";
cin>>x;
c1=x%10;
c2=x/10;
if (c1>c2) nr=c1*10+c2;
else nr=c2*10+c1;
cout << "numarul maxim este:" <<nr<< endl;
return 0;
}

17
Instructiuni repetitive (for, while, do while)

for
forma generala:

for( i=vali; i<=valf; i++ ) operatie1


sau
for( i=vali; i<=valf; i++ ) {
operatii1
}
Comanda for are trei sectiuni:
-prima =se precizeaza conditiile initiale (ex: i=1;)
- a doua =se precizeaza conditia finala (ex: i<=n;)
- a treia =se precizeaza pasul cu care se incrementeaza contorul i
Ordinea de executie:
se face initializarea,
se verifica conditia,daca conditia este adevarata se fac operatiile,
se incrementeaza pasul,
se verifica conditia,daca conditia este adevarata se fac operatiile,
se incrementeaza pasul,……
si tot asa pana conditia devine falsa

unde vali – valoare initiala


valf – valoare finala

executie: i - ia valorile vali,vali+1,vali+2, ….valf-1,valf si pentru fiecare valoare a lui i se executa


„operatie1”.

Ex1: for(i=1;i<=n;i++) cout<<i<<” ”; se afiseaza pe ecran 1 2 3 4 5 ..n

Exista for(i=n;i>=1;i--) cout<<i<<” ”; se afiseaza pe ecran n n-1 .. 3 2 1

Exista for(i=2;i<=11;i=i+2) cout<<i<<” ”; se afiseaza pe ecran 2 4 6 8 10

Ex2: Calculati suma s=1+2+3+…100

s=0;
for(i=1;i<=100;i++) s+=i; //sau s=s+i;
cout<<”suma este: ”<<s;

18
Probleme:

1.Calculati p=2*4*6* ..*n 2.E=1/1+1/2+1/3+…+1/n

//p=2*4*..*n
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,p; int i,n;
int main() float s;
{ int main()
cout<<"Dati un numar n par: "; {
cin>>n; cout<<"Dati n: ";
p=1; cin>>n;
for(i=2;i<=n;i=i+2) p*=i; //sau p=p*i; s=0;
cout<<"Produsul nr pare din sir este:"<<p; for(i=1;i<=n;i++) s+=(float)1/i;
return 0; cout<<"Suma este:"<<s;
} return 0;
}

3 .S=2+5+8+11+…..+n 4.S=23+43+63+…+n3
#include <iostream>
using namespace std; #include <iostream>
int i,n,s; #include<cmath>
int main() using namespace std;
{ int i,n,s;
cout<<"Dati un numar n par: "; int main()
cin>>n; {
s=0; cout << "Dati un nr n:";
for(i=2;i<=n;i=i+3) s+=i; cin>>n;
cout<<"Suma este:"<<s; for(i=2;i<=n;i=i+2) s+=i*i*i;
return 0; //s=s+pow(i,3);
} cout<<"Suma este:"<<s;
return 0;
}

5. E=1 + 1*2 + 1*2*3 + 1*2*3*4 +… 6. Suma a n numere


+1*2*3*..*n=1!+2!+3!+..+n! //suma a n numere

#include <iostream> #include <iostream>


using namespace std; using namespace std;
int i, s, n, p; int i, s, n, x;
int main() { int main() {
cout << "Dati un nr n:"; cout << "Dati un nr n:";
cin >> n; cin >> n;
p = 1; for (i = 1;i <= n;i++) {
for (i = 1;i <= n;i++) { cin >> x;
p *= i; s += x;
s += p; }
} cout << "Suma este:" << s;
//var II return 0;
//s=0; }
19
// for (i = 1;i <= n;i++) {
// p=1;
//for(j=1;j<=i;j++)p *= j; //calculam i!
//s += p;
// }
cout << "Suma este:" << s;
return 0;}
7.Suma numerelor pare dintr-un sir 8.Pentru un sir de n numere aflati minimul.
#include <iostream> //minimul dintr-un sir de numere
using namespace std; #include <iostream>
int i, s, n, x; using namespace std;
int main() { int i, n, x, mini;
cout << "Dati un nr n:"; int main() {
cin >> n; cout << "Dati un nr n:";
for (i = 1;i <= n;i++) { cin >> n; mini = 32.000;
cin >> x; for (i = 1;i <= n;i++) {
if(x%2==0) s += x; cin >> x;
} if (x < mini) mini = x;
cout << "Suma celor pare este:" << s; }
return 0; cout << "Minimul din sir este:" << mini;
} return 0;
}

9. Pentru un sir de n numere aflati minimul par. 10. Pentru un sir de n numere aflati maximul.
//minimul par dintr-un sir de n //Maximul dintr-un sir

#include <iostream>
#include <iostream> using namespace std;
using namespace std; int i,n,maxi,x;
int x,mini,n,i; int main()
int main() {
{ cout << "Dati un nr n:";
cout << "Dati un nr n: "; cin>>n;
cin>>n; mini=2000000000; for(i=1;i<=n;i++){
for(i=1;i<=n;i++){ cin>>x; cin>>x;
if(x%2==0 && x<mini) mini=x; if(x>maxi) maxi=x;
}
} cout<<"Maximul este:"<<maxi;
if(mini==2000000000) return 0;
cout<<"Nu exista minim par"; }
else cout<<"Minimul par este:"<<mini;
return 0;
}

11. Pentru un sir de n numere aflati cate elemente


pozitive, negative si nule sunt.
//cate numere pozitive, negative si nule sunt intr-un
sir.

#include <iostream>
using namespace std;

20
int x, i, n, kn, kp, ko;
int main() { 12.Media aritmetica a numerelor pozitive dintr-
cout << "Dati un nr:"; un sir.
cin >> n; //media aritmetica a nr. pozitive dintr-un sir
for (i = 1;i <= n;i++) {
cin >> x; #include <iostream>
if (x > 0) kp = kp + 1; //kp++; using namespace std;
if (x == 0) ko = ko + 1; //ko++; int i, n, x, s, k;
if (x<0) kn = kn + 1; //kn++; float ma;
} int main() {
cout << "Nr el. pozitive este:" << kp<< endl; cout << "Dati un nr:";
cout << "Nr el. negative este:" << kn<< endl; cin >> n;
cout << "Nr el. nule este:" << ko; for (i = 1;i <= n;i++) {
return 0; cin >> x;
} if (x%3==0) { s += x; k++; }
}
ma = (float)s / k;
cout << "ma=" << ma;
return 0;
}

Tema
S=1/n+2/(n-1)+3/(n-2)+..+n/1
S=100+98+96+94+….+12
S=1/(1*1)+ 1/(2*2)+ 1/(3*3)+.. +1/(n*n)
S=(1)*(1+2)*(1+2+3)*..*(1+2+3+…+n)
13.Divizorii unui numar x.
#include <iostream>
using namespace std;
int x, d, n;
int main()
{
cout<<"dati x";
cin>>x;
for (d=1; d<=x; d++)
if (x%d==0) cout<<d<<" ";
return 0;
}
14.Fie doua numere. Afisati numarul ce are cei mai multi divizori.
15.Verificati daca un numar este perfect.
16.Verificati daca un numar este prim.
17. Media aritmetica a numerelor pare si media 18. Fie doua numere. Afisati numarul ce are cei
aritmetica a numerelor impare. mai multi divizori.
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,x,sp,si,kp,ki; int i,n,x,y,k1,k2;
float map,mai; int main()
int main() {
cout<<"Dati un nr x:";
{
cin>>x;
cout << "Dati un nr n:";
cout<<"Dati un nr y:";
cin>>n; cin>>y;
for(i=1;i<=n;i++){ for(i=1; i<=x; i++)
cin>>x;
21
if(x%2==0){ sp+=x; if(x%i==0) k1++;
kp++;} for(i=1; i<=y; i++)
if(y%i==0) k2++;
else { si+=x; if(k1>k2)
ki++;} cout<<"x are mai multi divizori";
} else if(k1==k2) cout<<"x si y au acelasi nr de
map=(float)sp/kp; divizori";
else cout<<"y are mai multi divizori";
mai=(float)si/ki;
return 0;
cout<<"Media aritmetica a nr pare
}
este:"<<map<<endl;
cout<<"Media aritmetica a nr impare
este:"<<mai;
return 0;
}

22
WHILE - structura repetitiva cu test initial
Forma generala:
while(cond) instructiune1;
sau
while(cond){
instructiuni1;
}
Execututie: Daca conditia (cond) este adevarata se realizeaza executia repetata.
Cand conditia (cond) este falsa se iese din repetare.

DO WHILE - structura repetitiva cu test final


Forma generala:
do{
instructiune1;
}while(cond);
Execututie: Daca conditia (cond) este adevarata se realizeaza executia repetata.
Cand conditia (cond) este falsa se iese din repetare.

Probleme
1.Descompunerea in factori primi pt. un numar x 2. Suma a n numere dintr-un sir
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int x, d, p; int i,n,x,s;
int main() { int main()
cout << "Dati un nr x:"; {
cin >> x; cout << "Dati un nr n:";
d = 2; cin>>n; i=1;
while (x != 1) { while(i<=n){
p = 0; cin>>x;
while (x % d == 0) { s+=x;
p++; i++;
x = x / d; }
} cout<<"Suma nr din sir este:"<<s;
if (p > 0) cout << d << " " << p << endl; return 0;
d++; }
}
return 0;
}

3. Cmmdc a doua numere. 4.Cmmmc a doua numere.


#include <iostream> #include <iostream>
using namespace std; using namespace std;
int x,y; int a,b,p;
int main() float cmmmc;
{ int main()
cout << "Dati doua nr x si y:"; {
cin>>x>>y;
cout << "Dati doua nr a si b:";
while (x!=y){
cin>>a>>b; p=a*b;
if(x>y) x=x-y;
else y=y-x; while(a!=b){
if(a>b) a=a-b;
23
} else b=b-a;
cout<<"cmmdc a nr x si y este:"<<x; }
return 0; cmmmc=p/a;
} cout<<"cmmmc="<<cmmmc;
return 0;
}

Probleme cu structuri repetitive

1.Media aritmetica a numerelor pare si media 2. Fie doua numare x si y. Afisati un mesaj ce
aritmetica a numerelor impare dintr-un sir. precizeaza care numar are mai multi divizori.
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,x,sp,si,kp,ki; int i,n,x,y,k1,k2;
float map,mai; int main()
int main() {
{ cout<<"Dati un nr x:";
cout << "Dati un nr n:"; cin>>x;
cin>>n; cout<<"Dati un nr y:";
for(i=1;i<=n;i++){ cin>>y;
cin>>x; for(i=1; i<=x; i++)
if(x%2==0){ sp+=x; if(x%i==0) k1++;
kp++;} for(i=1; i<=y; i++)
if(y%i==0) k2++;
else { si+=x; if(k1>k2)
ki++;} cout<<"x are mai multi divizori";
} else if(k1==k2) cout<<"x si y au acelasi nr de
map=(float)sp/kp; divizori";
mai=(float)si/ki; else cout<<"y are mai multi divizori";
cout<<"Media aritmetica a nr pare return 0;
este:"<<map<<endl; }
cout<<"Media aritmetica a nr impare
este:"<<mai;

return 0;
}
3.Precizati daca exista numere impare intr-un sir.
#include <iostream>
using namespace std;
int i,x,n,ok;
int main()
{
cout << "Dati un nr n:";
cin>>n; ok=0;
for(i=1;i<=n;i++){
cin>>x;
if(x%2==1) ok=1;
}
if(ok==1) cout<<"Da";
else cout<<"Nu";
return 0;
}
24
Fisiere
Intr-o problema citirea datelor se poate face de la tastatura sau din fisier.
Afisarea rezultatelor se poate face pe ecran sau intr-un fisier.

Problema

Suma a doua numere.


Citirea numerelor se face din fisierul „gigel.in” si afisarea sumei se face in fisierul „gigel.out”;
#include <iostream>
#include<fstream>
using namespace std;
fstream f("gigel.in",ios::in); -> indicatorul f va indica la fisierul „gigel.in”
fstream g("gigel.out",ios::out); -> indicatorul g va indica la fisierul „gigel.out”
//ifstream f("gigel.in");
//ofstream g("gigel.out");
int a,b,s;
int main()
{
f>>a>>b;
s=a+b;
g<<"suma este:"<<s;
f.close();
g.close();
return 0;
}

1.//suma unui sir de numere cu fisiere 2.Afisati minimul, maximul si cmmdc dintre
minim si maxim
#include <iostream>
#include<fstream> #include <iostream>
using namespace std; #include<fstream>
fstream f("sir.in",ios::in); using namespace std;
fstream g("sir.out",ios::out); ifstream f("sir.in");
int i,n,x,s; ofstream g("sir.out");
int main() int mini,maxi,i,n,x;
{ int main()
f>>n; {
for(i=1;i<=n;i++){ f>>n; maxi=-32000; mini=32000;
f>>x; for(i=1;i<=n;i++){
s+=x; f>>x;
} if(maxi<x) maxi=x;
g<<"suma este:"<<s; if(mini>x) mini=x;
f.close(); }
g.close(); g<<"Minimul este:"<<mini<<endl;
return 0; g<<"Maximul este:"<<maxi<<endl;
} while(mini!=maxi)
if(mini>maxi) mini=mini-maxi;
else maxi=maxi-mini;
g<<"cmmdc este:"<<mini;
f.close();
g.close();
return 0;

25
}
3.Precizati daca un numar este prim. 4.Afisati numerele prime din intervalul [a.b].
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
#include<cmath> using namespace std;
using namespace std; fstream f("sir.in", ios::in);
fstream f("sir.in",ios::in); fstream g("sir.out", ios::out);
fstream g("sir.out",ios::out); int a, b, i, x, j, k;
int x,k,i; int main() {
int main() f >> a >> b;
{ for (i = a;i <= b;i++) {
f>>x; x = i;k = 0;
for(i=2;i<=sqrt(x);i++) for (j = 1;j <= x;j++) {
if(x%i==0){ if (x % j == 0) k++;
k=1;break;} }
if(k==0) g<<"Da"; if (k == 2) g << x << " ";
else g<<"Nu"; }
f.close();
g.close(); f.close();
return 0; g.close();
} return 0;
}
5.Suma numerelor prime dintr-un sir de n.
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int n,i,x,j,k,s;
int main()
{
f>>n; s=0;
for(i=1;i<=n;i++){
f>>x; k=0;
for(j=1;j<=x;j++){
if(x%j==0) k++;}
if(k==2) s=s+x;
}
g<<s;
f.close();
g.close();
return 0;
}

26
Vectori
Un vector reprezinta un sir de elemente cu un nume comun asezate in ordine.
Ex: un vector cu 10 elemente: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
Declararea vectorui de mai sus in C++ se face astfel: int a[10] .
Elementele sale sunt: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
In general nu vom folosi elemetul a[0].
Operatii de baza cu vectori
1) citirea elementelor unui vector
a)de la tastatura
cout<<"dati n";
cin >> n;
for (i = 1;i <= n;i++){
cout<<"dati element";
cin >> a[i];
}
b)din fisier
f >> n;
for (i = 1;i <= n;i++) f>>a[i];

2) afisarea elementelor unui vector


a)afisarea pe ecran
for (i = 1;i <= n;i++) cout<< a[i]<< " ";
b)in fisier
for (i = 1;i <= n;i++) g<< a[i]<< " ";
3) suma elementelor unui vector
s=0;
for (i = 1;i <= n;i++) s+=a[i];
cout<< "Suma este: "<<s;
4) minimul dintr-un sir
mini=320000;
for (i = 1;i <= n;i++)
if (min>a[i]) mini=a[i];
cout<< "minimul este: "<<mini;

5) cate elemente pare sunt intr-un sir


k=0;
for (i = 1;i <= n;i++)
if(a[i]%2==0) k++;
cout<< "k este: "<<k;

6) inlocuiti elementele pare cu ultima cifra numarului si cele impare cu penultima cifra
for (i = 1;i <= n;i++)
if(a[i]%2==0) a[i]=a[i]%10;
else a[i]=a[i]/10%10
pr1
Suma numerelor dintr-un sir
#include <iostream>
#include<fstream>
#define MAX 1000
using namespace std;
fstream f("sir.in", ios::in);
27
fstream g("sir.out", ios::out);
int a[MAX], n, i, s;
int main() {
f >> n;
for (i = 1;i <= n;i++)
f >> a[i];
for (i = 1;i <= n;i++)
s+=a[i];
g << "Suma este:" << s;
f.close();
g.close();
return 0;
}

Pr2
Suma numerelor prime dintr-un sir
#include <iostream>
#include<fstream>
#include<cmath>
using namespace std;
fstream f("sir.in", ios::in);
fstream g("sir.out", ios::out);
int a[100], n, i, s, x, j, k;
int main() {
f >> n;
for (i = 1;i <= n;i++) f >> a[i];
for (i = 1;i <= n;i++) {
x = a[i]; k=0;
for (j = 2;j <= sqrt(x);j++)
if (x % j == 0) k++;
if (k == 0) s += x;
}
g << "Suma nr prime din sir este:" << s;
f.close();
g.close();
return 0;
}

Pr3
//afisati numerele vecine ce au aceiasi paritate
Varianta 1
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int a[1000],n,i,x,y;
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<n;i++){
x=a[i]; y=a[i+1];
if((x%2==0&&y%2==0)||(x%2==1&&y%2==1)) g<<a[i]<<" "<<a[i+1]<<endl;

28
}
f.close();
g.close();
return 0;
}
//afisati numerele vecine ce au aceiasi paritate
Varianta 2
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int a[1000],n,i,x,y;
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<n;i++){
x=a[i]; y=a[i+1];
if(x%2==y%2)) g<<a[i]<<" "<<a[i+1]<<endl;
}
f.close();
g.close();
return 0;
}

Fie doua multimi a si b. Afisati intersectia celor Fie doua multimi a si b. Afisati reuniunea celor
doua multimi. doua multimi.
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[1000],i,n,m,b[1000],j; int a[1000],b[1000],n,i,j,m,k;
int main() int main()
{ {
f>>n; f>>n;
for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) f>>a[i];
f>>m; f>>m;
for(j=1;j<=m;j++) f>>b[j]; for(j=1;j<=m;j++) f>>b[j];
for(i=1;i<=n;i++) for(i=1;i<=n;i++) g<<a[i]<<" ";
for(j=1;j<=m;j++) for(j=1;j<=m;j++){
if(a[i]==b[j]) g<<a[i]<<" "; k=0;
g.close(); for(i=1;i<=n;i++)
return 0; if(b[j]==a[i]) k++;
} if(k==0) g<<b[j]<<" ";
}
f.close();
g.close();
return 0;
}
Fie un sir de n elemente. Afisati sirul ordonat Fie un sir de n elemente. Afisati sirul ordonat
crescator.(Met selectiei) crescator.(Met bulelor)
#include <iostream> #include <iostream>

29
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[145],n,i,j,aux; int a[136],i,n,aux,ord;
int main() int main()
{ {
f>>n; f>>n;
for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++) do{ ord=1;
for(j=i+1;j<=n;j++) for(i=1;i<n;i++)
if(a[i]>a[j]){ if(a[i]>a[i+1]){
aux=a[i]; aux=a[i];
a[i]=a[j]; a[i]=a[i+1];
a[j]=aux; a[i+1]=aux;
} ord=0;}
for(i=1;i<=n;i++) g<<a[i]<<" "; }
g.close(); while(ord==0);
return 0; for(i=1;i<=n;i++) g<<a[i]<<" ";
}
return 0;
}
Fie un sir de numere in intervalul[1,1000].Afisati //afisati elementele pare descrescator si suma
elementele ce apar de cele mai multe ori. cifrelor minimului
(cu frecventa) sir.in
sir.in 6
6 21 14 42 81 91 36
838753 sir.out
sir.out 0 1 2 3 4 5 6 7 8 9 …… 42 36 14
38 00020101200000 5
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in", ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out", ios::out); fstream g("sir.out",ios::out);
int fr[1001], x, i, n, maxi,j; int a[1000],n,j,aux,i,sc,cif,x;
int main() { int main()
f >> n; maxi = 0; {
for (i = 1;i <= n;i++) { f>>n;
f >> x; for(i=1;i<=n;i++) f>>a[i];
fr[x]++; for(i=1;i<n;i++)
} for(j=i+1;j<=n;j++)
for (j = 1;j <= 1000;j++) if(a[i]<a[j]){
if (maxi < fr[j]) maxi = fr[j]; aux=a[i];
for (j= 1;j <= 1000;j++) a[i]=a[j];
if (maxi == fr[j]) g << j<< " "; a[j]=aux;}
f.close(); for(i=1;i<=n;i++)
g.close(); if(a[i]%2==0)
return 0; g<<a[i]<<" ";
} g<<endl;
x=a[n];
while(x!=0){ cif=x%10;
sc+=cif;
x=x/10;

30
}
g<<sc;
f.close(); g.close();
return 0;
}

31
Matrici (tablouri bidimensionale)
O matrice este un tablou cu m linii si n coloane.
Marice patratica
Ex: o matrice a 4x5

a[1][1] a[1][2] a[1][3] a[1][4] a[1][5]

a[2][1] a[2][2] a[2][3] a[2][4] a[2][5]

a[3][1] a[3][2] a[3][3] a[3][4] a[3][5]

a[4][1] a[4][2] a[4][3] a[4][4] a[4][5]

d. principala i=j
sub principala i >j
deasupra principala i<j
d. secundara i+j=n+1
sub i+j>n+1
deasupra i+j<n+1
Prima linie este formata din elementele: a[1][1] a[1][2] a[1][3] a[1][4] a[1][5]
A treia coloana:
a[1][3]
a[2][3]
a[3][3]
a[4][3]
Un element din matrice este a[i][j] si el se afla in matrice pe linia i si coloana j;
Operatii cu matrici
a)citirea unei matrici
citirea din fisier citirea de la tastatura

f>>m>>n; cout<<"dati numarul de linii si coloane:";


for(i=1;i<=m;i++) cin>>m>>n;
for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++)
for(j=1;j<=n;j++) {
cout<<"dati element:";
cin>>a[i][j];
}

b)afisarea unei matrici

afisarea in fisier afisarea pe ecran

for(i=1;i<=m;i++){ for(i=1;i<=m;i++){
for(j=1;j<=n;j++) g<<a[i][j]<<" "; for(j=1;j<=n;j++) cout<<a[i][j]<<" ";
g<<endl; cout<<endl;
32
} }

c)suma elementelor dintr-o matrice


s=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++) s+=a[i][j];
cout<<"suma din matrice este: "<<s;
Sa se construiasca o matrice astfel incat a[i][j] este Construiti matricea mxn
minimul dintre i si j Ex: pentru o matrice 5x4 rezulta
Pentu mxn(3x4) rezulta matricea 1234
1111 1234
1222 1234
1233 1234
#include <iostream> 1234
#include <fstream> #include <iostream>
using namespace std; #include <fstream>
ifstream f("sir.in"); using namespace std;
ofstream g("sir.out"); ifstream f("sir.in");
int a[100][100],m,n,i,j; ofstream g("sir.out");
int main() int a[100][100],m,n,i,j;
{ int main()
f>>m>>n; {
for(i=1;i<=m;i++) f>>m>>n;
for(j=1;j<=n;j++) for(i=1;i<=m;i++)
if(i<j) a[i][j]=i; for(j=1;j<=n;j++)
else a[i][j]=j; a[i][j]=j;
for(i=1;i<=m;i++){ for(i=1;i<=m;i++){
for(j=1;j<=n;j++) g<<a[i][j]<<" "; for(j=1;j<=n;j++) g<<a[i][j]<<" ";
g<<endl; g<<endl;}
} f.close (); g.close ();
f.close (); g.close (); return 0;
return 0; }
}
Suma de pe prima linie si suma de pe ultima Afisati elementele divizibile cu 3 si minimul din
coloana matrice.
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[10][10],m,n,i,j,s1,s; int a[15][20],m,n,i,j,mini;
int main() int main()
{ {
f>>m>>n; f>>m>>n; mini=32.000;
for(i=1;i<=m;i++) for(i=1;i<=m;i++)
for(j=1;j<=n;j++) for(j=1;j<=n;j++)
f>>a[i][j]; f>>a[i][j];
for(j=1;j<=n;j++) for(i=1;i<=m;i++){
s1+=a[1][j]; for(j=1;j<=n;j++)
g<<s1<<endl; g<<a[i][j]<<" ";
for(i=1;i<=m;i++) g<<endl;}
s+=a[i][n]; for(i=1;i<=m;i++)
g<<s<<endl; for(j=1;j<=n;j++)
f.close (); g.close (); if(a[i][j]%3==0) g<<a[i][j]<<" ";
return 0; g<<endl;
33
} for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]<mini) mini=a[i][j];
g<<mini;
f.close();
g.close();
return 0;
}
Suma elementelor si numarul elementelor pare Suma pe fiecare linie dintr-o matrice
#include <iostream> Var I
#include<fstream> #include <iostream>
using namespace std; #include<fstream>
fstream f("sir.in",ios::in);
using namespace std;
fstream g("sir.out",ios::out);
int a[10][10],s,k,i,j,n,m;
fstream f("sir.in",ios::in);
int main() fstream g("sir.out",ios::out);
{ int a[10][10],m,n,i,j,s;
f>>m>>n; int main()
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) f>>m>>n;
f>>a[i][j]; for(i=1;i<=m;i++)
for(i=1;i<=m;i++) for(j=1;j<=n;j++)
for(j=1;j<=n;j++) f>>a[i][j];
s+=a[i][j]; for(i=1;i<=m;i++){
g<<s<<endl;
s=0;
for(i=1;i<=m;i++) for(j=1;j<=n;j++)
for(j=1;j<=n;j++) s+=a[i][j];
if(a[i][j]%2==0) k++; g<<s<<endl;
g<<k; }
f.close(); f.close();
g.close(); g.close();
return 0; return 0;
} }
Suma pe fiecare linie dintr-o matrice(cu un vector Suma de pe linia p
suplimentar) var II #include <iostream>
#include <iostream> #include<fstream>
#include<fstream> using namespace std;
fstream f("sir.in",ios::in);
using namespace std;
fstream g("sir.out",ios::out);
fstream f("sir.in",ios::in); int a[10][10],m,n,p,i,j,sp;
fstream g("sir.out",ios::out); int main()
int a[10][10],b[10],m,n,i,j; {
int main() f>>m>>n>>p;
{ for(i=1;i<=m;i++)
f>>m>>n; for(j=1;j<=n;j++)
for(i=1;i<=m;i++) f>>a[i][j];
for(j=1;j<=n;j++) for(j=1;j<=n;j++)
f>>a[i][j]; sp+=a[p][j];
for(i=1;i<=m;i++) g<<sp;
f.close();
for(j=1;j<=n;j++)
g.close();
b[i]+=a[i][j]; return 0;
for(i=1;i<=m;i++) }
g<<b[i]<<endl;
f.close();
g.close();
return 0;

34
}

Afisarea in zig-zag a unei matrici Ordonarea elementelor dintr-o matrice


sir.in sir.in
33 33
168 7 2 1
10 8 4
345
3 1 2
279 sir.out
sir.out 112
168543279 234
#include <iostream> 7 8 10
#include<fstream> #include <iostream>
using namespace std; #include<fstream>
fstream f("sir.in",ios::in); using namespace std;
fstream g("sir.out",ios::out); fstream f("sir.in",ios::in);
int a[10][10],n,m,i,j; fstream g("sir.out",ios::out);
int main() int a[10][10],b[100],m,n,i,j,p,aux;
int main()
{
{
f>>m>>n; f>>m>>n;
for(i=1;i<=m;i++) for(i=1;i<=m;i++)
for(j=1;j<=n;j++) for(j=1;j<=n;j++)
f>>a[i][j]; f>>a[i][j];
for(i=1;i<=m;i++){ for(i=1;i<=m;i++)
if(i%2==1) for(j=1;j<=n;j++){p++; b[p]=a[i][j];}
for(j=1;j<=n;j++) g<<a[i][j]<<" "; for(i=1;i<=p;i++)
else for(j=i+1;j<=p;j++)
for(j=n;j>=1;j--) if(b[i]>b[j]){
aux=b[i];
g<<a[i][j]<<" ";}
b[i]=b[j];
f.close(); b[j]=aux;}
g.close(); p=1;
return 0; for(i=1;i<=m;i++)
} for(j=1;j<=n;j++){
a[i][j]=b[p];
p++;}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<endl;
}
f.close(); g.close();
return 0;
}

35
Stergerea liniei p dintr-o matrice Sumele pe diagonalele paralele cu diagonala
#include <iostream> principala
#include<fstream> #include <iostream>
using namespace std; #include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[10][10],m,n,i,j,p; int a[30][30],n,i,j,s[900];
int main(){ int main()
f>>m>>n>>p; {
for(i=1;i<=m;i++) f>>n;
for(j=1;j<=n;j++) for(i=1;i<=n;i++)
f>>a[i][j]; for(j=1;j<=n;j++)
for(i=p;i<m;i++) f>>a[i][j];
for(j=1;j<=n;j++) for(i=1;i<=n;i++)
a[i][j]=a[i+1][j]; for(j=1;j<=n;j++)
s[n-i+j]+=a[i][j];
m--;
for(i=1;i<=2*n-1;i++)
for(i=1;i<=m;i++){ g<<s[i]<<endl;
for(j=1;j<=n;j++) f.close();
g<<a[i][j]<<" "; g.close();
g<<endl;} return 0;
f.close(); g.close(); }
return 0;
}

Afisarea numarului de elemente vecine pare pentru Sumele pe diagonalele paralele cu diagonala
fiecare element din matrice(vecinii de sus, jos, stanga, secundara
dreapta)
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
fstream g("sir.out",ios::out);
int a[24][40],b[13][60],n,m,i,j,k;
int main()
int a[24][40],n,i,j,s[19];
{ int main()
f>>m>>n; {
for(i=1;i<=m;i++) f>>n;
for(j=1;j<=n;j++) for(i=1;i<=n;i++)
f>>a[i][j]; for(j=1;j<=n;j++)
for(j=0;j<=n+1;j++) a[0][j]=1; f>>a[i][j];
for(i=0;i<=m+1;i++) a[i][n+1]=1; for(i=1;i<=n;i++)
for(i=0;i<=m+1;i++) a[i][0]=1; for(j=1;j<=n;j++)
for(j=0;j<=n+1;j++) a[m+1][j]=1; s[i+j]+=a[i][j];
for(i=1;i<=m;i++)
for(i=2;i<=2*n;i++)
for(j=1;j<=n;j++){
k=0; g<<s[i]<<" ";
if(a[i-1][j]%2==0) k++; f.close(); g.close();
if(a[i][j+1]%2==0) k++; return 0;

36
if(a[i+1][j]%2==0) k++; }
if(a[i][j-1]%2==0) k++;
b[i][j]=k;
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
g<<b[i][j]<<" ";
g<<endl;
}
f.close(); g.close(); return 0;}

37
Functii
//doua feluri int sau void
//forma generala( tip nume parametri functiei return apel)
// v local si globale p. formali sau efectivi
// transmiterea parametrilor prin valoare sau referinta
/*
tip rezultat nume_functie (parametri functiei){
variabile locale(daca este cazul)
corpul functiei (instructiunile functiei)
return rezultat

}
*/

Pr1.
Sa se scrie care o functie(de tip int) pentru fiecare cerinta:
a)suma a doua numere
b)calculul ipotenuzei unui triunghi dreptunghic
c)suma cifrelor unui numar x
d)suma divizorilor unui numar x
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int x,y,s; //variabile globale

int suma(int a,int b){ //suma a doua numere a,b parametri formali
int s;
s=a+b;
return s;
}

float ipotenuza(float a,float b){ //ipotenuza unui triunghi dreptunghic


return sqrt(a*a+b*b);
}
int z;
long sumacif(long x){ //suma cif lui x
long cif,s; // x,cif,s variabile locale
s=0; // !!!!!!!!!
while(x){
cif=x%10;
s+=cif;
x=x/10;}
return s;
}
int t;
long sum_div(long a){ //suma divizorilor lui a
int d,s=0;
for(d=1;d<=a;d++)
if(a%d==0) s+=d;
return s;
38
}
int main()
{ int d;
f>>x>>y;
g<<"suma este:"<<1+suma(x,y)<<'\n';
g<<"ipotenuza este:"<<ipotenuza(x,y)<<'\n';
g<<"suma cifrelor lui x este "<<sumacif(x)<<'\n';
g<<"suma cifrelor lui y este "<<sumacif(y)<<'\n';
g<<"suma divizorilor lui x este "<<sum_div(x)<<'\n';
f.close();g.close();
return 0;
}
Pr2.
Sa se scrie care o functie(de tip void) pentru fiecare cerinta:
a)suma a doua numere
b)calculul ipotenuzei unui triunghi dreptunghic
c)suma cifrelor unui numar x
d)suma divizorilor unui numar x
e)inversarea continutului a doua variabile

//functii void
//forma generala( void nume parametri functiei apel)
// v local si globale p. formali sau efectivi
// transmiterea parametrilor prin valoare sau referinta

#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
long x,y,ss,s; //variabile globale
void suma(long x, long y,long &s){ //suma a doua numere
s=x+y;
}
void ipotenuza(float a,float b,float &rez){ //ipotenuza unui triunghi dreptunghic
rez=sqrt(a*a+b*b);
}
void sumacif(long x,long &s){ //suma cifrelor lui x
long cif; // x,cif,s variabile locale
s=0; // !!!!!!!!!
while(x){
cif=x%10;
s+=cif;
x=x/10;}
}
void sum_div(long a,long &s){ //suma divizorilor lui x
inrt d;
s=0;
for(d=1;d<=a;d++)
if(a%d==0) s+=d;
}
void inverseaza(long &a,long &b){ // & transmitere prin adresa
int aux; //inverseaza a cu b
39
aux=a;a=b;b=aux; //se poate si cu comanda swap(a,b);
}
float ip;
int main()
{
f>>x>>y;
suma(x,y,ss);
g<<"suma este:"<<ss<<'\n';
ipotenuza(x,y,ip);
g<<"ipotenuza este: "<<ip<<'\n';
sumacif(x,s);
g<<"suma cifrelor lui x este "<<s<<'\n';
sumacif(y,s);
g<<"suma cifrelor lui y este "<<s<<'\n';
sum_div(x,s);
g<<"suma divizorilor lui x este "<<s<<'\n';
inverseaza(x,y);
g<<"x si y dupa inversare"<<x<<" "<<y<<'\n';
f.close();g.close();
return 0;
}

pr3
Afisati numerele dintr-un sir ce au suma cifrelor egala cu 10
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,a[100];

long sumacif(long x){


long cif,s;
s=0;
while(x){
cif=x%10;
s+=cif;
x=x/10;}
return s;
}

int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++)
if(sumacif(a[i])==10) g<<a[i]<<" ";
f.close();g.close();
return 0;
}*/
pr4
Afisati numerele dintr-o matrice ce au prop. ca atat ele cat si patratul lor sunt palindroame
#include <fstream>
using namespace std;
40
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[10][10];

int palin(long x){


long cif,inv,y;
inv=0;
y=x;
while(x){
cif=x%10;
inv=inv*10+cif;
x=x/10;
}
if (y==inv) return 1;
else return 0;
}

int main()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(palin(a[i][j])&&palin(a[i][j]*a[i][j])) g<<a[i][j]<<" ";
f.close();g.close();
return 0;
}

pr5
//
Afisati suma numerele dintr-un sir
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[100];
//vectorii se transmit prin referinta(prin adresa) implicit
//regula: se transmit datele si se primesc rezultatele
// in rest toate variabile vor fi locale (pentru siguranta)
int suma(int x[100],int n){
int i,s=0;
for( i=1;i<=n;i++) s+=x[i];
return s;
}

int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
g<<suma(a,n)<<" ";
f.close();g.close();
return 0;
}

41
//pr 6
Ordonati elementele dintr-un sir cu o functie de citire vector, afisare vector, ordonare vector
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[100];
//vectorii se transmit prin adresa implicit !!!!
void citeste(int x[100],int &n){
int i;
f>>n;
for( i=1;i<=n;i++) f>>x[i];
}
void afiseaza(int x[100],int n){
int i;
for( i=1;i<=n;i++) g<<x[i]<<" ";
g<<'\n';//este echivalent cu g<<endl;
}
void ordonare(int x[100],int n){
int i,j;
for( i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(x[i]>x[j]) swap(x[i],x[j]);// functie ce inverseaza a[i] cu a[j] !!!
}
int main()
{ citeste(a,n);
afiseaza(a,n);
ordonare(a,n);
afiseaza(a,n);
f.close();g.close();
return 0;}

pr7
Afisati suma numerele dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[10][10];
//matricile si vectorii se transmit prin adresa
//regula: se transmit datele si se primesc rezultatele
// in rest totul variabile locale(pentru siguranta)
int suma1(int x[10][10],int n){
int i,j,s=0;
for( i=1;i<=n;i++)
for(j=1;j<=n;j++) s+=a[i][j];
return s;
}

int main()
{
f>>n;

42
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
g<<suma1(a,n)<<" ";
f.close();g.close();
return 0;
}
//pr6. Minimul dintr-o matrice ( citirea si afisarea pentru matrici+functie de minim)
//pr7. Inversati doua linii p si q dintr-o matrice
//pr8. Determinati punctele de "sa" dintr-o matrice(a[i][j] este "sa" daca este
//minimul de pe linie si maximul de pe coloana sau invers

Pr8.
Calc. suma numerelor prime dintr-un sir

#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
long a[100],i,n,s;

long prim(long x){


int d;
if(x==0||x==1) return 0;
for(d=2;d<=sqrt((float)x);d++)
if(x%d==0) return 0;
return 1;
}

int main()
{
f>>n;
for(i=1;i<=n;i++)f>>a[i];
for(i=1;i<=n;i++)
if(prim(a[i])) s+=a[i];
g<<s;
f.close();g.close();
return 0;
}

Pr9
Calc. suma a doua numere daca ambele sunt prime si produsul in caz contrar
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
long x,y;
long prim(long a){
int d,k;
for(d=1;d<=a;d++)
if(a%d==0) k++;
if(k==2)return 1;

43
else return 0;
}
long prim_eficient(long a){
int d;
if(a==0||a==1) return 0;
for(d=2;d<=sqrt((float)a);d++)
if(a%d==0) return 0;
return 1;

}
int main()
{ int d;
f>>x>>y;
if(prim_eficient(x)&&prim_eficient(y)) g<<x+y;
else g<<x*y;
f.close();g.close();
return 0;
}
//tema fie 3 nr x,y,z.cal. x nr.de cifre y nr. divizori z cate cif pare are

Pr10.
Construiti o matrice cu primele elemente in ordine crescatoare ce au
exact trei divizori.
pt. n=4 se va afisa matricea de mai jos:
4 9 25 49
121 169 289 361
529 841 961 1369
1681 1849 2209 2809
obs: numerele cautate sunt patrate de numere prime!!

#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int i, k, n, j, a[1000][1000], b[10000], nr;
long prim(long a ){
int d, kk;
d=0; kk=0;
for(d=1; d<=a; d++)
if(a%d==0) kk++;
if(kk==2) return 1;
else return 0;}
int main()
{f>>n;
nr=2; k=0;
while(k<=n*n){
if(prim(nr)) {k++;
b[k]=nr;
}
nr++;
}

k=1;
for(i=1; i<=n; i++)
44
for(j=1; j<=n; j++){
a[i][j]=b[k]*b[k];
k++;
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++)
g<<a[i][j]<<' ';
g<<'\n';}

return 0;
}
Pr11.
//suma elementelor dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n,i,j,a[100][100];
void citire(int x[100][100], int &n){
int i;
f>>n;
for(i=1 ; i<=n; i++)
for(j=1; j<=n; j++) f>>x[i][j];
}
void afisare (int x[100][100], int n){
int i;
for(i=1 ; i<=n; i++){
for(j=1; j<=n; j++)
g<<x[i][j]<<' ';
g<<'\n';}}
int suma (int x[100][100], int n){
int i, j, s=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
s+=x[i][j];
return s;
}

int main()
{
citire (a, n);
g<<suma (a,n)<<endl;
afisare(a,n);
return 0;
}
Pr12
//minimul dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n,i,j,a[100][100],mini;
void citire(int x[100][100], int &n){

45
int i;
f>>n;
for(i=1 ; i<=n; i++)
for(j=1; j<=n; j++) f>>x[i][j];
}
void afisare (int x[100][100], int n){
int i;
for(i=1 ; i<=n; i++){
for(j=1; j<=n; j++)
g<<x[i][j]<<' ';
g<<'\n';}}
int minim (int x[100][100], int n){
int i, j; mini=32000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(x[i][j]<mini) mini=x[i][j];
return mini;
}

int main()
{

citire (a, n);


g<<minim (a,n)<<endl;
afisare(a,n);
return 0;
}
Pr13
// inverseaza doua linii specificate dintr-o matrice
Sir.in
3
123
456
789
1 3 (se va inversa linia 1 cu linia 3)
Sir.out
789
456
123
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n,i,j,a[100][100], p, q;
void citire(int x[100][100], int &n){
int i;
f>>n;
for(i=1 ; i<=n; i++)
for(j=1; j<=n; j++) f>>x[i][j];
}
void afisare (int x[100][100], int n){
int i;
for(i=1 ; i<=n; i++){
46
for(j=1; j<=n; j++)
g<<x[i][j]<<' ';
g<<'\n';}}
void inversare (int x[100][100], int n){
int i, j;
f>>p>>q;
for(j=1; j<=n; j++)
swap(x[p][j],x[q][j]);
}

int main()
{
citire (a, n);
inversare (a,n);
afisare(a,n);
return 0;
}
Pr14.
//Se considera o matrice patratica
// Sa se scrie o functie ce calculeaza
//cate elemente din matrice au toate cifrele pare
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,j,i,a[100][100];
void citire (int x[100][100],int&n){
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>x[i][j];
}
int calcul (int x){
int cif;
while(x){
cif=x%10;
if(cif%2==1) return 0;
x=x/10;
}
return 1;
}
int main(){
int k=0;
citire (a,n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(calcul(a[i][j])) k++;
if(k==n*n) g<<"DA";
else g<<"NU";
f.close(); g.close();
return 0;}

47
pr15
//pentru un numar x construiti numarul format din cifrele sale pare
//ex: pt x=12798 => 82
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int x;
int stergere(int x){
int cif,y=0;
while(x){
cif=x%10;
if(cif%2==0) y=y*10+cif;
x=x/10;
}
return y;
}
int main(){
f>>x;
g<<stergere(x);
f.close();
g.close();
return 0;
}
Pr16.
//verificati daca un sir este ordonat crescator
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int a[100],n,i,k;
int ordonare_cresc(int x[100], int n){
int i;
for(i=1;i<=n-1;i++)
if(a[i]>a[i+1]) return 0;
return 1;
}
int main(){
f>>n; k=0;
for(i=1;i<=n;i++)
f>>a[i];
if (ordonare_cresc(a,n)==1) g<<"DA";
else g<<"NU";
f.close();
g.close();
return 0;
}

48
Functii (Clasa X)
/*afisati numerele dintr-un sir ce au numarul cifrelor de 3 egal cu un y specificat
sir.in
4 (n numarul de elemnte)
2343 123 27 331 (sirul cu n elemente)
2 ( y cate cifre de 3 trebuie sa contina fiecare numar)

sir.out
2343 331 - aceste numere au 2 cifre de 3 */

#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n, k, a[100], i, y,x;
void citeste(int a[100], int &n) {
int i;
f>>n;
for(i=1; i<=n; i++)
f>>a[i];
}
int verifica( int x, int y) {
int k;
k=0;
while(x) {
if(x%10==3) k++;
x/=10;
}
if(k==y) return 1;
else return 0;

}
int main() {
citeste(a,n);
f>>y;
for(i=1; i<=n; i++)
if(verifica(a[i], y)==1) g<<a[i]<<' ';
f.close();
g.close();
return 0;
}

Fişierul text numere.in conţine pe prima linie un număr natural n (0<n<1000), iar pe a


doua linie n numere naturale cu cel mult 9 cifre fiecare, despărţite prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte toate numerele din fişier şi afişează pe ecran,
separate prin câte un spaţiu, numerele de pe a doua linie a fişierului, care încep şi se
termină cu aceeaşi cifră.
Exemplu: dacă fişierul numere.in are conţinutul de mai jos
9
55 107 3 101 92 7 208 2782 80
se vor afişa
55 3 101 7 2782

49
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n, i, a[100], ciff, cifi,x;
void citire_sir(int a[100], int&n){
int i;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
}
int verificare_cifre(int x){
int ciff, cifi;
ciff=x%10;
while(x){cifi=x%10;
x/=10;}
if(ciff!=cifi) return 0;
return 1;
}

int main()
{
citire_sir(a,n);
for(i=1;i<=n;i++)
if(verificare_cifre(a[i])==1)g<<a[i]<<" ";
f.close();
g.close();
return 0;
}
Se considera un sir de n elemente si o cifra specificata c.
Afisati numerele din sir ce contin cifra c.
Ex:pentru fisierul de intrare de mai jos
4
231 45 34 4221
2 (cifra cautata)
se afiseza 231 4221
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,a[100],c,x;

void citeste_sir(int a[100],int &n){


int i;
f>>n;
for(i=1;i<=n;i++) f>>a[i];
}

int gaseste_cifra (int x, int c){


int cif;
while(x){

50
cif=x%10;
if(cif==c) return 1;
x=x/10;
}
return 0;
}

int main()
{
int c;
citeste_sir(a,n);
f>>c;
for(i=1;i<=n;i++)
if(gaseste_cifra(a[i],c)==1) g<<a[i]<<" ";
return 0;
}
Scrieţi definiţia completă a unui subprogram sum care primeşte prin parametrul x un
număr natural de cel mult 4 cifre şi returnează suma divizorilor numărului x, diferiţi de 1 şi
de el însuşi.
Exemplu: dacă x=10 se va returna valoarea 7 (7=2+5). (4p.)
b) Scrieţi programul C/C++ care citeşte de la tastatură un număr natural n (0<n<100), apoi
n numere naturale (cu cel mult 4 cifre fiecare). Programul determină, folosind apeluri utile
ale subprogramului sum, pentru fiecare număr natural citit, suma divizorilor săi proprii şi
afişează pe ecran sumele determinate, în ordinea crescătoare a valorilor lor, separate prin
câte un spaţiu. (6p.)
Exemplu: dacă n=5 şi numerele citite sunt 10 2 33 6 11
valorile afişate pe ecran vor fi: 0 0 5 7 14
deoarece suma divizorilor lui 10 este 7, suma divizorilor lui 2 este 0, suma divizorilor
lui 33 este 14, suma divizorilor lui 6 este 5, suma divizorilor lui 11 este 0.
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int i,a[1000],b[100],r,n,s,x,j,aux;

int sum(int x){


int i,s=0;
for(i=2;i<x;i++)
if(x%i==0)
s+=i;
return s;}

int main(){
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n;i++) b[i]=sum(a[i]);
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++)
if(b[i]>b[j]) {aux=b[j]; b[j]=b[i]; b[i]=aux;}}
for(i=1;i<=n;i++) g<<b[i]<<" ";
f.close();g.close();
return 0;
51
}

Tema
Subprogramul cifra primeşte prin intermediul parametrului a un număr natural cu cel
mult
4 cifre şi returnează ultima cifră pară a sa. Dacă numărul nu conţine cifre pare,
subprogramul returnează valoarea ­1. De exemplu, dacă a=8345, subprogramul va
returna 4.
a) Să se scrie definiţia completă a subprogramului cifra.
b) Pe prima linie a fişierului bac.in se află un număr natural nenul n (n≤15000), iar pe
a doua linie a fişierului se află un şir de n numere naturale, despărţite prin câte un spaţiu,
fiecare număr fiind format din cel mult 4 cifre.
Scrieţi un program C/C++ care citeşte numerele din fişier şi afişează pe ecran, folosind
apeluri utile ale subprogramului cifra, cel mai mare număr care se poate forma cu
ultimele cifre pare ale fiecărui element, dacă acestea există. Alegeţi o metodă de rezolvare
eficientă ca timp de executare. Dacă toate numerele de pe a doua linie a fişierului au
numai cifre impare, programul va afişa mesajul NU EXISTA.
Exemplu: dacă fişierul bac.in are conţinutul de mai jos:
7
369 113 2 0 33 1354 42
pe ecran se va afişa: 64220

Tema (suplimentara adica nu­i musai de facut)
Pr1.
Scrieţi un program C/C++ care citeşte numerele naturale nenule n şi k (k≤n≤100) şi un
tablou unidimensional cu n elemente numere întregi, fiecare având cel mult 4 cifre.
Programul modifică tabloul, permutând circular, cu k poziţii spre stânga, elementele
acestuia şi afişează pe ecran, separate prin câte un spaţiu, elementele tabloului obţinut.
Exemplu: dacă n=4, k=3 şi tabloul v=(1,2,3,4), atunci se vor afişa în ordine
elementele: 4 1 2 3.
Pr2.
a) Scrieţi doar antetul subprogramului nrdiv, care primeşte prin intermediul parametrului x
un număr natural nenul cu cel mult 4 cifre, şi returnează numărul de divizori primi ai lui x.
b) Pe prima linie a fişierului bac.in se află un număr natural nenul n (n≤1000), iar pe a
doua linie a fişierului se află un şir format din n numere naturale nenule, despărţite prin
câte un spaţiu, fiecare număr fiind format din cel mult 4 cifre. Scrieţi un program C/C++
care citeşte numerele din fişier şi care afişează pe ecran, folosind apeluri utile ale
subprogramului nrdiv, prima şi ultima valoare din şirul celor n numere citite, care au un
număr par de divizori primi. Numerele afişate vor fi separate printr-un spaţiu.
Exemplu: dacă fişierul bac.in are conţinutul de mai jos
7
30 105 20 140 7 10 5
pe ecran se va afişa:
20 10 

52
Tipul string
#include <iostream>
#include<cstring>
using namespace std;
string s,t,z,s1;
char a[100];
int k,i;
void testare_functii(){
//www.cplusplus.com/reference/ selectare "strings library" si
//classes: string - si aici este lista cu toate functiile si exemple
cout << "dati cuvant";
cin>>s; //citeste doar un cuvant!!!!!!!!!!!
cout<<"cuvantul citit este:"<<s<<endl;
cin.get();//trece peste sfarsitul de linie
cout << "dati un sir (mai multe cuvinte): ";
getline(cin,s); //citeste mai multe cuvinte
t=s; //atribuire sir
z=t+" + "+s; //concatenarea (lipirea)
cout<<"sirul citit este:"<<s<<endl;
cout<<"sirul concatenat este: "<<z<<endl<<"prima litera a sirului concatenat este:"<<z[0]<<endl;
//cate literele de "a" sunt in sir
//s.length() sau s.size() - da nr. de caractere din sirul s
k=0;
for(i=0;i<s.length();i++)
if(s[i]=='a')k++;
//cout<<"numar aparitii litera a din sirul s este:"<<k<<endl;

//sir.erase(p,li) sterge din sirul "sir" de la pozitia p, li caractere


t="mama are mere";
t.erase(1,4);
cout<<"(erase) sirul dupa stegere este:"<<t<<endl;

// sir.replace(p,m,s1) - inlocuieste in sirul "sir" de la pozitia p, m caractere cu sirul s1


s="calculator";s1="tara";
s.replace(2,5,s1);
cout<<"(replace)sirul modificat este:"<<s<<endl;

// sir.insert(p,s1) - insereaza in sirul "sir" de la pozitia p sirul s1


s="catel";s1="strave";
s.insert(2,s1);
cout<<"(insert)sirul modificat este:"<<s<<endl;

// sir.find(s1,p) - cauta in sirul "sir" sirul s1 de la pozitia p


//returneaza pozitia in care s-a gasit sirul s1!!! sau string::npos=4.294.967.295 in caz de negasit
s="calculatoculr";s1="cul";
if(s.find(s1,4)!=string::npos) cout<<"(find)sirul a fost gasit la pozitia "<<s.find(s1,4)<<endl;
else cout<<"(find)sirul nu a fost gasit"<<endl;

// sir.substr(p,lung) - returneaza din sirul "sir" un subsir de la pozitia p si lungime "lung"


s="crocodil";
cout<<"(substr) subsirul din s este:"<<s.substr(5,3)<<endl;

//sir.append(t,p,l) - adauga la sirul "sir" o parte din sirul t (de la pozitia p, l caractere)
s="catel";s1="jucaus";
53
s.append(s1,4,2);
cout<<"(append)"<<s<<endl;
}

//afisati cuvintele dintr-o propozitie si numarul lor


//propozitia are cuvintele separate printr-un spatiu
//varianta I
void pr1(){
int k,p;
cout<<"dati propozitie:";
getline(cin,s);
s=s+' ';k=0;
for (i=0;i<s.length();i++)
if (s[i]!=' ') cout<<s[i];
else {k++;cout <<endl;}
//varianta II
do {
k++; // s="ana are mere " =>"are mere " =>"mere "=>""
p=s.find(" ",0);
cout<<s.substr(0,p)<<endl;
s.erase(0,p+1);
}while(s.find(" ",0)!=string::npos);

cout<<"numar cuvinte:"<<k;
}
//afisati cuvintele dintr-o propozitie crescator
//propozitia are cuvintele separate printr-un spatiu

void pr2(){
int j,n,i,p;
string a[20],aux;
cout<<"dati propozitie:";
getline(cin,s);
s=s+' ';j=1;
for (i=0;i<s.length();i++)
if (s[i]!=' ') a[j]=a[j]+s[i];
else j++;
//varianta II
/*do {
p=s.find(" ",0);
a[++i]=s.substr(0,p);
s.erase(0,p+1);
}while(s.find(" ",0)!=string::npos);*/
n=j-1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if (a[i]>a[j]){aux=a[i];a[i]=a[j];a[j]=aux;}
for(i=1;i<=n;i++) cout<<a[i]<<" ";
}
void pr3(){
//afisati cuvintele dintr-o propozitie ce au 3 vocale
//afisati cuvintele ce sunt anagrame
//afisati cele mai lungi cuvinte
}

54
//stergeti primul cuvant si aparitiile acestuia din propozitie
void pr4(){

string t="",s;
int p,i;
getline(cin,s);
i=0;
while(s[i]!='*')t+=s[i++];
s.erase(0,i);
while(s.find(t,p)!=string::npos){
p=s.find(t,0);
if(s[p-1]=='*'&&s[p+i]=='*') s.erase(p,t.size());
}
cout<<s;
}
//verifica daca doua cuvinte sunt anagrame
void pr5(){
string s1,s2;
int d1,d2,anag,i,j;
char aux;
cout<<"dati sirul 1";
cin>>s1;
cout<<"dati sirul 2";
cin>>s2;
d1=s1.size();
d2=s2.size();
if(d1!=d2)anag=0;
else {
for(i=0;i<=d1-1;i++)
for(j=i+1;j<=d1-1;j++)
if(s1[i]>s1[j]){aux=s1[i];s1[i]=s1[j];s1[j]=aux;}
for(i=0;i<=d2-1;i++)
for(j=i+1;j<=d2-1;j++)
if(s2[i]>s2[j]){aux=s2[i];s2[i]=s2[j];s2[j]=aux;}
if (s1==s2)anag=1;
else anag=0;
}
if(anag) cout<<"este anagrama";
else cout<<"nu este anagrama" ;
}

//anagrame var 2
void pr6(){
string s1,s2,s,t;
int d1,d2,anag,i,j;
char aux;
cout<<"dati sirul 1";
cin>>s1;
cout<<"dati sirul 2";
cin>>s2;
d1=s1.size();
d2=s2.size();
if(d1!=d2)anag=0;
else {

55
anag=1;
s=s1;t=s2;
for(i=0;i<d1;i++){
if(t.find(s[i])!=string::npos)
t.erase(t.find(s[i]),1);
}
if(t!="")anag=0;
s=s1;t=s2;
for(i=0;i<d2;i++){
if(s.find(t[i])!=string::npos)
s.erase(s.find(t[i]),1);
}
if(s!="")anag=0;
}
if(anag) cout<<"este anagrama";
else cout<<"nu este anagrama" ;

}
int f[128],n;
void pr7(){
string s,t,vocale="aeiou";
getline(cin,s);
n=s.size();
for(i=0;i<n;i++) f[s[i]]++;
//afisati literele distincte
for(char c='a';c<='z';c++) if(f[c]>0)cout<<c;
//afisati caracterele distincte(toate ..si /><!
for(i=0;i<=127;i++) if(f[i]>0)cout<<(char)i;
}
int main()
{
testare_functii();
//pr1();
return 0;
}

Noutati
//inlocuiti aparitiile unei litere cu alta litera si //prima si ultima litera a cuvintelor din
invers intr-un sir propozitie sa fie mari
// a si o „hopa topa” => „hapo tapo” //mama are mere => MamA ArE MarE
#include <iostream> #include <iostream>
#include<cstring> #include <cstring>
using namespace std; using namespace std;
int n,i; int main()
string s; {
char c1,c2; string s;
int main() int n,i;
{ cout<<"Dati o propozitie:";
cout<<"Dati doua caractere pentru inlocuire:"; getline(cin,s);
cin>>c1>>c2; s+=" "; n=s.size();
cin.get(); s[0]-=32;
cout<<"Dati o propozitie:"; for(i=0;i<n;i++){
getline(cin,s); if(s[i]!=' ' and(s[i+1]==' 'or s[i-1]==' '))
56
n=s.size(); if(s[i]>='a' and s[i]<='z') s[i]-=32;}
cout<<s<<endl; cout<<s;
for(i=0;i<n;i++){ return 0;
if(s[i]==c1) s[i]=c2; }
else
if(s[i]==c2) s[i]=c1;
}
cout<<s;
return 0;
}

/*Se citesc doua siruri de caractere.Sa se //afisati clonele unui cavant(se strege una din
afiseze pe ecran cel mai vocale)
lung sufix comun al celor doua siruri de //ex: informatica => informtic nformatca
caractere. infrmatica
macaroana =>oana #include <iostream>
faraoana #include <cstring>
*/ using namespace std;
#include <iostream> string cuv,t;
#include<cstring> int n,i;
using namespace std; int main()
string s1, s2; {
int l1,l2; cout<<"Dati cuvantul:";
int main() getline(cin, cuv);
{ n=cuv.size();
cout<<"Dati primul sir:"; t="";
getline(cin,s1); for(i=0;i<n;i++)
cout<<"Dati cel de-al doilea sir:"; if(cuv[i]!='e') t+=cuv[i];
getline(cin,s2); cout<<t<<endl;
l1=s1.size()-1; t="";
l2=s2.size()-1; for(i=0;i<n;i++)
while(s1[l1]==s2[l2]) {l1--;l2--;} if(cuv[i]!='a') t+=cuv[i];
l1++; cout<<t<<endl;
cout<<"Sufixul comun t="";
este:"<<s1.substr(l1); for(i=0;i<n;i++)
return 0; if(cuv[i]!='i') t+=cuv[i];
} cout<<t<<endl;
t="";
for(i=0;i<n;i++)
if(cuv[i]!='o') t+=cuv[i];
cout<<t<<endl;
t="";
for(i=0;i<n;i++)
if(cuv[i]!='u') t+=cuv[i];
cout<<t<<endl;
return 0;
}

57
Tipul struct
Pr1. Se citesc datele a n elevi nume, prenume, varsta si media.Afisati descrescator dupa medie elevii
cititi de la tastatura.

#include <iostream>
using namespace std;
struct elev{ string nume, prenume;
int varsta;
float med;}a[100];
int i,j,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++){
cout<<"Dati elevul + datele acestuia:"<<endl;
cin>>a[i].nume>>a[i].prenume>>a[i].varsta>>a[i].med;
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i].med<a[j].med) swap(a[i],a[j]);
for(i=1;i<=n;i++)
cout<<a[i].nume<<" "<<a[i].prenume<<" "<<a[i].varsta<<" "<<a[i].med<<endl;
return 0;
}

Pr2.
/*Se considera n persoane.Afiasti persoanele crescator dupa data nasterii.*/
#include <iostream>
using namespace std;
struct pers{ string nume, prenume;
struct data{ int zi, luna, an;
}datan;
int clasa;
}p[100];
int i,j,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].nume>>p[i].prenume>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an>>p[i].clasa;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
if(p[i].datan.an>p[j].datan.an) swap(p[i],p[j]);
else
if(p[i].datan.an==p[j].datan.an and p[i].datan.luna>p[j].datan.luna)
swap(p[i],p[j]);
if(p[i].datan.an==p[j].datan.an and
p[i].datan.luna==p[j].datan.luna and p[i].datan.zi>p[j].datan.zi)
swap(p[i],p[j]);
}
for(i=1;i<=n;i++)
58
cout<<p[i].nume<<" "<<p[i].prenume<<" "<<p[i].datan.zi<<" "<<p[i].datan.luna<<" "
<<p[i].datan.an<<" "<<p[i].clasa<<endl;
return 0;
}

Pr3.
/*Fie n persoane.Afisati persoanele nascute in ianuarie.*/
#include <iostream>
using namespace std;
struct pers{ string nume, prenume;
struct data{ int zi, luna, an;
}datan;
int clasa;
}p[100];
int i,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].nume>>p[i].prenume>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an>>p[i].clasa;
for(i=1;i<=n;i++)
if(p[i].datan.an==2000)
cout<<p[i].nume<<" "<<p[i].prenume<<" "<<p[i].datan.zi<<" "<<p[i].datan.luna<<" "
<<p[i].datan.an<<" "<<p[i].clasa<<endl;
return 0;
}

Pr4.

//Fie un magazie
//a)ordonati materialele dupa cantitate
//b)afisati un material cu cantitatea maxima
//c)afisati materialele achizitionate cu un an in urma(2010)
#include <iostream>
using namespace std;
struct materiale{ string den;
int cant;
float pret;
struct data{int zi,luna,an;}datan;
}p[100];
int i,j,n;
int main()
{ cout<<"Dati n:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].den>>p[i].cant>>p[i].pret>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an;
//a)
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++)
if(p[i].cant>p[j].cant) swap(p[i],p[j]);
}
cout<<"lista materiale ordonate"<<endl;
for(i=1;i<=n;i++) cout<<p[i].den<<endl;
//b)
59
cout<<"maximul:"<<p[n].den<<endl;
//c)
for(i=1;i<=n;i++)
if(p[i].datan.an==2010) cout<<p[i].den;

return 0;
}
Pr5.

//Fie o farmacie( medicament - nume,data expirarii, pret si cantitate


//a) afisati medicamentele ordonate descrescator dupa nume
//b)medicamentele de stoc 0
//c)afisati datele despre un medicament citit de la tastatura
#include <iostream>
using namespace std;
struct farmacie{
string nume;
struct dataexpirarii {
int zi,luna,an;
}data;
int pret,cantitate;
}a[100];
int i,j,n;
string c;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i].nume>>a[i].pret>>a[i].cantitate>>a[i].data.zi>>a[i].data.luna>>a[i].data.an;
//a)
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i].nume<a[j].nume) swap(a[i],a[j]);
for(i=1;i<=n;i++)
cout<<a[i].nume<<" "<<a[i].pret<<" "<<a[i].cantitate<<" "<<a[i].data.zi<<" "
<<a[i].data.luna<<" "<<a[i].data.an<<" "<<endl;
//b
for(i=1;i<=n;i++)
if(a[i].cantitate==0) cout<<" "<<a[i].nume<<" "<<a[i].pret<<" "<<a[i].cantitate<<" "
<<a[i].data.zi<<" "<<a[i].data.luna<<" "<<a[i].data.an;
//c
cin>>c;
for(i=1;i<=n;i++)
if(c==a[i].nume) cout<<a[i].nume<<a[i].pret<<a[i].cantitate<<a[i].data.zi
<<a[i].data.luna<<a[i].data.an;
return 0;
}

60
Liste alocate static
Lista
Lista este structura de date secventiala in care se pot face diferite operatii:
1. creare lista
2.adaugare element la sfarsitul listei
3. adaugare element pe o pozitie specificata
4. stergerea unui element pe o pozitie specificata
5.afisarea listei

#include <iostream>
using namespace std;
void creare (int a[100], int &n)
{
int i;
cout<<"Dati n:";
cin>>n;
for (i=1; i<=n; i++) {cout<<"Dati element: "; cin>>a[i]; }
}
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: ";cin>>y;
n++;a[n]=y;
}
void adauga (int a[100], int &n)
{
int x,p,i;
cout<<"Dati element de adaugat si pozitia lui: ";
cin>>x>>p;
for (i=n; i>=p; i--)
a[i+1]=a[i];
a[p]=x;
n++;
}
void stergere (int a[100], int &n)
{
int i,p;
cout<<"Dati pozitia care doriti sa fie stearsa: ";
cin>>p;
for (i=p; i<=n-1; i++)
a[i]=a[i+1];
n--;
}
void listare (int a[100], int n)
{
int i;
cout<<"Lista este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{
int a[100],n,x;
do
61
{
cout<<endl<<"MENIU"<<endl;
cout<<"Tastati 1 pentru creare lista. "<<endl;
cout<<"Tastati 2 pentru adaugare element la sfarsitul listei. "<<endl;
cout<<"Tastati 3 pentru adaugare element pe o pozitie specificata. "<<endl;
cout<<"Tastati 4 pentru stergerea unui element pe o pozitie specificata. "<<endl;
cout<<"Tastati 5 pentru afisarea listei. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
cin>>x;
if (x=='1') creare (a,n);
if (x=='2') adaugare_sf (a,n);
if (x=='3') adauga (a,n);
if (x=='4') stergere (a,n);
if (x=='5') listare (a,n);
//cin>>z;
}
while (x!='9');

return 0;
}

Coada
Coada este o lista speciala pentru care avem doua operatii:
1.adaugarea se face la sfarsit
2.extragerea elementelor se face de la inceput
#include <iostream>
#include<windows.h> //contine system ("cls"); ce sterge ecranul
#include <conio.h> //biblioteca de functii - contine getch() functie ce citeste un caracter
//de la tastatura fara afisarea lui pe ecran
using namespace std;
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: ";
cin>>y;
n++;
a[n]=y;
}
void stergere (int a[100], int &n)
{
int i;
for (i=1; i<=n-1; i++)
a[i]=a[i+1];
n--;
}
void listare (int a[100], int n)
{
int i;
cout<<"Coada este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{

62
int a[100],n,x;
n=0;
do
{system ("cls");
cout<<endl<<"MENIU pt. operatii cu coada"<<endl;
cout<<"Tastati 1 pentru adaugare element la coada. "<<endl;
cout<<"Tastati 2 pentru stergerea unui element din coada. "<<endl;
cout<<"Tastati 3 pentru afisarea cozii. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
x=getch();
if (x=='1') adaugare_sf (a,n);
if (x=='2') stergere (a,n);
if (x=='3') listare (a,n);
getch();
}
while (x!='9');

return 0;
}
Stiva
Stiva este o lista speciala pentru care avem doua operatii ce se fac ambele in capul stivei
1.adaugarea se face in capul stivei
2.extragerea elementelor se face din capul stivei

#include <iostream>
#include<windows.h> // pentru system("cls");
#include <conio.h>
using namespace std;
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: "; cin>>y;
n++; a[n]=y;
}
void stergere (int a[100], int &n)
{
n--;cout<<"s-a sters elementul "<<a[n+1]<<"din stiva";
}
void listare (int a[100], int n)
{
int i;
cout<<"Stiva este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{
int a[100],n,x;
n=0;
do
{system("cls");
cout<<endl<<"MENIU pt. stiva"<<endl;
cout<<"Tastati 1 pentru adaugare element la stiva "<<endl;
cout<<"Tastati 2 pentru stergerea unui element din stiva. "<<endl;

63
cout<<"Tastati 3 pentru afisarea stivei. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
x=getch();
if (x=='1') adaugare_sf (a,n);
if (x=='2') stergere (a,n);
if (x=='3') listare (a,n);
getch();
}
while (x!='9');
return 0;
}

64
Pointeri
Pr1. Pr2.
/*Sa se creeze o lista de n elemente si sa se //creare lista de elemente si afisare pe ecran
afiseze pe ecran lista*/ //adaugarea elementelor se face la inceput
#include <iostream> #include <iostream>
using namespace std; using namespace std;
struct nod{ struct nod
int info; {
nod *urm;}; int info;
nod *p, *q, *prim; nod * urm;
int i,n,x; };
int main(){ nod *p,*q,*prim;
prim=0; int i,n,x;
cin>>n; int main(){
for(i=1;i<=n;i++){ prim=0;
cin>>x; cin>>n;
p=new nod; for(i=1; i<=n; i++){
p->info=x; cin>>x;
p->urm=prim; p=new nod;
prim=p; p->info=x;
} p->urm=prim;
p=prim; prim=p;
while(p){ }
cout<<p->info<<" "; cout<<"lista este:";
p=p->urm; p=prim;
} while(p){
return 0; cout<<p->info<<" ";
} p=p->urm;
}
//suma elementelor pare din lista
int s=0;
p=prim;
while(p) {
if(p->info%2==0) s+=p->info;
p=p->urm;
}
cout<<"suma este:"<<s;
return 0;
}

Pr3. Pr4.
/*Introducerea in lista a elem pare si afisarea /*Sa se afiseze suma elementelor pare dintr-o
listei*/ lista*/
#include <iostream> #include <iostream>
using namespace std; using namespace std;
struct nod { struct nod{
int info; int info;
nod *urm; nod *urm;};
}; nod *p, *q, *prim;
nod *p, *prim, *c; int i,n,x,s;
int i, n, x; int main(){
int main() { prim=0; s=0;
cin >> n;prim = 0; cin>>n;
for (i = 1;i <= n;i++) { for(i=1;i<=n;i++){
65
c = new nod; cin>>x;
cout << "Dati elemente:"; p=new nod;
cin >> x; p->info=x;
c->info = x; p->urm=prim;
c->urm = 0; prim=p;}
if (prim) { p=prim;
p = prim; while(p){
while (p->urm) p = p->urm; if(p->info%2==0)
p->urm = c; s+=p->info;
} p=p->urm;}
else prim=c; cout<<"Suma elem pare este:"<<s;
} return 0;
p = prim; }
while (p){ cout<<p->info<<" "; p = p->urm;}
return 0;
}

Pr5.
operatii cu coada: adaugare, extragere, listare folosind un meniu

#include <iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
struct nod
{
int info;
nod* adr;
};
nod* v1,*v2;

void adauga(nod * &v1,int x)


{
nod *c,*p;
c=new nod;
c->info=x;
c->adr=0;
if(v1)
{
p=v1;
while(p->adr) p=p->adr;
p->adr=c;
}
else v1=c;
}

void extrage(nod * &v1,int &x)


{
nod *c;
c=v1;
x=c->info;
v1=c->adr;

66
delete c;
}

void listare(nod *v)


{
nod *c;
cout<<"elmentele listei sunt:";
c=v;
while(c)
{
cout<<c->info<<" ";
c=c->adr;
}
cout<<endl;
}

int main()
{
int x,y;
nod *prim;
prim=0;
do
{
system("cls");
cout<<"operatii cu coada"<<endl;
cout<<"tastati 1 pentru adaugare"<<endl;
cout<<"tastati 2 pentru extragere"<<endl;
cout<<"tastati 3 pentru listare"<<endl;
cout<<"tastati 4 pentru iesire din program"<<endl;
cin>>x;
if(x==1){cout<<"dati element";cin>>y;adauga(prim,y);}
if(x==2){ if (!prim)cout<<"stiva vida";
else
{
extrage(prim,y);
cout<<"elementul extras este:"<<y;
}
}
if(x==3) listare(prim);
getch();
} while(x!=4);
return 0;
}

Pr6.
//Adaugare elemente in coada (coada cu prim(prim) si ultim(u))
#include <iostream>
using namespace std;
struct nod {
int info;
nod *urm;
};
nod *p, *prim, *c,*u;

67
int i, n, x;
int main() {
prim=0;
cin >> n;
for (i = 1; i <= n; i++) {
c = new nod;
cout << "Dati elemente:";
cin >> c->info ;
c->urm = 0;
if (prim) {
u->urm=c;
u=c;
}
else {
prim=c;
u=c;
}
}
while (prim) {
cout<<prim->info<<" ";
prim = prim->urm;
}
return 0;
}
Pr7.
/*Se considera o coada cu santinele.Sa se extraga un element.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_coada(nod*&st1, nod*&st2, int x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;}
int extragere_coada(nod*&st1, nod*&st2, int&x){
if(st1->urm!=st2){
c=st1->urm;
st1->urm=c->urm;
x=c->info;
delete c;
return 1;
}
return 0;
}
void afisare_coada(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;

68
}
cout<<endl;
}

int main(){
int i;
st1=new nod;
st2=new nod;
st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_coada(st1, st2, x);
}
afisare_coada(st1, st2);
if(extragere_coada(st1, st2, x))
cout<<"Elementul sters este:"<<x<<endl;
else cout<<"Nu se poate sterge element pt. ca coada este vida";
afisare_coada(st1, st2);
return 0;
}

Pr8.
/*Se considera o stiva cu santinele.Sa se extraga un element.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_stiva(nod*&st1, nod*&st2, int x){
nod*p=new nod;
p->info=x;
p->urm=st1->urm;
st1->urm=p;
}
void extragere_stiva(nod*&st1, nod*&st2, int x){
if(st1->urm==st2) cout<<"Nu se poate extrage element";
else{
c=st1->urm;
st1->urm=c->urm;
delete c;
}
}
void afisare_stiva(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;
}
}

69
int main(){
int i;
st1=new nod; st2=new nod; st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_stiva(st1, st2, x);
}
extragere_stiva(st1, st2, x);
afisare_stiva(st1, st2);
return 0;
}

Pr9.
/*Se considera o lista cu santinele.Sa se creeze o alta lista din ea care sa
contina elementele impare*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *st3, *st4, *c;
int i, n, x;
void adaugare(nod*&st1, nod*&st2, int&x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;
}
void afisare(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;}
}
int main(){
int i;
st1=new nod; st2=new nod; st1->urm=st2;
st3=new nod; st4=new nod; st3->urm=st4;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare(st1, st2, x);
}
cout<<"Lisa initiala este:";
afisare(st1, st2);
cout<<endl;
p=st1->urm;
while(p!=st2){
if(p->info%2!=0)
adaugare(st3, st4, p->info);
p=p->urm;
}

70
afisare(st3, st4);
return 0;
}

Pr10.
/*Se considera o lista cu doua santinele.Sa se stearga primul elem par din lista.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_lista(nod*&st1, nod*&st2, int x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;
}
void afisare_lista(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;}
}
int extragere_prim_par(nod*&st1, nod*&st2, int&x){
p=st1;
while(p->urm->info%2!=0)
p=p->urm;
if(p->urm!=st2){
c=p->urm;
p->urm=c->urm;
x=c->info; delete c; return 1;}
return 0;
}

int main(){
int i;
st1=new nod;
st2=new nod;
st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_lista(st1, st2, x);}
if(extragere_prim_par(st1, st2, x))
cout<<"S-a sters primul elem par:"<<x;
else cout<<"Nu se poate efectua stergere";
cout<<endl;
afisare_lista(st1, st2);
return 0}

71

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