[C] Fusione di due array - Posti pari e dispari

di il
3 risposte

[C] Fusione di due array - Posti pari e dispari

Scusate per il titolo un po' confusionario
La traccia di quel che sto scrivendo è questa:
Scrivere una funzione che prende in input due array di dimensioni n ed m, rispettivamente, e
restituisce un array composto dalla concatenazione dei due array in modo tale che nelle posizioni
dispari sono contenuti i valori del primo array, e nelle posizioni pari quelle del secondo.
Ed io ho scritto questo:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
int a[50], b[50], c[100], i_a=0, i_b=0, i_c=0, n, m;
printf("Size primo array:  ");
scanf("%d",&n);
for(i_a=0; i_a<n; i_a++){
    printf("Valore %d-simo di a:  ",i_a);
    scanf("%d",&a[i_a]);
}
printf("\n");
printf("Size secondo array   ");
scanf("%d",&m);
for(i_b=0; i_b<m; i_b++){
    printf("Valore %d-simo di b:  ",i_b);
    scanf("%d",&b[i_b]);
}
printf("\n");
while(i_a < n && i_b < m){
    if(i_c%2 ==0) c[i_c++] = b[i_b++];
    else c[i_c++] = a[i_a++];}
while(i_a < n) c[i_c++] = a[i_a++];
while(i_b < m) c[i_c++] = b[i_b++];
printf("\n");
for(i_c=0; i_c<n+m; i_c++){
    printf("Valore %d-simo di c: %d\n",i_c, c[i_c]);
    }
}
Da ancora poco esperto in materia credo che l'errore sia nella stampa del terzo array.
Cos'ho sbagliato?

Vi ringrazio in anticipo!

3 Risposte

  • Re: [C] Fusione di due array - Posti pari e dispari

    Io direi che l'errore è nel riempimento del vettore risultante dalla concatenazione invece..
    Premesso che ho poco tempo ora e che il tuo codice non aiuta il debug a causa dell'indentazione e della scelta delle variabili, penso che un algoritmo di questo tipo possa funzionare:
    (M è la dimensione di v2 ed N quella di v1 e k e j vanno inizializzate a 0)
    
    for(i=0;i<(N+M);i++)
        {
        if( 0 == (i & 1) )
            {
            if(k<M)
                vett_ris[i]=v2[k++];
            else
                vett_ris[i]=v1[j++];
            }
        else
            {
            if(j<N)
                vett_ris[i]=v1[j++];
            else
                vett_ris[i]=v2[k++];
            }
        }
  • Re: [C] Fusione di due array - Posti pari e dispari

    @pascas

    il tuo codice va benissimo ma devi riportare a 0 i contatori dopo la lettura
    for(i_b=0; i_b<m; i_b++)
        {
            printf("Valore %d-simo di b:  ",i_b);
            scanf("%d",&b[i_b]);
        }
    
        i_a=0;         //QUI
        i_b=0;
        i_c=0;
    
        printf("\n");
        while(i_a < n && i_b < m)
        {
            if(i_c%2 ==1) c[i_c++] = b[i_b++];
            else c[i_c++] = a[i_a++];
        }
  • Re: [C] Fusione di due array - Posti pari e dispari

    ale99 ha scritto:


    @pascas

    il tuo codice va benissimo ma devi riportare a 0 i contatori dopo la lettura
    for(i_b=0; i_b<m; i_b++)
        {
            printf("Valore %d-simo di b:  ",i_b);
            scanf("%d",&b[i_b]);
        }
    
        i_a=0;         //QUI
        i_b=0;
        i_c=0;
    
        printf("\n");
        while(i_a < n && i_b < m)
        {
            if(i_c%2 ==1) c[i_c++] = b[i_b++];
            else c[i_c++] = a[i_a++];
        }
    Ma può essere mai che sbaglio sempre per ste scemenze?

    Grazie di cuore ad entrambi per il vostro tempo!
Devi accedere o registrarti per scrivere nel forum
3 risposte