Sunteți pe pagina 1din 5

#include <iostream>

/**
Se da un vector cu n elemente nr intregi numerotate de la 0.
Sa se elimine elementul de pe pozitia k (k<n).
Ordinea elementelor in vector ramane aceeasi.
ex: 12 41 2 43 14 4 5 87 10
0 1 2 3 4 5 6 7 8
n=9
k=5
12 41 2 43 14 5 87 10
*/
using namespace std;

void eliminare1(int a[], int &n, int k)


{ int i;
for (i = k+1; i < n; i++)
a[i-1] = a[i];
n--;
}
/**
Se da un vector cu n elemente nr intregi numerotate de la 0.
Sa se elimine elementul de pe pozitia k (k<n).
Ordinea elementelor in vector nu conteaza.
ex:
0 1 2 3 4 5 6 7 8
12 41 2 43 14 4 5 87 10
n=9 ( 9 elemente numerotate de la 0)
k=5
Deoarece ordinea elementelor nu conteaza, luam elementul de pe
ultima pozitie (n-1) si il mutam pe pozitia k.

Rezulta: 12 41 2 43 14 10 5 87
*/
void eliminare2(int a[], int &n, int k)
{
a[k] = a[n-1];
n--;
}

/**
Se da un vector cu n elemente numerotate de la 0.
Sa se elimine numerele negative din vector.
0 1 2 3 4 5 6 7 8 9
1 3 5 -8 9 6 -3 -4 7 8
Eliminam elementele negative parcurgand vectorul de la stanga la
dreapta
=> 1 3 5 9 6 7 8
*/

void eliminareNegative1(int a[], int &n)


{
int i, j;
for(i = 0; i<n; i++)
{
if(a[i] < 0)
{
for (j = i+1; j < n; j++)
a[j-1] = a[j];
n--;
i--;
}
}
}
/** Varianta a II-a (putin mai buna)
Analizam elementele vectorului de la dreapta la stanga.
*/
void eliminareNegative2 (int a[], int &n)
{
int i, j;
for(i = n-1; i>=0; i--)
{
if(a[i] < 0)
{
for (j = i+1; j < n; j++)
a[j-1] = a[j];
n--;
}
}
}

/** Varianta a III-a - optima


Aducem elementele pozitive din vector pe pozitii succesive la
inceputul vectorului. Pentru aceasta folosim o variablia k, ce ne
indica nr de valori pozitive gasite pana la momentul curent si
mutate la inceputul vectorului. k ne indica si pozitia ultimului
element pozitiv memorat
1 3 5 -8 9 6 -3 -4 7 8
0 1 2 3 4 5 6 7 8 9

k=0 i=0 v[i]=1>0 => v[k]=v[i] k++=1: 1


k=1 i=1 v[i]=3>0 => v[k]=v[i] k++=2: 1 3
k=2 i=2 v[i]=5>0 => v[k]=v[i] k++=3: 1 3 5
k=3 i=3 v[i]=-8 nu facem nimic
k=3 i=4 v[i]=9>0 => v[k]=v[i] k++=4: 1 3 5 9
k=4 i=5 v[i]=6>0 => v[k]=v[i] k++=5: 1 3 5 9 6
k=5 i=6 v[i]=-3<0 nu facem nimic
k=5 i=7 v[i]=-4<0 nu facem nimic
k=5 i=8 v[i]=7>0 => v[k]=v[i] k++=6: 1 3 5 9 6 7
k=6 i=9 v[i]=8>0 => v[k]=v[i] k++=7: 1 3 5 9 6 7 8
n=k
*/
void eliminareNegativeOptim (int a[], int &n){
int k=0, i;
for(i = 0; i < n; i++)
if (a[i] >= 0)
{
a[k] = a[i];
k++;
}
n = k;

void citire(int a[], int n)


{
int i;
for (i=0; i < n; i++)
cin>> a[i];

void afisare(int a[], int n){


int i;
for (i = 0; i < n; i++)
cout << a[i] << " ";
}
int main()
{
int x[100];
int n, k;
cout<< "n=";
cin>> n;
cout<< "x=";
citire(x, n);
cout<< "k=";
cin>> k;
/// eliminare1 (x, n, k);
/// eliminare2 (x, n, k);
///eliminareNegative2(x, n);
eliminareNegativeOptim(x, n);
afisare (x, n);

return 0;
}

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