Ciao a tutti. Ho questo dubbio, sto cercando di unire due vettori in un terzo in ordine crescente. Esempio:
vettore1[dim] = 1,5,7,4
vettore2[dim2]=7,9,0
vettore3[dim+dim2]=0,1,4,5,7,7,9
Il codice che ho fatto è questo:
#include<stdio.h>
#define DIM2 20
#define DIM 20
void leggi_vettore(int vettore[], int dim);
void stampa_vettore(int vettore[], int dim);
void somma_vettori(int vettore1[], int dim1, int vettore2[], int dim2, int vettore3[], int dim3);
void leggi_vettore(int vettore[], int dim){
int i;
for(i=0; i<dim; i++){
printf("\nInserire elemento in posizione %d:\t", i);
scanf("%d", &vettore[i]);
}
}
void stampa_vettore(int vettore[], int dim){
int i=0;
printf("\nINDICI\n");
for(i=0; i<dim; i++)
printf("%d\t", i);
printf("\n");
printf("\nVALORI\n");
for(i=0; i<dim; i++)
printf("%d\t", vettore[i]);
printf("\n");
}
void somma_vettori(int vettore1[], int dim1, int vettore2[], int dim2, int vettore3[], int dim3){
int i, j, k; //indici per ogni vettore
i = 0;
j = 0;
k = 0;
dim3=dim1+dim2;
//ciclo che funziona fino a quando non si è arrivati alla fine di uno dei due vettori
while(i<dim1 && j<dim2){
if(vettore1[i]<vettore2[j]){
vettore3[k]=vettore1[i];
k++;
i++;
}
else{
vettore3[k]=vettore2[j];
k++;
j++;
}
}
//copiare il resto del vettore
if(i==dim1){//se sono arrivato alla fine di v1 copiare resto v2
while(j<dim2){
vettore3[k]=vettore2[j];
k++;
j++;
}
}
//copiare il resto del vettore
if(j==dim2){//se sono arrivato alla fine di v2 copiare resto v1
while(i<dim1){
vettore3[k]=vettore1[i];
k++;
i++;
}
}
}
int main(){
int vet1[DIM], vet2[DIM2], vet3[DIM+DIM2];
int dime1, dime2;
do {
printf("\nInserire la dimensione del primo vettore(minore di 20):\t");
scanf("%d", &dime1);
} while(dime1>20 || dime1<1);
do {
printf("\nInserire la dimensione del secondo vettore(minore di 20):\t");
scanf("%d", &dime2);
} while(dime2>20 || dime2<1);
leggi_vettore(vet1, dime1);
stampa_vettore(vet1, dime1);
leggi_vettore(vet2, dime2);
stampa_vettore(vet2, dime2);
somma_vettori(vet1, dime1, vet2, dime2, vet3, dime1+dime2);
stampa_vettore(vet3, dime1+dime2);
return 1;
}