Sunteți pe pagina 1din 4

Prelucrarea tablourilor unidimensionale

Declararea unui tablou unidimensional se face prin instructiunea:


tip_data nume [nr_elemente ];
tip_data precizează tipul elementelor vectorului,
nume este identificatorul vectorului,
nr_elemente este o constantă întreagă care specifică numărul de elemente ale vectorului. De
exemplu, prin: int a[10]; se declară un vector cu 10 de elemente de tip întreg.
În C++ numerotarea indicilor incepe de la 0.Bineinteles ca putem sa lucram cu indici de la 1, dar in
acest caz va trebui sa declaram vectorul cu un element in plus, pentru a avea acelasi numar maxim de
elemente specificat in problema de rezolvat.

Citirea unui vector Afisarea unui vector Explicatii

int n, a[101],i; int int n, a[101],i; int Aici indicii tabloului sunt
main() main() 1,2,…99, 100.
{cin>>n; {…. Deci daca tabloul are n elemente atunci
for(i=1;i<=n;i++) for(i=1;i<=n;i++) primul indice este 1, iar ultimul indice este
cin>>a[i]; cout<<a[i]; n;
return 0; return 0;
} }

int n, a[100],i; int n, a[100],i; int Aici indicii tabloului sunt


int main() main() 0,1,2,…99.
{cin>>n; {…….. Deci daca tabloul are n elemente atunci
for(i=0;i<n;i++) for(i=0;i<=n-1;i++) primul indice este 1, iar ultimul indice este
cin>>a[i]; cout<<a[i]; n;
return 0; return 0;
} }

VECTORI – APLICAŢII

Minimul dintr-un vector


Din fisierul de intrare minim.in se citeste de pe prima linie un numar natural n, reprezentand numarul
de elemente ale unui vector, iar de pe linia urmatoare se citesc n elemente, numere intregi, separate
printr-un spatiu, reprezentand elementele vectorului. Se cere să se afișeze valoarea minimă din acest
vector in fisierul de iesire minim.out.

Prezentarea algoritmului:
1. Initializăm minimul cu primul element sau cu o valoare foarte mare.(min=v[0] sau min=1000000)
2. Comparăm minimul cu celelalte valori din vector. In cazul în care se gasește o valoare v [i]<min
atunci minimul devine egal cu v[i].
Obs. În cazul maximului vom inițializa maximul cu un număr foarte mic sau cu prima valoare din vector.

1
#include <fstream>
using namespace std;
ifstream fin("minim.in");
ofstream fout("minim.out");
int v[100],n;
int main()
{ int i, vmin; fin>>n;
for ( i = 0; i < n; i++ )
fin>>v[i];
vmin = v[0];
for ( i = 1; i < n; i++ )
if ( vmin > v[i] )
vmin = v[i];
fout<<vmin;
fin.close(); fout.close(); return 0;
}

Aplicații
1. Se citesc cele n numere naturale (n<100).Afişaţi câte numere din şir sunt divizibile cu elemental
minim al şirului.

#include <iostream>
using namespace std;
int main()
{ int v[100],min,nr,n;
cout<<"n= "; cin>>n;
for(int i=0;i<n;i++)
cin>>v[i];
min=10000000;
for(int i=0;i<n;i++)
if(v[i]<min)
min=v[i];
if(min>0)
for(int i=0;i<n;i++)
if(v[i]%min==0)
nr=nr+1;
cout<<nr;
return 0;
}

2. Gigel s-a documentat şi a făcut o listă cu preturile ultimelor n smartphone-uri apărute şi altă listă
cu preţurile celor mai vândute m gadgeturi. Ajutaţi-l să determine cel mai scump smartphone şi
cel mai ieftin gadget. Dacă sunt mai multe, să se afişeze toate poziţiile din listele
corespunzătoare.

3. http://www.pbinfo.ro/ problemele: #165, #2220

2
#165 – Rezolvare

#include <iostream>
#include <fstream>

/*7
li lf
6 2 5 4 3 6 1
0 1 2 3 4 5 6*/

using namespace std;

int main()
{
long int v[1000],n,i,x,y,xmax,ymax,max,li,lf,s,px,py;
ifstream fin("maxsim.in");
ofstream fout("maxsim.out");
fin>>n;
for(i=0;i<n;i++)
fin>>v[i];
li=0;lf=n-1;max=0;
while(li<lf)
{
x=v[li];
y=v[lf];
s=x+y;
if(s>max)
{
max=s;
xmax=x;
px=li+1;
py=lf+1;
ymax=y;
}
li=li+1;
lf=lf-1;
}

fout<<max<<" "<<px<<" "<<py;


return 0;
}
4. Date fiind un şir cu n numere naturale (n<1000) şi un 0<k<n, calculaţi şi afişaţi produsul
ultimelor k numere diferite de 0, dacă există. Dacă nu sunt k astfel de numere în şir, afişaţi
mesajul IMPOSIBIL.

3
5. Duduţa are 2 albume cu poze pe Facebook. In primul album are n poze, în cel de al doilea are m
poze. Fiecare poză are un anumit numar de like-uri. Calculaţi câte poze din primul album au mai
puţine like-uri decât fiecare poză din cel de-al doilea şi care sunt acestea. Pozele sunt numerotate
cu numere de la 1 la n respectiv de la 1 la m (1<n,m<50) .
Exemplu:
primul album: 5 //5 poze in primul album (de la 1 la 5)
3 6 18 5 9 //numarul de like-uri pentru fiecare
al doilea album: 7 //5 poze in primul album (de la 1 la 7)
13 9 10 22 8 7 12 // numarul de like-uri pentru fiecare
Se va afişa: 3
124
adica: sunt 3 poze in primul album care au mai putine like-uri decât orice poză din al doilea iar
pozele căutate sunt prima (3 like-uri), a doua (6 like-uri) şi a patra (5 like-uri).

Problemele nerezolvate rămân ca temă acasă.

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