Proiect Informatica
Proiect Informatica
Proiect informatica
Colegiul national Gheorge Lazar
7 iunie 2024
Vectori
CUPRINS
Contents
15 decembrie exercitii cu vectori................................................................................................................2
Bubble sortFisiere text...............................................................................................................................42
Interclasarea..............................................................................................................................................50
Inserarea in text........................................................................................................................................52
Stergerea din vector..................................................................................................................................55
Cautarea binara.........................................................................................................................................59
1
Simion darius 10c
#include <iostream>
int main()
{
int n, i, s=0, x;
cin>>n;
for (i=1; i<n; i++)
{
cin>>x; s+=x;
}
cout<<s;
return 0;
}
2. Se citesc n numere naturale. Care este suma elementelor aflate pe pozitii impare in vector?
Dar a celor aflate pe pozitii pare ?
2
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100], sp=0, si=0;
cin>>n;
for(i=0; i<n; i++)
{
cin>>v[i];
if (i%2==0) sp+=v[i];
else si+=v[i];
}
cout<<sp<<' '<<si;
return 0;
}
3. Se da un sir de n numere naturale. Sa se determine cate dintre acestea sunt divizibile cu un
numar -div - introdus de la tastatura.
3
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100], nr=0, div;
cin>>n;
cin>>div;
for(i=0; i<n; i++)
{
cin>>v[i];
if (v[i]%div==0) nr++;
}
cout<<nr;
return 0;
}
4. 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.
4
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100],a , b, aux, nr=0;
cin>>n;
cin>>a>>b;
if (a>b)
{
aux=a; a=b; b=aux;
}
for (i=0; i<n; i++)
{
cin>>v[i];
if (v[i]>a && v[i]<b)nr++;
}
cout<<nr;
return 0;
}
5. 5. Sa se determine numarul maxim, respectiv minim dintr-un sir de n numere
naturale introduse de la tastatura.
5
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100], maxim, minim;
cin>>n; cin>>v[0];
maxim=minim=v[0];
for (i=1; i<n; i++)
{
cin>>v[i];
if (v[i]>maxim) maxim=v[i];
if (v[i]<minim) minim=v[i];
}
cout<<maxim<<' '<<minim;
return 0;
}
6. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor pozitive.
Numarul 0 nu se ia in calcul.
6
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100], s=0, p=1;
cin>>n;
i=0; cin>>v[i];
while (v[i]!=0 )
{
if (v[i]<0) s+=v[i];
if (v[i]>0) p*=v[i];
if (i<n) cin>>v[++i];
else v[i]=0;
}
cout<<s<<' '<<p;
return 0;
}
7. 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.
7
Simion darius 10c
#include <iostream>
int main()
{
int n, i, v[100], s=0, p=1;
cin>>n;
for (i=0; i<n; i++) cin>>v[i];
for (i=0; i<n; i++)
if (v[i]%2==0) cout<<v[i]<<' '<<i<<'\n';
return 0;
}
8. Se da un sir x cu n elemente intregi unde n este cuprins in intervalul [a,b], iar a si b sunt
introduse de la tastatura. Sa se calculeze:
a) suma elementelor pozitive;
b) produsul elementelor pare;
c) suma elementelor negative aflate pe pozitii impare
d) media aritmetica a elementelor care dau restul 2 la impartirea cu 5
e) sa sa numere cate elemente sunt mai mici ca 6
f) sa se verifice daca al p-lea element din sir este divizibil cu 4
8
Simion darius 10c
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, i, v[100], nrp=0, nri=0;
cin>>n;
for (i=0; i<n; i++)
{
cin>>v[i];
if (v[i]%2) nri++;
else nrp++;
}
cout<<abs(nrp-nri);
9
Simion darius 10c
return 0; }
10. Se citește un vector cu n elemente, numere naturale. Să se înlocuiască ultimul element
prim din vector cu 0, apoi să se afișeze vectorul.
#include <iostream>
int main()
{
int n, i, v[100], d, prim, ok;
cin>>n;
for (i=0; i<n; i++) cin>>v[i];
for (i=n-1, ok=1; i>=0 && ok; i--)
{
for (d=2, prim=1; d<v[i]/2 && prim; d++)
if (v[i]%d==0) prim=0;
if (prim) {ok=0; v[i]=0;}
}
for (i=0; i<n; i++) cout<<v[i]<<' ';
return 0; }
11. Se citește un vector cu n elemente, numere naturale. Să se înlocuiască fiecare element prim din
#include <iostream>
int main()
10
Simion darius 10c
{
int n,v[10],d,nr,i,ok;
cin>>n;
ok=0;nr=0;
for (i=1;i<=n;i++)
{ ok=0;
if (v[i]%d==0) ok=1;
if (ok==0) v[i]=0;
return 0;
11
Simion darius 10c
#include <iostream>
using namespace std;
int main()
12
Simion darius 10c
{
int n,v[10],u,i;
cin>>n;
for (i=1;i<=n;i++) cin>>v[i];
for (i=1;i<=n;i++)
if (i=n) u=v[i];
for (i=1;i<=n;i++)
if (v[i]%u==0&& i!=n) cout<<v[i]<<" ";
return 0;
13
Simion darius 10c
13. Se citește un vector cu n elemente, numere naturale. Să se afișeze elementele vectorului în
#include <iostream>
int main()
int n,v[10],i;
cin>>n;
for (i=1;i<=n;i++)
if (i<n-1)
return 0;
14. Se citește un vector cu n elemente, numere naturale. Să se determine câte elemente ale vectorului
14
Simion darius 10c
sunt egale cu diferența dintre cea mai mare și cea mai mică valoare din vector.
#include <iostream>
int main()
int n,v[10],i,min,max,nr;
cin>>n;nr=0;
min=v[1]; max=v[1];
for (i=1;i<=n;i++)
if (v[i]<min) min=v[i];
if (v[i]>max) max=v[i];
for (i=1;i<=n;i++)
if (v[i]==max-min)
nr=nr+1;
cout <<nr;
return 0;
15
Simion darius 10c
15. Se citește un vector cu n elemente, numere naturale distincte. Să se afișeze elementele cuprinse
între elementul cu valoarea minimă și cel cu valoare maximă din vector, inclusiv acestea.
16
Simion darius 10c
#include <iostream>
int main()
int n,i,v[100],max,min,x,y;
cin>>n;
17
Simion darius 10c
for(i=1;i<=n;i++)
cin>>v[i];
min=v[1];
max=v[1];
for(i=1;i<=n;i++)
if (v[i]>max)
max=v[i];
x=i;
if (v[i]<min){
min=v[i];
y=i;
if(y<x){
for(i=y+1;i<x;i++)
cout<<v[i]<<" ";}
else
for(i=x+1;i<y;i++)
cout<<v[i]<<" ";
18
Simion darius 10c
return 0;
16. Se citește un vector cu n elemente, numere naturale. Să se determine suma valorilor elementelor
19
Simion darius 10c
20
Simion darius 10c
#include <iostream>
int main()
int n,i,v[100],x,y,s=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
y=0;
for(i=1;i<=n;i++)
while(y=0){
if(v[i]%2==0){
y=i;
for(i=1;i<=n;i++)
if(v[i]%2==0){
x=i;}
for(i=y;i<=x;i++)
s=s+v[i];
cout<<s;
return 0;
21
Simion darius 10c
}
17. Se dă un vector cu n numere naturale. Să se determine câte dintre elemente au valoarea strict mai
22
Simion darius 10c
23
Simion darius 10c
18. Se dă un vector cu n numere naturale. Să se determine cel mai mare divizor comun al elementului
24
Simion darius 10c
25
Simion darius 10c
#include <iostream>
int main()
int n,i,v[100],max,min;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
max=v[1];
min=v[1];
for(i=1;i<=n;i++)
if(v[i]<min)
min=v[i];
if(v[i]>max)
max=v[i];
while(max!=min)
if(max>min)
max-=min;
else
26
Simion darius 10c
min-=max;
cout<<max;
return 0;
19. Se dă un vector cu n numere naturale. Să se determine câte dintre perechile de elemente egal
#include <iostream>
int main()
int v[100],n,i,nr=0;
do{
cin>>n;
}while(n>100);
for(i=0;i<n;i++) cin>>v[i];
for(i=0;i<n/2;i++){
if(v[i]/10%10==v[n-i-1]/10%10) nr++;
cout<<nr;
return 0;
27
Simion darius 10c
20. Se dă un vector cu n numere naturale. Să se determine câte dintre elementele vectorului sunt prime
cu ultimul element.
#include <iostream>
int main()
int v[100],n,i,nr=0,r,a,b;
do{
cin>>n;
}while(n>100);
for(i=0;i<n;i++) cin>>v[i];
for(i=0;i<n;i++){
a=v[i];b=v[n-1];
r=a%b;
while(r!=0){
a=b;
b=r;
r=a%b;
if(b==1) nr++;
cout<<nr;
28
Simion darius 10c
return 0;
21. Se dă un vector cu n numere naturale. Să se determine câte dintre perechile de elemente egal
#include <iostream>
int main()
int v[100],n,i,nr=0,r,a,b;
do{
cin>>n;
}while(n>100);
for(i=0;i<n;i++) cin>>v[i];
for(i=0;i<n/2;i++){
a=v[i];b=v[n-i-1];
29
Simion darius 10c
r=a%b;
while(r!=0){
a=b;
b=r;
r=a%b;
if(b==1) nr++;
cout<<nr;
return 0;
22. Se dă un vector cu n numere naturale. Să se determine care elemente din vector au cea mai mare
sumă a cifrelor.
#include <iostream>
int main()
30
Simion darius 10c
int v[100],n,i,c,s,max=0;
do{
cin>>n;
}while(n>100);
for(i=0;i<n;i++) cin>>v[i];
for(i=0;i<n;i++){
c=v[i];
s=0;
while(c!=0){
s=s+c%10;
c/=10;
if(s>max) max=s;
for(i=0;i<n;i++){
c=v[i];
s=0;
while(c!=0){
s=s+c%10;
c/=10;
return 0;
31
Simion darius 10c
23. Să se înlocuiască toate elementele nule dintr-un vector cu elemente numere naturale cu partea
cin >> n;
if (v[i] != 0)
c++;
s = s + v[i];
32
Simion darius 10c
ma = s / c;
if (v[i] == 0)
v[i] = ma;
24. Se dă un număr natural nenul k și vector cu n numere naturale. Să se înlocuiască fiecare element cu
multiplul lui k cel mai apropiat de el și să se afișeze elementele astfel obținute în ordine inversă.
33
Simion darius 10c
cin >> n;
cin >> k;
c = v[i] / k;
v[i] = k * c;
34
Simion darius 10c
cout << v[i] << " ";
25. Se dă un șir cu n elemente, numere naturale. Să se afișeze, pentru fiecare element din șir, valoarea
din șir aflată după acesta și mai mare decât acesta. Dacă o asemenea valoare nu există, se va afișa -1.
cin >> n;
35
Simion darius 10c
}
26. Se dă un șir a1, a2, …, an de numere întregi. Se dau de asemenea numerele întregi x și k. Să se
determine:
cin >> n;
36
Simion darius 10c
cin >> x >> k;
if (a[i] == x)
p = i;
i = n;
if (a[i] == x)
q = i;
i = 0;
37
Simion darius 10c
{
if (a[i] == x)
c++;
if (c == k)
cout << i;
27. Se dă un vector cu n elemente, numere naturale. Verificați dacă vectorul are un element
majoritar. Numim element majoritar o valoare pentru care numărul de apariții în vector este mai mare
decât n/2.
#include <iostream>
int f[100];
int main()
38
Simion darius 10c
{
int n, i, x, ok;
cin>>n;
if (f[i]>n/2) ok=1;
if (ok) cout<<"da";
return 0; }
28. Se consideră un șir a[1], a[2], …, a[n] de numere întregi. Să se determine diferența maximă de
forma a[i+1] - a[i], unde 1 ≤ i <n.
#include <iostream>
39
Simion darius 10c
int main()
cin>>n;
maxim=v[1]-v[0];
if (maxim<v[i+1]-v[i]) maxim=v[i+1]-v[i];
cout<<maxim;
return 0; }
29. Se consideră un șir a[1], a[2], …, a[n] de numere întregi. Să se determine diferența maximă de
forma a[i] - a[j], unde 1 ≤ i <j ≤ n
#include <iostream>
int main()
cin>>n;
40
Simion darius 10c
for (i=0; i<n; i++) cin>>v[i];
maxim=v[1]-v[0];
if (maxim<v[i]-v[j]) maxim=v[i]-v[j];
cout<<maxim;
return 0; }
30. Se dă un şir cu n numere naturale. Să se afişeze suma primilor n termeni din şir, apoi suma
primilor n-1 termeni din şir, şi aşa mai departe.
#include <iostream>
int main()
int n, v[100], i, s, j;
cin>>n;
41
Simion darius 10c
for (j=i, s=0; j<n; j++) s+=v[j];
cout<<s<<' ';
return 0; }
Bubble sort
Crescator
#include <iostream>
#include <fstream>
int main()
ifstream f("date.in");
ofstream g("date.out");
f>>n;
for (i=1;i<=n;i++)
f>>v[i];
do
ok=1;
for(i=1;i<=n;i++)
if(v[i]>v[i+1])
{aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
42
Simion darius 10c
ok=0;}
}while(ok==0);
for (i=1;i<=n;i++)
g<<v[i]<<" ";
g.close();
f.close();
return 0;
Descrescator
#include <iostream>
#include <fstream>
43
Simion darius 10c
int main()
ifstream f("date.in");
ofstream g("date.out");
f>>n;
for (i=1;i<=n;i++)
f>>v[i];
do
ok=1;
for(i=n;i>=1;i++)
if(v[i]>v[i+1])
{aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
ok=0;}
}while(ok==0);
for (i=n;i>=1;i++)
g<<v[i]<<" ";
g.close();
f.close();
return 0;
44
Simion darius 10c
#include <iostream>
int main()
cin>>n>>p1>>p2;
45
Simion darius 10c
if (v[p1]<v[p2])
return 0; }
46
Simion darius 10c
Fisiere text
1. sa se scrie de cate ori apare fiecare cifra in vector
2.
47
Simion darius 10c
3.
4. Fișierul bac.in conține cel mult 106 numere naturale din intervalul [0,109], separate prin
câte un spațiu. Se cere să se afișeze pe ecran, în ordine descrescătoare, cele mai mari
două numere de două cifre distincte care NU se află în fișier. Numerele afișate sunt
separate printr-un spațiu, iar dacă nu există două astfel de numere, se afișează pe ecran
mesajul nu exista. Proiectați un algoritm eficient din punctul de vedere al timpului de
executare.
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bac.in");
int v[110];
int main()
{
int x,ok=2;
while(f>>x){
v[x]++;
}
for(x=99;x>9 && ok;x--){
if(v[x]==0 && x%10!=x/10) {
cout<<x<<" "; ok--;
}
}
48
Simion darius 10c
if(ok) cout<<"Nu exista";
f.close();
return 0;
}
49
Simion darius 10c
Interclasarea
. Din fisierul txt nr.in se citesc de pe prima linie 2 nr naturale n si m(2<=n,m<=100), pe linia a 2 a n nr in
ordine crescatoare, iar pe linia a 3 a m nr ordine crescatoare separate prin spatiu, rep el a 2 vectori x si
y.Sa se construiasca al 3 lea vector care sa contina el din x resp y pastrandu se ordinea cresc a
elementelor.
#include <iostream>
#include <fstream>
ifstream f("nr.in");
int main()
int x[100],y[100],z[200],n,m,i,j,k;
f>>n>>m;
for(i=0;i<n;i++) f>>x[i];
for(i=0;i<m;i++) f>>y[i];
i=0;
j=0;
k=-1;
while(i<n&&j<m){
if(x[i]>y[j]){
k++;
z[k]=y[j];
j++;
else if(x[i]<y[j]){
z[k]=x[i];
i++;
50
Simion darius 10c
k++;
if(n>m)
for(i=m;i<n;i++) z[i]=x[k];
f.close();
return 0;
51
Simion darius 10c
Inserarea in vector
1. Se considera un vector cu cel mult 100 de elemente, 2 valori naturale k si x sa se inserezew= in
vector pe pozitia k nr x
2. Se considera unb vector cu elemente distincte. Sa se insereze in vector dupa primul element
impar valoarea x, respective sa se scrie mesajul nu exista daca nu contine niciun elem impar
52
Simion darius 10c
3. Se considera un vector. Sa se insereze I vector intre 2 elemnte pare successive media lor
Aritmetica
53
Simion darius 10c
54
Simion darius 10c
#include <iostream>
#include <fstream>
int main()
{
int v[100],n,i,k;
do{
cin>>n;
}while(n>100);
do{
cin>>k;
}while(k<0||k>n);
for (i=0;i<n;i++) cin>>v[i];
for(i=k-1;i<n-1;i++) v[i]=v[i+1];
n--;
for (i=0;i<n;i++) cout<<v[i]<<" ";
return 0;
}
55
Simion darius 10c
#include <iostream>
#include <fstream>
int main()
{
int v[100],n,i,j;
do{
cin>>n;
}while(n>100);
for (i=1;i<=n;i++) cin>>v[i];
for (i=1;i<=n;i++)
if (v[i] %2==0)
{
for (j=i;j<n-1;j++) v[j]=v[j+1];
n--;
}
for (i=1;i<=n;i++) cout<<v[i]<<" ";
return 0;
}
3. Sa se stearga elementele palindrom
56
Simion darius 10c
#include <iostream>
#include <fstream>
int main()
int v[100],n,i,j,c,inv;
do{
cin>>n;
}while(n>100);
for (i=1;i<=n;i++)
c=-v[i];inv=0;
while (c>0)
inv=inv*10+c%10;c=c/10;
57
Simion darius 10c
}
if (inv==v[i])
n--;
#include <iostream>
#include <fstream>
int main()
{
int v[100],n,i,j,c,inv;
do{
cin>>n;
}while(n>100);
for (i=1;i<=n;i++) cin>>v[i];
for (i=0;i<n;i++)
58
Simion darius 10c
if (v[i]<0)
{
for (j=i;j<n-2;j++) v[j]=v[j+1];
n--; i--;
}
for (i=0;i<n;i++) cout<<v[i]<<" ";
return 0;
}
Cautarea binara
#include <iostream>
int main()
{int v[100],n,i,left,right,mid,x,ok;
cin>>n; ok=0;
59
Simion darius 10c
left=0;
right=n-1;
cin>>x;
{ mid=(left+right)/2;
if (v[mid]==x) {ok=1;cout<<mid;}
if (v[mid]>x) right=mid-1;
return 0;
60