Sunteți pe pagina 1din 14

Inserari si stergeri în vectori

Inserare (adăugarea unui element într-un vector)

Numim inserare operația de introducere într-un vector a unei noi valori, pe o poziție
cunoscută, fără a pierde vreo valoare dintre cele deja existente.
Inserare: În vectorul v cu n elemente să inserează valoarea v, pe poziția p (1pn+1).
Exemplu:
Inițial : n=5, p=3, val=17 Final : n=6
v 10 20 30 40 50 v 10 20 17 30 40 50
rangur 0 1 2 3 4 rangur 0 1 2 3 4 5
i i

Algoritm de rezolvare:
Pasul 1: se deplasează cu câte o poziție spre dreapta toate valorile ce ocupă rangurile : n-1, n-2,
…, p
Astfel se suprascriu elementele v[n],v[n-1],…,v[p+1]
Pasul 2: numărul de valori din vector se incrementează
Pasul 3: se suprascrie elementul v[p] atribuindu-i-se valoarea val

for(int i = n - 1 ; i >= p ; i --)


v[i+1] = v[i];
v[p] = val;
n++;

#include<iostream>
using namespace std;
int main()
{
int n,i,v[50],p,val;
cout<<"Dati numarul de elemente ale sirului : ";
cin>>n;
cout<<"Dati pozitia din sir unde inseram : ";
cin>>p;
cout<<"Dati valoarea pe care o inseram : ";
cin>>val;
cout<<"Dati elementele sirului"<<endl;

for(i=0; i<n; i++)


{
cout<<"v["<<i<<"]= ";
cin>>v[i];
}
for(int i = n - 1 ; i >= p ; i --)
v[i+1] = v[i];
v[p] = val;
n++;
for(i=0; i<n; i++)
cout<<v[i]<<' ';
return 0;
}

Inserare multipla

Să se insereze după fiecare număr par din tablou numarul negativ acestuia.

#include<iostream>
using namespace std;
int main()
{
int v[100];
int i,j,n;
cout<<"Dati valoarea lui n=";
cin>>n;
for(i=0; i<n; i++)
{
cout<<"Dati valoarea elementului "<<i<<" ";
cin>>v[i];
}

for(i=0; i<n; i++)


if((v[i]%2==0)&&(v[i]>0))
{
for(j=n-1; j>=i; j--)
v[j+1]=v[j];
v[i+1]=-v[i];
i++;
n++;
}
for(i=0; i<n; i++)
cout<<v[i]<<" ";
return 0;
}
Se dă un vector cu n elemente naturale. Să se insereze după fiecare element par, jumătatea sa.
Dacă parcurgerea se face de la stânga spre dreapta, există riscul unor inserări suplimentare.

#include<iostream>
using namespace std;
int main()
{
int v[100];
int i,j,n;
cout<<"Dati valoarea lui n=";
cin>>n;
for(i=0; i<n; i++)
{
cout<<"Dati valoarea elementului "<<i<<" ";
cin>>v[i];
}

for(i=n-1; i>=0; i--)


if((v[i]%2==0))
{
for(j=n-1; j>=i; j--)
v[j+1]=v[j];
v[i+1]=v[i]/2;
n++;
}
for(i=0; i<n; i++)
cout<<v[i]<<" ";
return 0;
}

Ştergerea unui element din pozitia p

Numim ştergere operația de eliminare din vector a unei valori a cărei poziție este
cunoscută.
Din vectorul x cu n elemente, se elimină valoarea ce ocupă poziția p (1pn).

Exemplu :
Inițial : n=5, p=3 Final : n=4
v 10 20 30 40 50 v 10 20 40 50
ranguri 0 1 2 3 4 ranguri 0 1 2 3

Algoritm de rezolvare:
Pasul 1: se deplasează cu câte o poziție spre stânga toate valorile ce ocupă rangurile: p+1, p+2,
…, n-1.
Astfel se suprascriu elementele v[p],v[p+1],…,v[n-2]
Pasul 2: numărul de valori din vector se decrementează

for(int i = p ; i < n - 1; i ++)


v[i] = v[i+1];
n --;

#include<iostream>
using namespace std;
int main()
{
int v[100];
int i,j,n,p;
cout<<"Dati valoarea lui n=";
cin>>n;
for(i=0; i<n; i++)
{
cout<<"Dati valoarea elementului "<<i<<" ";
cin>>v[i];
}
cout<<"Dati pozitia de unde stergem";
cin>>p;
for(int i = p ; i < n - 1; i ++)
v[i] = v[i+1];
n --;

for(i=0; i<n; i++)


cout<<v[i]<<" ";
return 0;
}
Ștergerea mai multor valori din șir
for (int p = 0 ; p < n ; p ++)
if(v[p] % 2 == 0) {
for(int i = p ; i < n - 1; i ++)
v[i] = v[i+1];
n --;
p--;
}
#include<iostream>
using namespace std;
int main()
{
int v[100];
int i,j,n,p;
cout<<"Dati valoarea lui n=";
cin>>n;
for(i=0; i<n; i++)
{
cout<<"Dati valoarea elementului "<<i<<" ";
cin>>v[i];
}

for (int i = 0 ; i < n ; i ++)


{
if(v[i] % 2 == 0)
{
for(int j = i ; j < n - 1; j ++)
v[j] = v[j+1];
n --;
i--;
}

}
for(i=0; i<n; i++)
cout<<v[i]<<" ";
return 0;
}
 Stergerea elementelor cu parcurgere in ordine inversa:
for (int p = n - 1 ; p >= 0 ; p --)
if(v[p] % 2 == 0) {
for(int i = p ; i < n - 1; i ++)
v[i] = v[i+1];
n --;
}
include<iostream>
using namespace std;
int main()
{
int v[100];
int i,j,n,p;
cout<<"Dati valoarea lui n=";
cin>>n;
for(i=0; i<n; i++)
{
cout<<"Dati valoarea elementului "<<i<<" ";
cin>>v[i];
}
for (int p = n - 1 ; p >= 0 ; p --)
if(v[p] % 2 == 0)
{
for(int i = p ; i < n - 1; i ++)
v[i] = v[i+1];
n --;
}

for(i=0; i<n; i++)


cout<<v[i]<<" ";
return 0;
}

TEMA
1. Se citesc n elemente numere naturale ce se memoreaza in vectorul a.

a) Stergeti din vectorul initial toate numerele patrate perfecte si afisati noul vector obtinut
b) Stergeti din vectorul initial toate numerele ce sunt precedate de un numar prim si afisati noul vector
obtinut
c) Stergeti din vectorul initial toate numerele ce au vecini doua numere pare si afisati noul vector
obtinut
d) Stergeti din vectorul initial toate numerele aflate in fata unui multiplu de 3 si afisati noul vector
obtinut
e) Stergeti din vectorul initial toate numerele ce apartin sirului lui Fibo si afisati noul vector obtinut

2. Se citesc n elemente numere naturale ce se memoreaza in vectorul a.

a) Inserati dupa fiecare element valoarea 100 si afisati noul vector obtinut
b) Inserati dupa fiecare element din vectorul initial , cea mai mare cifra a sa si afisati noul vector obtinut
c) Inserati intre oricare doua elemente vecine din vector CMMDC- ul lor si afisati noul vector obtinut
d) Inserati intre oricare doua elemente vecine din vector cel mai mare numar obtinut prin lipirea celor
doi vecini si afisati noul vector obtinut
e) Inserati in fata fiecarui element valoarea 777 si afisati noul vector obtinut
f) Inserati in fata fiecarui element din vectorul initial , produsul cifrelor sale si afisati noul vector obtinut

3. Se citesc doi vectori a si b cu cate n elemente fiecare. Dupa fiecare elemente a[i] inserati
elementul b[i].
Afisati vectorul obtinut.
Exemplu n=5
A: 3,5,9,8,10
B: 101,109,200,324,567
Vectorul obtinut: 3,101,5,109,9,200,8,324,10,567

MATRICE - Ștergeri și inserări de linii și coloane


// Citim indicele liniei care urmează să fie eliminată
cin >> x ;
// Fiecare linie, începând cu linia x și până la penultima linie din
matrice, este înlocuită cu linia imediat următoare
for ( i = x ; i <n-1 ; i++ )
for ( j = 0 ; j < m ; j++ )
a[i][j] = a[i+1][j];
//micșorăm numărul de linii
n--;
Exemplu: Să se șteargă linia 2.
0 1 2 0 1 2 0 1 2 1 2 2 3
3 1 2 3 4 3 3 0 1 2 3 4
0 5 6 7 8 0 1 2 3 4 0 1 2 3 41 5 6 7 8
9 0 1 1 2 1 5 6 7 8 1 5 6 7 8 2 3 4 5 6
3 4 2 5 6 3 2 4 5 6 2 3 4 5 6 3 7 8 9 1
7 8 3 9 1 3 3 4 5 6 3 7 8 9 1
4 7 4 8 9 1 4 7 8 9 1

#include <iostream>
#include<fstream>

using namespace std;


ifstream f("date.in");
ofstream g("date.out");
int main()
{
int a[100][100],i,j,n,m,x;
f>>n>>m;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
f>>a[i][j];
// Citim indicele liniei care urmează să fie eliminată
f >> x ;
// Fiecare linie, începând cu linia x și până la penultima linie din
matrice, este înlocuită cu linia imediat următoare
for ( i = x ; i <n-1 ; i++ )
for ( j = 0 ; j < m ; j++ )
a[i][j] = a[i+1][j];
//micșorăm numărul de linii
n--;
for(i=0; i<n; i++)
{for(j=0; j<m; j++)
g<<a[i][j]<<' ';
g<<endl;}
return 0;
}
Ștergerea unei coloane dintr-o matrice

// Citim indicele coloanei care urmează să fie eliminată cin >> x ;


// Fiecare coloană, începând cu coloana x și până la penultima
coloană din matrice, este înlocuită cu linia din dreapta
for ( j = x ; j <m-1 ; j++ )
for ( i = 0 ; i <n ; i++ )
a[i][j] = a[i][j+1];
//micșorăm numărul de coloane
m--;
Exemplu: Să se șteargă coloana 1.

0 1 2 0 1 2 0 1 2 0 1 2
3 1 2 3 4 3 3 0 1 3 4
0 5 6 7 8 0 1 3 3 4 0 1 3 4 41 5 7 8
9 0 1 1 2 1 5 7 7 8 1 5 7 8 8 2 9 1 2
3 4 2 5 6 9 2 1 1 2 2 9 1 2 2 3 3 5 6
7 8 3 9 1 3 3 5 5 6 3 3 5 6 6 4 7 9 1
4 7 4 9 9 1 4 7 9 1 1
#include <iostream>
#include<fstream>

using namespace std;


ifstream f("date.in");
ofstream g("date.out");
int main()
{
int a[100][100],i,j,n,m,x;
f>>n>>m;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
f>>a[i][j];
f>>x;
// Citim indicele coloanei care urmează să fie eliminată
// Fiecare coloană, începând cu coloana x și până la penultima coloană din
matrice, este înlocuită cu linia din dreapta
for ( j = x ; j <m-1 ; j++ )
for ( i = 0 ; i <n ; i++ )
a[i][j] = a[i][j+1];
//micșorăm numărul de coloane
m--;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
g<<a[i][j]<<' ';
g<<endl;
}
return 0;
}

Inserarea unei linii într-o matrice

// Citim indicele liniei pe care urmează să fie inserată noua linie


cin >> x ;
// Fiecare linie, începând cu linia n-1 și până la linia x inclusiv,
este mutată pe //linia imediat următoare
for ( i = n-1 ; i >= x ; i--)
for ( j = 0; j < m ; j++ )
a[i+1][j] = a[i][j];
//mărim numărul de linii
n++;
//înlocuim linia x cu noile valori, prin atribuire sau citire
for ( j = 0 ; j < m ; j++)
a[x][j] = … ; // sau cin >> a[x][j];
#include <iostream>
#include<fstream>

using namespace std;


ifstream f("date.in");
ofstream g("date.out");
int main()
{
int a[100][100],i,j,n,m,x;
f>>n>>m;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
f>>a[i][j];
f>>x;

// Citim indicele liniei pe care urmează să fie inserată noua


linie
// Fiecare linie, începând cu linia n-1 și până la linia x
inclusiv, este mutată pe //linia imediat următoare
for ( i = n-1 ; i >= x ; i--)
for ( j = 0; j < m ; j++ )
a[i+1][j] = a[i][j];
//mărim numărul de linii
n++;
//înlocuim linia x cu noile valori, prin atribuire sau citire
for ( j = 0 ; j < m ; j++)
a[x][j] = 10; // sau cin >> a[x][j];

for(i=0; i<n; i++)


{
for(j=0; j<m; j++)
g<<a[i][j]<<' ';
g<<endl;
}
return 0;
}

Exemplu: Să se insereze, dupa linia 1, o linie în care toate valorile sunt egale cu 10.

0 1 2 0 1 2 0 1 2 0 1 2 3
3 3 3 0 1 2 3 4
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 1 5 6 7 8
1 5 6 7 8 1 5 6 7 8 1 5 6 7 8 2 10 10 10 10
3 4 2 5 6 3 2 4 5 6 2 3 4 5 6 3 3 4 5 6
7 8 3 9 1 7 3 8 9 1 3 3 4 5 6 4 7 8 9 1
4 7 4 8 9 1 4 7 8 9 1

// Citim indicele liniei dupa care urmează să fie inserată noua linie
cin >> x ;
for ( i = n-1 ; i >= x+1 ; i--)
for ( j = 0; j < m ; j++ )
a[i+1][j] = a[i][j];
//mărim numărul de linii
n++;
//înlocuim linia x+1 cu noile valori, prin atribuire sau citire
for ( j = 0 ; j < m ; j++)
a[x+1][j] = … ; // sau cin >> a[x][j];

Inserarea unei coloane într-o matrice


// Citim indicele coloanei pe care urmează să fie inserată
cin >> x ;
// Fiecare coloană, începând cu coloana m și până la coloana x inclusiv,
este mutată pe coloana din dreapta
for ( j = m-1 ; j >= x ; j--)
for ( i = 0 ; i < n ; i++ )
a[i][j+1] = a[i][j];
//mărim numărul de coloane
m++;
//înlocuim coloana x cu noile valori, prin atribuire sau citire
for ( i = 0 ; i < n ; i++)
a[i][x] = … ; // sau cin >> a[i][x];
#include <iostream>
#include<fstream>

using namespace std;


ifstream f("date.in");
ofstream g("date.out");
int main()
{
int a[100][100],i,j,n,m,x;
f>>n>>m;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
f>>a[i][j];
f>>x;

// Citim indi cin >> x ;


// Fiecare coloană, începând cu coloana m și până la coloana x
inclusiv, este mutată pe coloana din dreapta
for ( j = m-1 ; j >= x ; j--)
for ( i = 0 ; i < n ; i++ )
a[i][j+1] = a[i][j];
//mărim numărul de coloane
m++;
//înlocuim coloana x cu noile valori, prin atribuire sau citire
for ( i = 0 ; i < n ; i++)
a[i][x] =10 ; // sau cin >> a[i][x];

for(i=0; i<n; i++)


{
for(j=0; j<m; j++)
g<<a[i][j]<<' ';
g<<endl;
}
return 0;
}
Exemplu: Să se insereze, după coloana 1, o coloană în care toate valorile sunt egale cu 0.

0 1 2 3 4 0 1 024 3 0 1 4 0 1 2 3
0 1 2 3 4 1 4 4
1 2 3 3 4
5 61 7 8 0 1 2 3 4 4 0 0 1 2 0 3 4
2 1 5 6 7 7 8
9 0 1 2 5 6 7 8 8 1 5 6 0 7 8
1 2 9 0 1 1 2
3 4 3 5 6 92 0 1 2 2 2 9 0 0 1 2
3 4 5 5 6
7 8 4 9 1 33 4 5 6 6 3 3 3 4 0 5 6
7 8 9 9 1
74 8 9 1 1 4 4 7 8 0 9 1

Temă:
1. Se dă o matrice cu n linii și m coloane, n și m numere pare. Să se insereze la mijlocul o linie,
respectiv o coloană care să conțină valoarea 0.
Exemplu: pentru n=2 și m=4 și matrice următoare, se va obține:
0 1 0 1 2 3 4
21 2 3 4 3 0 1 2 0 3 4
05 6 7 8 1 0 0 0 0 0
1 52 6 0 7 8

ș
i

2. Se dă o matrice cu n linii și m coloane, n și m numere impare. Să se șteargă linia și


coloana din mijloc. Exemplu: pentru n=3 și m=5 și matrice următoare, se va
obține:
0 1 2 0 1 2 3
31 2 3 4 4 5 0 1 2 4 5
02 3 4 5 6 3 4 6 7
3 4 1 5 6 7
2
n = 2 și m = 4

Indicații:
1) x = n/2;
//se inserează o linie după linia x

//se completează linia x+1 cu valoarea 0

x = m/2;
//se inserează o coloană după coloana x

//se completează coloana x+1 cu valoarea 0

2) x = n/2 + 1;
//se șterge linia x

x = m/2 + 1;
//se șterge coloana x

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