Inserarea elementelor
Când ne referim la inserarea unui element în interiorul unui vector, trebuie să ne gândim în felul următor:
- Dorim să introducem o valoare între elementele de pe poziția 3 și 4;
- Vom muta toate elementele începând cu poziția 4 „la dreapta” o poziție, pentru a crea un spațiu liber (dimensiunea tabloului trebuie să permită extinderea, altfel vom pierde valori de la sfârșit);
- Inserăm valoarea în spațiul eliberat și creștem variabila ce memorează totalul de valori.
Inserarea unei valori în poziția k
v
este tabloul în care inserăm;n
este numărul de elemente al tabloului;k
este poziția în care inserăm;x
este valoarea pe care o introducem în pozițiak
.
int v[1001], n, k, x;
...
for (int i=n-1; i>=k; --i) v[i+1]=v[i]; /* eliberăm poziția k */
v[k]=x; // introducem valoarea în v[k]
n++; /* creștem numărul de elemente întrucât am introdus o valoare nouă */
Eliberarea unei poziții se face cu ajutorul unui for
, mutând toate elementele cu o poziție mai la dreapta (de la coadă la cap, deoarece invers am pune în toate căsuțele valoarea din v[k+1]).
Exemplu - problemă rezolvată
Se citește un număr n
, n
∈(0,103], urmat de n
elemente numere întregi ale unui vector v
. Să se insereze media aritmetică între oricare două elemente alăturate și să se afișeze elementele separate printr-un spațiu.
#include <iostream>
using namespace std;
int n;
float v[2001];
int main (){
int i,j;
cin>>n;
for(i=0; i<n; i++) cin>>v[i];
for(i=1; i<n; i+=2){
for(j=n-1; j>=i; j--)
v[j+1]=v[j];
v[i]=(v[i+1] + v[i-1])/2;
n++;
}
for(i=0; i<n; i++)
cout<<v[i]<<' ';
return 0;
}
4
2 5 7 9
2 3.5 5 6 7 8 9
5
0 5 1 33 10
0 2.5 5 3 1 17 33 21.5 10
Vom parcurge tabloul pe pozițiile impare (unde se vor insera mediile) și vom muta toate elementele următoare cu o poziție mai la dreapta (for
-ul cu indicele j
). În poziția proaspăt eliberată, marcată de variabila i
, vom insera media aritmetică a vecinilor (v[i-1]
și v[i+1]
).
Numărul de elemente n
va crește la fiecare medie inserată.