Documente Academic
Documente Profesional
Documente Cultură
Vocabular
Citirea,afisarea si atribuirea
Fisiere
Vectori
Matrici
Functii
Tipul string
Tipul struct
Liste alocate static
Pointeri
1
Codeblocks
#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
} //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)
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@
Citirea,afisarea si atribuirea
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.
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;
}
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
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) )
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
#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;
}
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;
}
#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;
}
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:
s=0;
for(i=1;i<=100;i++) s+=i; //sau s=s+i;
cout<<”suma este: ”<<s;
18
Probleme:
//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;
}
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;
}
#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.
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;
}
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
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];
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
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
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
} }
34
}
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;
}
//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];
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 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;
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()
{
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;
}
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;
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 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 nui 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.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;
}
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.
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;
66
delete c;
}
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