Come inserire un vettore dentro un altro vettore nel linguaggio C
Questo programma inserisce un vettore v2 in una posizione interna dell'array v spostando tutti gli elementi di v2 verso destra. Gli elementi eccedenti sono eliminati.
- #include <stdio.h>>
- // funzione per inserire il vettore v2 nel vettore v
- void inserire(int v[], int d, int p, int v2[], int t) {
- int i;
- if (p<0 || p>=d) return;
- for (i=d-1; i>p+t; i--) {
- v[i]=v[i-t];
- }
- for (i=1; i<=t; i++) {
- v[p+i]=v2[i-1];
- }
- return;
- }
- // programma principale
- int main() {
- int i,r,n=99,p=2;
- int v[]={1,2,3,4,5,6,7,8,9,10};
- int v2[]={30,31,32};
- inserire(v,10,2,v2,3);
- for (i=0;i<10;i++) {
- printf(" %d ",v[i]);
- }
- return 0;
- }
Come funziona
Nella riga 17 del programma principale main() definisco un vettore v[] composto da dieci elementi
int v[]={1,2,3,4,5,6,7,8,9,10};
Nella riga 18 dichiaro e definisco un secondo vettore v2[] composto da tre elementi.
int v2[]={30,31,32};
Nella riga 19 richiamo la funzione inserire()
inserire(v,10,2,v2,3);
passandogli come parametri
- il vettore stesso v
- il numero di elementi del vettore (10)
- la posizione (2) dell'array a partire dalla quale inserire i nuovi elementi
- il vettore da inserire (v2)
- il numero degli elementi del vettore (3) da inserire.
Alla riga 3 la funzione inserire() recepisce i in entrata.
void inserire(int v[], int d, int p, int v2[], int t) {
Per comodità utilizzo i nomi v e v2 degli array anche nella funzione.
Le variabili locali della funzione sono:
- la variabile d riceve il numero di elementi (10) del vettore v
- la variabile p la posizione (2) in cui inserire il vettore
- la variabile t il numero di elementi (3) del vettore v2.
Nella riga 5 verifico se la posizione indicata è minore di zero o maggiore del numero di elementi del vettore.
Se così fosse, la funzione inserire() restituisce il controllo alla funzione chiamante main().
if (p<0 || p>=d) return;
Nelle righe 6-8 sposto di t (=3) posizioni in avanti tutti i valori del vettore v fino alla posizione p (=2) in cui dovrò inserire il vettore v2.
for (i=d-1; i>p+t; i--) {
v[i]=v[i-t];
}
Dopo questa operazione il vettore v ha i seguenti elementi
1 2 3 4 5 6 4 5 6 7
Gli elementi di valore 8, 9, 10 sono stati sovrascritti, mentre gli elementi di valore 4, 5, 6, 7 (verde) sono stati spostati di tre posizioni in avanti nel vettore v.
Nella riga 9-11 scrivo i t=3 valori del vettore v2 dopo la posizione p=2 dell'array v.
for (i=1; i<=t; i++) {
v[p+i]=v2[i-1];
}
Poi restituisco il controllo al programma main.
Essendo una funzione void è comunque facoltativo indicare l'istruzione return alla fine. La scrivo solo per semplificare la spiegazione.
return;
L'output del programma è il seguente
1 2 3 30 31 32 4 5 6 7
Il programma ha inserito dopo la posizione p=2 i tre (t=3) elementi 30, 31, 32 del vettore v2.
Da notare che la posizione p=2 è la terza posizione nell'array perché la prima posizione di un vettore ha indice zero.
E così via.