Sunteți pe pagina 1din 7

Vectori

 Declarare: tip   nume_tablou[dim_1][dim_2]…[dim_n];
Exemplu:
int vect[20]; /* declararea tabloului vect, de maximum 20 de elemente, de tipul int.
Elementele tabloului vect sunt : vect[0], vect[1], …, vect[19] – date de tip int*/
           
double p,q,tab[10];  // declararea variabilelor simple p, q si a vectorului tab, de maximum
10 elemente, tip double
 
#define MAX 10
char tab[MAX];             /*declararea tabloului tab, de maximum MAX (10) elemente de tip
char*/

Consideram declaratia tabloului v cu maxim 6 elemente de tip int


 
int v[6];              
 
Elementele tabloului pot fi initializate prin atribuire:
v[0]=100;
v[1]=101;
v[2]=102;
v[3]=103;
v[4]=104;
v[5]=105;

char tab[]={ ’A’, ’C’, ’D’, ’C’};


 
 
float data[5]={ 1.2, 2.3, 3.4 };
 
                                   

 Citirea elementelor unui vector:


     double a[5];
     int i;
     for (i=0; i<5; i++)
     {    cout<<"a["<<i<<"]="; //afisarea unui mesaj prealabil citirii fiecarui element
          cin>>a[i];              //citirea valorii elementului de indice i
     }
Sau parcurgem elementele de la 1 la n fără afișarea unui mesaj
for (i=1; i<=5; i++)
       cin>>a[i];  
 Afisarea elementelor unui vector:
     cout<<"Vectorul introdus este:\n";
     for (i=1; i<=n i++)
          cout<<a[i]<< " ";

1
 Simetricul elementului a[i] față de axa verticală este a[n-i+1]

 Formarea perechilor de elemente consecutive dintr-un vector


for(i=1; i<n; i++)
prelucrăm a[i] și a[i+1]

 Formarea perechilor de elemente neconsecutive dintr-un vector


for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
prelucrăm a[i] și a[j]

 Ordonarea crescătoare a unui vector

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;}

 Interclasarea a doi vectori // elementele celor 2 vectori trebuie să fie ordonati crescator/
descrescator

#include<iostream.h>
int a[25], b[25],c[50];
int n, m,i, j,k;
int main( )
{ cout<<"Introduceti lungimile celor 2 vectori a si b= ";
cin>>m>>n;
for(i=1;i<=m;i++)
{ cout<<"a["<<i<<"]=";
cin>>a[i];}
for(i=1;i<=n;i++)
{ cout<<"b["<<i<<"]=";
cin>>b[i]; }
//Interclasarea
i=1; j=1;k=0;
while((i<=m)&&(j<=n))
{if(a[i]<b[j]){k++;c[k]=a[i];  // adaug la sirul c un element din a
i++;// mă deplasez mai departe în vectorul din care am ales elementul }
else if(a[i]==b[j]){k++; c[k]=a[i];  // adaug la sirul c un element din a
i++; j++;}
else {k++; c[k]=b[j];j++;}}
// Adaugam elementele ramase neparcurse din vectorul care nu s-a terminat
while(i<=m)//cat timpnu s-a terminat din primul vector
{k++; c[k]=a[i]; // copiez la sfarsitul sirului c elementele ramase din a
i++; }
while(j<=n) //cat timp nu s-a terminat al doilea vector

2
{ k++; c[k]=b[j]; // copiez la sfarsitul sirului c elementele ramase din b
j++;}
//Afisez vectorul interclasat
for(i=1;i<=k;i++)  // sirul c are lungimea k nu întotdeauna m+n elemente
cout<<c[i]<<" ";
}

 Căutarea binara
// Cautarea binara are loc numai in cazul in care tabloul este ordonat crescator
while((li<=ls)&&(!gasit))
{ mij=(li+ls)/2); //aflam indicele care reprezinta mijlocul tabloului.
if(x==v[mij]) { cout<<„L-am gasit pe pozitia „<<mij;
gasit=1; }
else if(x>v[mij]) // Cautare se face in dreapta
li=mij+1; // Actualizare li
else ls=mij-1; // Cautarea se face in stanga
}
if(gasit==0)
cout<<x<<„Elementul cautat nu se gaseste in tablou”;
}
 Inserarea unui element x în vector pe poziția p

cin>>x>>p;
for(i=p;i<n;i++)  
a[i]=a[i+1];
a[p]=x;
n++; // numărul de elemente ale vectorului crește

 Ștergerea unui element din vector de pe poziția p

cin>>p;
for(i=n;i>p;i--)  
a[i+1]=a[i];
a[p]=x;
n--; // numărul de elemente ale vectorului scade

 Formarea unui alt vector din elementele unui vector inițial

- Fără selecție

for(i=1;i<=n;i++)  
b[i]=prelucrare(a[i]);
Exemplu: să se formeze un vector care să conțină suma cifrelor fiecărei componente din
vectorul inițial
a=(154, 56, 89, 2000)
b=( 10, 11,17, 2 )
Rezolvare:
for(i=1;i<=n;i++)  
{ aux= a[i];
while (aux!=0)

3
{s=s+aux%10; aux=aux/10;}
b[i]=s;}

- Cu selecție
Exemplu: să se formeze un vector care să conțină suma cifrelor fiecărei componente pare
din vectorul inițial
a=(154, 56, 89, 2000)
b=( 10, 11, 2 )

Rezolvare:
j=0;
for(i=1;i<=n;i++)  
{ aux= a[i];
while (aux!=0)
{s=s+aux%10; aux=aux/10;}
if(s%2==0)
{j++; b[j]=s;}}

 Prelucrarea șirurilor de valori consecutive

- Determinarea celei mai lungi secvențe de elemente consecutive din vector care
îndeplinesc o condiție
lc=0; lmax=0;
for(i=1;i<=n;i++)  
if(a[i] indeplineste conditia)
lc++;
else if(lc>lmax)
{lmax=lc; lc=0;}

if(lc>lmax)
{lmax=lc;}
cout<< lmax;

- Afisarea elementelor celei mai lungi secvențe de elemente consecutive din vector
care îndeplinesc o condiție
lc=0; lmax=0;
for(i=1;i<=n;i++)  
if(a[i] indeplineste conditia)
lc++;
else if(lc>lmax)
{lmax=lc; lc=0;p=i;}

if(lc>lmax)
{lmax=lc;p=n;}
for(i=p-lmax+1;i<=p;i++)  
cout<<a[i]<<” ”;

4
Metode de sortare: Metoda bulelor, insertiei, selectiei, numararii
Bubble Sort – Sortarea unui tablou unidimensional
#include<iostream.h>
int v[25], i, n, ok, aux;
void main()
{cout<<„n=”; cin>>n;
for(i=1;i<=n;i++)
{cout<<„v[„<<i<<„]=”; cin>>v[i]; }
for(i=1;i<=n;i++) cout<<v[i]<<” „;
//Sortarea crescatoare
do
{ ok=1;
for(i=1;i<=n-1;i++)
if(v[i]>v[i+1])
{//Interschimbare
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
ok=0; }
}while(ok!=1);
cout<<endl;
for(i=1;i<=n;i++)
cout<<v[i]<<” „;
}
 
 
 SORTAREA PRIN INSERȚIE
Solutia:  Elementele vectorului sunt impartite in doua liste: sortata si nesortata.
La fiecare pas primul element al listei nesortate este transferat in lista sortata, exact pe
pozitia prin care se respecta  ordinea crescatoare a elementelor.
Aceasta operatie se va realiza  prin deplasarea cu o pozitie spre dreapta a tuturor
elementelor  mai mari decat el.
 
Exemplu:
Fie vectorul a=(3,2,1,6,4).
Lista ordonata va fi formata initial din primul element iar lista neordonata de celelalte (n-1)
elemente
Pas 1: Se cauta locul lui 2 in lista ordonata (3) si se va deplasa cu o pozitie spre  dreapta
primul element ==> se obtine vectorul a=(2,3,1,6,4)
Pas 2: Se cauta locul lui 1 in lista ordonata (2,3)  si se va deplasa cu o pozitie spre  dreapta
elementele 2 si 3 ==> se obtine vectorul a=(1,2,3,6,4)
Pas 3: Pentru ca 6>3 nu se vor realiza deplasari, vectorul a ramane acelasi  a=(1,2,3,6,4)
Pas 4: Se cauta locul lui 4 in lista ordonata (1,2,3,6)  si se va deplasa cu o pozitie spre dreapta
elementul 6 ==> se obtine vectorul a=(1,2,3,4,6)
*/
// Sortarea prin insertie – Sortarea unui tablou unidimensional
#include<iostream.h>
int v[25],i,j,n,x;
void main()
{

5
cout<<„n=”; cin>>n;
for(i=1;i<=n;i++)
{ cout<<„v[„<<i<<„]=”; cin>>v[i]; }
for(i=1;i<=n;i++) cout<<v[i]<<” „;
 
// Sortarea prin INSERTIE
for(i=2;i<=n;i++)    // parcurg vectorul nesortat de la a 2-lea element pana la sfarsit
  if (v[i]<v[i-1])   // primul element din vectorul nesortat se plaseaza pe pozitia
corespunzatoare
      { x=v[i];      // valoarea lui v[i] se pierde din vectorul nesortat
            j=i-1;
while (j>=0 && v[j]>x) // mut cu o pozitie spre dreapta toate elementele mai mari decat
x=v[i];
               {
               v[j+1]=v[j];
               j--;
               }
       v[j+1]=x; // insertia primului element pe pozitia corespunzatoare in vectorul sortat
      }
cout<<endl;
 
for(i=1;i<=n;i++)
cout<<v[i]<<” „;}

SORTAREA PRIN SELECȚIE


/*  Fiecare element v[i] se compara cu toate aflate dupa el. Daca se gaseste un element mai
mic decat v[i] atunci acestea se vor interschimba. Cand v[i] si-a incheiat rolul de pivot,
partea din vector pana la acesta inclusiv, este sortata crescator. */
#include<iostream.h>
int v[25],n,i,j,aux;
void main()
{cout<<„nr de elemente=”;
cin>>n;
for(i=0;i<n;i++)
{cout<<„v[„<<i<<„]=”;
cin>>v[i];}
for(i=0;i<n;i++)
cout<<v[i]<<” „;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i]>v[j])
{ aux=v[j];  v[j]=v[i]; v[i]=aux; }
cout<<endl;
for(i=0;i<n;i++)
cout<<v[i]<<” „;
}
 
SORTAREA PRIN NUMĂRARE
Solutia:

6
Consideram vectorul A. Algorituml de sortare prin numarare consta in gasirea pentru
fiecare element A[i] a numarului de elemente din vector mai mici decat el.
Numerele obtinute sunt memorate  intr-un alt vector B.
Elementele vectorului A vor fi initial salvate in vectorul auxiliar C.
La finalul algoritmului se vor rescrie in ordine crescatoare elementele vectorului A pe baza
valorilor memorate in B si C
Exemplu:
Fie vectorul A=(30,20,1,6,4).
Pas 1: Se realizeaza o copie a vectorului A in C.  Se va obtine vectorul C=(30,20,1,6,4).
Pas 2: Se determina elementele vectorului B astfel:
B[i]=cate elemente mai mici decat A[i] sunt in vectorul A  Se va obtine vectorul B=(4,3,0,2,1).
Pas 3: Se completeaza elementele vectorului A astfel:  A[B[i]]=C[i].  Se va obtine
A=(1,4,6,20,30).
*/
#include<iostream.h>
int a[25],b[25],c[25],n,i,j;
void main()
{ cout<<„nr de elemente=”; cin>>n;
 for(i=0;i<n;i++) { cout<<„v[„<<i<<„]=”; cin>>a[i]; }
for(i=0;i<n;i++) cout<<a[i]<<” „;
// Sortarea prin numarare
// Pasul 1 fac o copie a vectorului a in vectorul c
for(i=0;i<n;i++)
c[i]=a[i];
 // Pas 2 crearea vectorului b[i]
// determinam pentru fiecare element cate elemente sunt mai mici
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if (a[i]<a[j])
b[j]++;
else b[i]++;
// Pasul 3 Se rescriu elementele lui a in ordine crescatoare
for(i=0;i<n;i++)
a[b[i]]=c[i];
cout<<endl;
// Afisarea vectorului sortat
for(i=0;i<n;i++) cout<<a[i]<<” „;
}