C - Unire due vettori e ordinare il terzo vettore in ordine crescente

di il
4 risposte

C - Unire due vettori e ordinare il terzo vettore in ordine crescente

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;
}

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte