Probleme in C++
Probleme in C++
interclasarea
Edit 0 3
Interclasarea= operatia de construire a unui sir ordonat cu valorile preluate din
doua siruri ordonate in prealabil
int a[30],b[30],c[60],n,m,k;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
cin>>m;
for(i=1;i<=m;i++)cin>>b[i];
i=1;j=1;k=0;
(cat timp nu s-a terminat niciunul din siruri, se adauga elementul mai mic din cele
doua siruri )
while(i<=n&&j<=m)
if(a[i]<b[j])c[++k]=a[i++];
else if(b[j]<a[i])c[++k]=b[j++];
(daca sunt egale elementele sin cele doua siruri din unul se preia elementul si in
celelalt se sare peste el)
else {c[++k]=a[i++];j++;}
(daca primul sir nu s-a terminat se adauga toate elementele lui)
while(i<=n)c[++k]=a[i++];
(daca al doilea sir nu s-a terminat se adauga toate elementele lui)
while(j<=m)c[++k]=b[j++];
(afisarea sirului rezultat)
for(i=1;i<=k;i++)cout<<c[i]<<" ";
Probleme:
1.(varianta 12 bac)Fiierele text [Link] i [Link] conin, separate prin cte
un spaiu, mai multe numere ntregi de cel mult 9 cifre fiecare. Fiecare dintre
fiiere conine cel mult 100 de valori i numerele din fiecare fiier sunt ordonate
strict cresctor. Se cere s se afieze pe ecran, n ordine cresctoare, numerele
divizibile cu 5 care se gsesc doar n unul din cele dou fiiere.
valoare natural n de cel mult 8 cifre, iar pe linia urmtoare sunt memorate cte n
numere naturale, cu maximum 4 cifre fiecare, ordonate strict cresctor i separate
prin cte un spaiu. Se cere afiarea pe ecran, separate prin cte un spaiu, n
ordine strict cresctoare, a tuturor numerelor aflate pe a a doua linie att n primul
ct i n al doilea fiier. Alegei un
algoritm de rezolvare eficient din punct de vedere al memoriei utilizate i al
timpului de execuie.
Exemplu: pentru urmtoarele fiiere:
[Link]
5
3 6 8 9 12
[Link]
6
2 3 5 7 9 13
se va afia 3 9.
Cutare binar
Algoritmul de cutare binar ofer performane mai bune dect algoritmul de
cutare secvenial. El funcioneaz astfel: se compar numrul
de cutat cu elementul aflat la mijlocul irului (element care se mai numete i
pivot). n cazul n care cele dou elemente coincid cutarea s-a ncheiat cu
succes. Dac numrul de cutat este mai mare dect pivotul, se continu
cutarea n aceeai manier n subirul delimitat de pivot i captul irului iniial.
Dac numrul de cutat este mai mic dect pivotul se continu cutarea n
aceeai manier n subirul delimitat de pivot i nceputul irului iniial.
Algoritmul prezentat se ncadreaz n clasa algoritmilor elaborai conform tehnicii
de programare Divide et Impera.
Unul din dezavantajele acestui algoritm este c irul n care se face cutarea
trebuie s fie iniial sortat.
#include<iostream>
using namespace std;
void main()
{
int i, n, x, st, dr, mijl, gasit, a[50];
cout<<"Introduceti numarul elementelor vectorului : ";
cin>>n;
cout<<"Introduceti elementul de cautat : ";
cin>>x;
for(i=1;i<=n;i++) {cout<<"a["<<i<<"]= "; cin>>a[i];}
st=1; dr=n; gasit=0;
while (st<=dr && gasit!=1) {
mijl=(st+dr)/2;
if (a[mijl]==x)
gasit=1;
else
if (x<a[mijl])
dr=mijl-1;
else
st=mijl+1;
}
if (st>dr)
cout<<"Nu s-a gasit elementul cautat !"<<endl;
else
cout<<"Elementul cautat apartine sirului !"<<endl;
}
Aplicatii:
1)(varianta 24 bac)Fiierul text [Link] conine pe prima linie numrul natural n,
1n30000, pe urmtoarele n linii un ir de n numere ntregi, ordonate cresctor,
iar pe ultima linie dou numere ntregi a i b (ab) separate de un spaiu. Fiecare
dintre cele n numere, precum i valorile a i b, au cel mult patru cifre.
a) Scriei un program C/C++, eficient din punct de vedere al timpului de executare,
care afieaz pe ecran cel mai mic numr ntreg din intervalul nchis [a,b] care se
gsete n irul dat. Dac nu exist un astfel de numr, programul afieaz textul
NU.
Exemplu: dac fiierul [Link] are coninutul de mai jos, programul afieaz
valoarea 11
4
-2
7
11
35
8 15
[Link] citeste p natural. Afisati cel mai mic numar al carui factorial are fix p zerouri.
Ex. p=2 => 10
[Link] de elemente de lungime maxima
Edit 0 3
a)Determinarea unei secvente de elemente consecutive ce indeplinesc o
proprietate, de lungime maxima cu retinerea numarului de elemente din
secventa si a pozitiei ei de inceput
Ex1. Secventa de pare de lungime maxima
n=10 a(12,9,10,4,6,8,1,5,2,22)
Se afiseaza: 10 4 6 8
Daca sunt mai multe de aceeasi lungime maxima, se afiseaza prima.
lg=0;
for(i=1;i<=n;i++)
{if(a[i]%2==0)lg++;
else lg=0;
if(lg>max){max=lg;
pozinceput=i-lg+1;}
}
for(i=0;i<max;i++)cout<<a[i+poz]<<" ";
Ex1. Secventa crescatoare de lungime maxima
n=10 a(12,9,10,4,6,8,1,5,2,22)
Se afiseaza: 4 6 8
Daca sunt mai multe de aceeasi lungime maxima, se afiseaza prima.
lg=1;
for(i=1;i<n;i++)
{if(a[i]<a[i+1])lg++;
else lg=1;
if(lg>max){max=lg;
pozinceput=i-lg+1;}
}
for(i=0;i<max;i++)cout<<a[i+poz]<<" ";
Aplicatii:
[Link] mai lunga secventa de numere prime dintr-un sir
[Link] mai lunga secventa de elemente cu aceeasi paritate dintr-un sir
[Link] mai lunga secventa de elemente consecutiv egale. Daca sunt mai multe
afisati-o pe cea de valoare minima.
a(4,11,11,11,3,5,5,5,21,21,21)=>5 5 5
[Link] text [Link] conine pe prima linie dou numere naturale, n i k,
separate de un spaiu (3n10000, 2kn/2), iar pe a doua linie un ir de n
numere naturale, x1, x2, ..., xn, separate prin cte un spaiu, fiecare numr din
acest ir avnd cel mult patru cifre. Scriei un program C/C++ care citete
numerele din fiier i determin, utiliznd o metod eficient din punct de vedere
al timpului de executare, cel mai mic indice i (1in-k+1) pentru care suma
termenilor x[i], x[i+1], ..., x[i+k-1] este maxim. Programul afieaz valoarea lui i pe
ecran.
Exemplu:
pentru fiierul
83
29475299
se afieaz 2, deoarece suma maxim se obine pentru 9+4+7.
a)Determinarea unei secvente de elemente consecutive ce indeplinesc o
proprietate, de lungime maxima cu construirea unui nou sir care sa retina
secventa curenta si aunui sir ce sa retina seventa maxima
Ex1. Secventa de pare de lungime maxima
lg=0;
for(i=1;i<=n;i++)
{if(a[i]%2==0){lg++;b[lg]=a[i];}
else lg=0;
if(lg>max){max=lg;
for(j=1;j<=max;j++)sirmax[j]=b[j];}
}
for(i=1;i<=max;i++)cout<<sirmax[i]<<" ";
7-Sortari
Edit 0 2
Sortarea=algoritm de ordonare a valorilor dintr-un sir
Exista mai multe metode de sortare. In prima faza vom studia doar una dintre ele:
Sortarea prin selectie directa- se bazeaza pe interschimbarea perechilor
(a[i],a[j]), i<j, care nu sunt in ordine crescatoare(a[i])>a[j])
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;}
Aplicatii:
1. Se citesc doua siruri de valori a cu n elemente si b cu m elemente. Verificati
daca aceste siruri contin aceleasi elemente dar in alta ordine.(siruri anagrama)
2. Sortati valorile pare dintr-un sir crescator si cele impare descrescator.
3. Mutati valorile nule la sfarsitul sirului
[Link] doar valorile de pe pozitii pare dintr-un sir (restul sa ramana in aceeasi
ordine)
5. Sortati un sir intre pozitia minimului si a maximului crescator
Metode de sortare pentru vectori
1. Sortarea prin selecie direct
Considerm un vector de elemente comparabile ntre ele i dorim s le ordonm
cresctor. Pentru aceasta comparm primul element cu toate elementele care
urmeaz dup el. Dac gsim un element mai mic dect primul atunci le
interschimbm pe cele dou. Apoi continum cu al doilea element al irului, pe
care, de asemenea l comparm cu toate elementele care urmeaz dup el i n
caz de inversiune interschimbm cele dou elemente. Apoi procedm la fel cu al
treilea element al irului iar procesul continu astfel pna la penultimul element al
irului care va fi comparat cu ultimul element din ir.
#include<iostream>
using namespace std;
void main()
{
int i,j,n,aux,a[50];
cout<<"Introduceti numarul de elemente din sir : "; cin>>n;
cout<<"Introduceti numerele"<<endl;
for(i=0;i<n;i++) {cout<<"a["<<i<<"]="; cin>>a[i];}
urmeaza algoritmul de sortare//
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (a[j]<a[i]) {
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
urmeaza afisarea sirului sortat
cout<<"Sirul sortat este:"<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
2. Sortarea prin metoda bulelor
Acest algoritm se mai numete i "sortarea prin selecie i interschimbare",
"sortarea prin propagare" sau "metoda lent de sortare"
datorit numrului mare de operaii care trebuie efectuate. Succesul algoritmului
este asigurat de trecerea succesiv prin tablou, pn cnd
acesta este sortat, cu specificaia c, la fiecare trecere, elementele succesive i i
i+1 pentru care a[i]>a[i+1], vor fi interschimbate.
Metoda poate fi imbuntit dac, dup fiecare trecere, se va reine ultima poziie
din tablou n care a avut loc o interschimbare, iar trecerea
urmtoare se va efectua doar pin la acea poziie. n cazul n care la o trecere nu
a avut loc nici o interschimbare algoritmul se va incheia.
Pentru o i mai bun optimizare se poate nlocui trecerea prin tablou ntr-un sens
cu trecerea n dublu sens. n acest caz, dac la dou treceri
succesive, ntre dou elemente i i i+1 nu a avut loc o interschimbare, atunci nici
la trecerile urmtoare nu se vor nregistra interschimbri.
Cu toate optimizrile aduse acestei sortari, ea se dovedete a fi cu mult mai lent
dect sortarea prin inserie, fiind ns preferat de unii
datorit simplitii, ce nu ridic probleme de implementare. Pentru valori suficient
de mari ale dimensiunii vectorului ce urmeaz a fi sortat se
recomand utilizarea unor algoritmi ce au o complexitate mai redusa i, prin
urmare, ofer un timp de calcul mai mic.
#include<iostream>
using namespace std;
void main()
{
int n,i,aux,terminat,a[50];
cout<<"Introduceti dimensiunea vectorului : ";
cin>>n;
for(i=0;i<=n-1;i++) { cout<<"a["<<i<<"]="; cin>>a[i];}
terminat=0;
while(!terminat) {
terminat=1;
for(i=0;i<n-1;i++)
if(a[i]>a[i+1]) {
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
terminat=0;}
}
cout<<"Vectorul ordonat este : ";
for(i=0;i<=n-1;i++)
cout<<a[i]<<" ";
cout<<endl;
}
3. Sortarea prin inserie
Considerm c avem vectorul sortat a, iar la ivirea unui nou element care se va
aduga vectorului, el va fi pus pe locul potrivit printr-o inserie n interiorul
vectorului.
- Inseria direct. Este cea mai simpl implementare a algoritmului i se face n
felul urmtor: Se consider c primele i elemente al vectorului
sunt deja sortate. Pentru elementul al (i+1)-lea, din tabloul iniial, se va gsi poziia
n care trebuie inserat printre primele i elemente. Toate
elementele tabloului de la aceast poziie i pn la i vor fi deplasate cu o poziie
5-Constructii pe siruri
Edit 0 1
[Link] citeste un sir a de n elemente si un sir b de m elemente
a)Construiti sirul reuniune
b)Construiti sirul intersectie
c)Construiti sirul diferenta simetrica
d)afisati toate elementele din a care sunt mai mici decat toate elementele din b
[Link] citeste un sir din [Link]
a)pentru un numar m, natural de la tastura construiti sirul cu primele m numere
prime(daca exista atatea, daca nu mesaj)
b)pentru un numar m, natural de la tastura construiti sirul cu ultimele m pare(daca
exista atatea, daca nu mesaj)
c)construiti sirul cifrelor distincte folosite in numerele din fisier si sirul frecventelor
lor(vezi mai jos). Afisati apoi cel mai mare numar ce se poate construi din toate
cifrele existente in fisier
[Link] citeste un sir de n elemente intregi de la tastatura
Construiti sirul elementelor distincte in paralel cu sirul frecventelor lor.
a(2,8,-1,5,2,-1,3,2,-1,-1,8)
d(2,8,-1,5)
fr(3,2,4,1)
unde fr[i]=frecventa elementului d[i] in sirul initial
Ce elemente apar cel mai des?
4-Perechi de valori pe siruri
Edit 0 1
Perechile de valori consectutive intr-un sir sunt de forma (a[i],a[i+1]), unde
i<n(nr. de elemente din sir)
si se pot determina cu:
for(i=1;i<n;i++)
{ .....}
Aplicatii:
[Link] numarul de perechi de valori consecutive dintr-un sir cu proprietate
ca sunt numere consecutive
a(5 6 9 10 11 8 9)
4 perechi:
(5,6)
(9,10)
(10,11)
(8 9)
[Link] numarul de perechi de valori consecutive dintr-un sir cu proprietate
ca sunt prime intre ele
[Link] numarul de perechi de valori consecutive dintr-un sir cu proprietate
ca incep cu aceeasi cifra
Perechile de valori distincte intr-un sir sunt de forma (a[i],a[j]) cu j>i.
si se pot determina cu
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
}
Aplicatii:
[Link] toate perechile de valori distincte ce au proprietea ca primul numar al
perechii este mai mic ca cel de-al doilea
[Link] toate perechile de valori distincte ce au proprietea ca au o cifra in comun
[Link] toate perechile de valori distincte ce au proprietea ca reprezinta numere
fibonacci consecutive
4. Afisati tripletele pitagorice dintr-un sir.
2-aplicatii pe siruri
Edit 0 1
Indici-valoare
[Link] pozitia pe care se intalneste ultima si prima valoare para dintr-un sir
2. Afisati toate elementele a caror paritate este diferita de paritatea pozitiei lor in
sir. Daca toate elementele din sir au aceasta proprietate afisati mesaj.
3. Verificati daca exista in sir elemente care se pot scrie ca suma de alte doua
valori din sir
[Link] toate perechile de valori din sir care sunt prime intre ele
[Link] elementele din sir care se gasesc intre minim si maxim
[Link] citesc doua numere a, b. Afisati care se gaseste in fata celuilalt in sir.
ex.a=3, b=11 si sirul(2,11,3,4,3,11, 11)
se afiseaza
11 in fata lui 3
11 in fata lui 3
3 in fata lui 11
3 in fata lui 11
3 in fata lui 11
3 in fata lui 11
[Link] daca un sir e crescator sau descrescator, munte, vale sau oarecare.
[Link] daca un sir e multime(contine elemente distincte)
Constructii de siruri
[Link] citesc valori dintr-un fisier, construiti sirul ce contine doar numerele in ordine
strict crescatoare.
2. Construiti multimea(sirul valorilor distincte ce se dau de la tastatura)
1-Cautari si maxime pe siruri
Edit 0 2
Parcurgerea unui sir pentru a gasi valori cu o proprietate
for (i=1;i<=n;i++)
{
doar in acest for se pot efectua calcule asupra lui a[i]
deci pentru fiecare element din sir
}
Cautarea primei valori cu o proprietate cu iesire din repetitiva in momentul
gasirii
gasit=0;
for(i=1;i<=n&&gasit==0;i++)
if(......){prima=a[i];
gasit=1;}
sau:
i=1;gasit=0;
while(i<=n&&gasit==0)
{
if(...){prima=a[i];gasit=1;}
i++;
}
Cautarea primei valori cu o proprietate fara iesire din repetitiva in momentul
gasirii
for(i=n;i>=1;i--)
if(....)prima=a[i];
Cautarea ultimei valori cu o proprietate cu iesire din repetitiva in momentul
gasirii
gasit=0;
for(i=n;i>=1&&gasit==0;i--)
if(......){ultima=a[i];
gasit=1;}
sau:
i=n;gasit=0;
while(i>=1&&gasit==0)
{
if(...){yltima=a[i];gasit=1;}
i--;
}
Cautarea ultimei valori cu o proprietate fara iesire din repetitiva in momentul
gasirii
for(i=1;i<=n;i++)
if(....)ultima=a[i];
Probleme
rezolvate
Vectori in C++
Un vector este un sir de mai multe valori care au acelsi tip, componentele
acestuia putand fi identificate prin numele vectorului urmat (intre paranteze drepte)
de pozitia acestora in cadrul vectorului.
Declaratia unui vector se realizeaza prin specificarea tipului componentelor
vectorului, identificatorul vectorului urmat apoi de dimensiunea acestuia intre
paranteze drepte:
int a[5];
- declara un sir de 5 de numere intregi
float f[10]; - declara un sir de 10 numere reale
char c[20]; - declara un sir de 20 caractere alfanumerice
Observatie: Primul element al vectorului are coordonata 0 (a[0]), al doilea are
coordonata 1 (a[1]), s.a.m.d.:
int a[5];
#include <iostream>
using namespace std;
int main()
{
int i, n, a[10];
cout<<"Cate numere sunt in sir? n=";
cin>>n;
8
cout<<"Introduceti numerele:"<<endl;
9
for (i=0;i<n;i++)
10
{
11
cout<<"a["<<i<<"]=";cin>>a[i];
12
}
13 }
Initializarea vectorilor se mai poate face de asemenea fara introducerea de la
tastatura ci direct din faza declaratiei, astfel:
1
2
3
4
5
6
7
8
9
1
0
11
1
2
#include <iostream>
using namespace std;
int main()
{
int i, n;
int a[5]={6,2,9,3,4};
cout<<"Elementele sirului sunt
urmatoarele:"<<endl;
for (i=0;i<5;i++)
{
cout<<"a["<<i<<"]="<<a[i]<<endl;
}
}
1 #include <iostream>
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
n=3
Introduceti numerele:
a[0]=2
a[1]=3
a[2]=4
Suma celor 3 numere
este: 9
Probleme rezolvate
1. Sa se introduca un sir de n numere intr-un vector. Sa se afiseze
Soluti
pe ecran cele n numere despartite printr-un spatiu.
e
2. Sa se calculeze suma primelor n numere oarecare.
Soluti
e
3. Se citesc n numere naturale. Care este suma elementelor aflate
Soluti
pe pozitii impare in vector? Dar a celor aflate pe pozitii pare ?
e
4. Se da un sir de n numere naturale. Sa se determine cate dintre
Soluti
acestea sunt divizibile cu un numar - div - introdus de la tastatura. e
5. Sa se introduca n numere de la tastatura intr-un vector si sa se
Soluti
determine cate dintre acestea apartin intervalului [a,b] si care sunt
e
acestea.
6. Sa se determine numarul maxim, respectiv minim dintr-un sir de n
Soluti
numere naturale introduse de la tastatura.
e
7. Sa se ordoneze crescator/descrescator un sir de n numere
Soluti
naturale.
e
8. Se citesc numere pana la 0. Sa se calculeze suma celor negative
Soluti
si produsul celor pozitive. Numarul 0 nu se ia in calcul.
e
9. Sa se afiseze elementele pare care se gasesc intr-un sir de
Soluti
numere naturale precum si pozitia pe care se afla acestea in
e
cadrul sirului.
10 Se da un sir x cu n elemente intregi unde n este cuprins in
Soluti
. intervalul [a,b], iar a si b sunt introduse de la tastatura. Sa se e
calculeze:
a)
suma
elementelor
pozitive;
b)
produsul
elementelor
pare;
c) suma elementelor negative aflate pe pozitii impare
d) media aritmetica a elementelor care dau restul 2 la impartirea
cu
5
#include <iostream>
using namespace std;
int main()
{
int i,n,a[50];
cout << "Introducenti valoarea lui n:";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
for (i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
1
6
2. Sa se calculeze suma primelor n numere oarecare.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
1
7
#include <iostream>
using namespace std;
int main()
{
int i,n,s,a[50];
cout << "Introducenti valoarea lui n:";
cin>>n;
s=0;
for (i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
s=s+a[i];
}
cout<<"Suma celor "<<n<<" numere este:"<<s;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,n,s1=0,s2=0,a[50];
cout << "Introducenti valoarea lui n:";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
if (i%2!=0)
s1=s1+a[i];
else
s2=s2+a[i];
}
cout<<"Suma elementelor aflate pe pozitii impare este: s1=
"<<s1<<endl;
cout<<"Suma elementelor aflate pe pozitii pare este: s2=
"<<s2<<endl;
return 0;
}
2
0
4. Se da un sir de n numere naturale. Sa se determine cate dintre acestea sunt
divizibile cu un numar - div - introdus de la tastatura.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
1
7
#include <iostream>
using namespace std;
int main()
{
int i,n,nr=0,a[50],div;
cout << "Introducenti valoarea lui n:";
cin>>n;
cout << "Introducenti valoarea lui div:";
cin>>div;
for (i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
if (a[i]%div==0)
nr++;
}
cout<<"In sirul dat exista "<<nr<<" numere divizibile cu "<<div;
return 0;
}
1
8
1
9
5. Sa se introduca n numere de la tastatura intr-un vector si sa se determine
cate dintre acestea apartin intervalului [a,b] si care sunt acestea.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
#include <iostream>
using namespace std;
int main()
{
int i,n,j=0,a,b,v[50],w[50];
cout << "Cate elemente va avea sirul? n=";
cin>>n;
cout << "Introducenti valoarea lui a:";
cin>>a;
cout << "Introducenti valoarea lui b:";
cin>>b;
for (i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
if (v[i]>=a && v[i]<=b)
{
j++;
w[j]=v[i];
}
}
cout << "Sirul contine "<<j<<" numere in intervalul
1
7
1
8
1
9
2
0
["<<a<<","<<b<<"]"<<endl;
2
cout << "Numerele din sir continute in intervalul ["<<a<<","<<b<<"]
1
sunt urmatoarele: ";
2
for (i=1;i<=j;i++)
2
cout<<w[i]<<" ";
2
return 0;
3
}
2
4
2
5
2
6
2
7
6. Sa se determine numarul maxim, respectiv minim dintr-un sir de n numere
naturale introduse de la tastatura.
1
2
3
4
#include <iostream>
#include <climits>
using namespace std;
int main()
5
6
7
8
9
1
{
0
int i,n,min=INT_MAX,max=INT_MIN,temp,v[50];
11
cout << "Cate elemente va avea sirul? n=";
1
cin>>n;
2
for (i=1;i<=n;i++)
1
{
3
cout<<"v["<<i<<"]=";
1
cin>>v[i];
4
if (v[i]>=max)
1
max=v[i];
5
if (v[i]<=min)
1
min=v[i];
6
}
1
cout << "Numarul maxim din sir este: "<<max<<endl;
7
cout << "Numarul minim din sir este: "<<min<<endl;
1
return 0;
8
}
1
9
2
0
2
1
7. Sa se ordoneze crescator/descrescator un sir de n numere naturale.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
#include <iostream>
using namespace std;
int main()
{
int n,i,j,temp,a[50];
cout<<"Cate elemente va avea sirul? n=";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>a[i];
}
for (i=1;i<n;i++)
for (j=i;j<=n;j++)
if (a[j]<=a[i])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
cout<<"Elementele ordonate crescator sunt: "<<endl;
for (i=1;i<=n;i++)
cout<<a[i]<<" "<<endl;
cout<<"Elementele ordonate descrescator sunt: "<<endl;
for (i=1;i<n;i++)
for (j=i;j<=n;j++)
if (a[j]>=a[i])
{
2
temp=a[i];
0
a[i]=a[j];
2
a[j]=temp;
1
}
2 for (i=1;i<=n;i++)
2
cout<<a[i]<<" "<<endl;
2 return 0;
3 }
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
8. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul
celor pozitive. Numarul 0 nu se ia in calcul.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
#include <iostream>
using namespace std;
int main()
{
int n,a[50],b[50],i=0,j=0,k,s=0,p=1;
cout<<"n=";
cin>>n;
while (n!=0)
{
if (n>0)
{
i++;
a[i]=n;
}
else
{
j++;
b[j]=n;
}
cout<<"n=";
cin>>n;
}
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2 }
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
9. Sa se afiseze elementele pare care se gasesc intr-un sir de numere naturale
precum si pozitia pe care se afla acestea in cadrul sirului.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
#include <iostream>
using namespace std;
int main()
{
int n,a[50],i=0;
cout<<"Cate elemente are sirul? n=";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<"Elementele pare, respectiv pozitia in sir sunt
urmatoarele:"<<endl;
1
3
1
4 for (i=1;i<=n;i++)
1
if (a[i]%2==0)
5
cout<<"Elementele par: "<<a[i]<<" / pozitia: "<<i<<endl;
1 }
6
1
7
10 Se da un sir x cu n elemente intregi. Sa se calculeze:
.
a)
suma
elementelor
pozitive;
b)
produsul
elementelor
pare;
c) suma elementelor negative aflate pe pozitii impare
d) media aritmetica a elementelor care dau restul 2 la impartirea cu 5
e) sa sa numere cate elemente sunt mai mici ca 6
f) sa se verifice daca al p-lea element din sir este divizibil cu 4
1
2
3
4
5
6
7
8
9
1
0
#include <iostream>
#include <stdlib.h>
using namespace std;
int n, p, x[50], a, b, suma;
int main()
{
n=0;
cout<<"Introduceti limita inferioara: a=";
cin>>a;
cout<<"Introduceti limita superioara: b=";
cin>>b;
11
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
do
{
system("CLS");
cout<<"Introduceti numarul de elemente ale sirului x: n= ";cin>>n;
} while ((n<a)||(n>b));
cout<<"Introduceti elementele sirului x:"<<endl;
for(int i=1;i<=n;i++)
{
cout<<"x["<<i<<"] = ";
cin>>x[i];
}
//Calculul sumei elementelor pozitive din sir
for(int i=1;i<=n;i++)
if (x[i]>0)
suma=suma+x[i];
if (suma==0)
cout <<"Nu exista elemente pozitive"<<endl;
else
cout<<"Suma elementelor pozitive este: "<<suma<<endl;
//Calculul produsul elementelor pare
int produs=1;
for(int i=1;i<=n;i++)
if (x[i]%2==0)
produs=produs*x[i];
if (produs == 1)
cout <<"Nu exista elemente pare"<<endl;
else
cout<<"Produsul elementelor pare este: "<<produs<<endl;
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1 cu 5 este: "<<ma<<endl;
4
2 //Cate elemente sunt mai mici ca 6
4
3 nr_elemente=0;
4 for(int i=1;i<=n;i++)
4
if (x[i]<6)
4
nr_elemente++;
5 cout<<"Sirul contine "<<nr_elemente<<" numere mai mici ca
4 6"<<endl;
6
4 //Verificare daca al p-lea element din sir este divizibil cu 4
7 do
4 {
8
cout<<"Introduceti pozitia elemetului testat: p=";
4
cin>>p;
9 }
5 while (p<1 || p>n);
0
if (x[p]%4==0)
5
cout<<"Numarul "<<x[p]<<" este divizibil cu 4"<<endl;
1
else
5
cout<<"Numarul "<<x[p]<<" nu este divizibil cu 4"<<endl;
2 }
5
3
5
4
5
5
5
6
5
7
5
8
5
9
6
0
6
1
6
2
6
3
6
4
6
5
6
6
6
7
6
8
6
9
7
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
8
7
9
8
0
8
1
8
2
8
3
8
4
8
5
8
6
8
7
8
8
11. Se da un numar format din n cifre. Sa se afiseze cifrele componente ale
acestuia in ordinea in care apar in numar.
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n,n1,x,x1,a[50],i=0;
float max;
cout<<"Cate cifre are numarul? n=";
cin>>n;
n1=n;//salvare a dimensiunii numarului
max=(float)pow(10,n)-1;
cout<<"max="<<max<<endl;
do
{
cout<<"Introduceti numarul: x=";
cin>>x;
}
while (x<0 || x>max);
x1=x;//salvare a numarului dat
while (x>0)
{
6
1
7
1
8
1
9
2
0
2
a[n]=n%10;
1
n--;
2
x=x/10;
2 }
2 for (i=1;i<=n1;i++)
3
cout<<"a["<<i<<"]="<<a[i]<<endl;
2 }
4
2
5
2
6
2
7
2
8
Cutarea binar
1. Se citesc elementele unui tablou unidimensional cu n (n<=l00) numere ntregi cu cel mult
patru cifre ordonate Cresctor. S se determine dac valoarea x citit de la tastatur se
gsete n tablou. n caz afirmativ se va afia o poziie pe care acesta se gsete altfel se va
afia un mesaj.
2. Se citesc elementele unui tablou unidimensional cu n (n<=100) numere ntregi cu cel mult
patru cifre ordonate cresctor. S se determine dac valoarea x citit de la tastatur se
gsete n tablou. n caz afirmativ se va afia cel mai mic indice pe care acesta se gsete
n tablou altfel se va afia un mesaj.
3. Se citesc elementele a dou tablouri unidimensionale v i w cu m (m<=100) respectiv n
(n<=l00) componente ntregi cu maxim patru cifre ordonate strict cresctor. S se afieze
elementele comune celor dou tablouri.
Interclasarea a doi vectori
1. Se considera doua tablouri unidimensionale a si b, fiecare avand numere naturale cu cel
mult 4 cifre fiecare, ordonate crescator. Tabloul a contine n numere (1<n<100) pare, iar
tabloul b contine m (1<m<100) numere impare. Scrieti un program care citeste de la
tastatura valoarea lui n si cele n elemente ale tabloului a , apoi valoarea lui m si cele m
elemente ale tabloului b, dupa care afiseaza pe ecran un numar maxim de elemente ale
tablourilor date, numerele scrise fiind in ordine crescatoare, separate prin cate un spatiu, iar
cele aflate pe pozitii consecutive fiind de paritate diferita. Exemplu: pentru n=6, m=5 si
tablourile: a=(2,4,8,10,14,16) i b=(3,5,7,11,15) se va afisa: 2 3 4 5 8 11 14 15 16.
2. Se consider dou tablouri unidimensionale a i b ecare avnd numere naturale cu cel
mult 4 cifre ecare, Fiecare dintre tablouri conine cel mult 100 de valori ordonate strict
cresctor. Se cere s se afieze pe ecran, n ordine cresctoare, numerele divizibile cu 5
care se gsesc doar n unul din cele dou [Link]: a=(1 2 3 4 7 20 60), iar b=(3 5 7
8 9 10 12 20 24) atunci se vor afia pe ecran valorile: 5 10 60.
3. Se consider dou tablouri unidimensionale a i b fiecare avnd cel mult 100 de numere
namrale cu cel mult 4 cifre ordonate strict crescator. Se cere s se afieze pe ecran, n
ordine cresctoare numerele care se gsesc doar n unul din cele dou tablouri. Exemplu:
a=(1 2 3 4 7 20 24 60), iar b=(1 3 4 7 8 9 10 20 24)atunci se vor afia pe ecran valorile: 2 8 9
10 60.
4. Se consider dou tablouri unidimensionale a i b fiecare avnd cel mult 100 de numere
naturale cu cel mult 4 cifre ordonate strict cresctor. Se cere s se afieze pe ecran, n
ordine cresctoare, a numerelor care se gsesc ambele tablouri. Exemplu: a=(1 2 3 4 7 20
24 60), iar b=(1 3 4 7 8 9 10 20 24) atunci se vor afia pe ecran valorile: 1 3 4 7 20 24.
5. Se consider dou tablouri unidimensionale a i b fiecare avnd cel mult 100 de numere
naturale cu cel mult 4 cifre ordonate strict crescator. Se cere s se afieze pe ecran, n
ordine crescatoare, a numerelor prime din cele doua tablouri. Exemplu: a=(1 2 3 4 7 20 24
60), iar b:(1 3 4 7 8 9 10 20 24) atunci se vor afia pe ecran valorile: 2 3 3 7 7 9.
Prelucrarea tuturor perechilor sau tripletelor care ndeplinesc o condiie dat
Se citesc elementele unui tablou unidimensional cu n (n<=100) numere ntregi cu cel mult
patru cifre. S se realizeze urmtoarele prelucrri: