Documente Academic
Documente Profesional
Documente Cultură
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*/
1
Simetricul elementului a[i] față de axa verticală este a[n-i+1]
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
cin>>p;
for(i=n;i>p;i--)
a[i+1]=a[i];
a[p]=x;
n--; // numărul de elemente ale vectorului scade
- 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;}}
- 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]<<” „;}
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]<<” „;
}