Creazione terzo vettore

di il
22 risposte

Creazione terzo vettore

Ciao, devo creare un programma che dati due vettori di interi di dimensione N, ne costruisca un terzo di dimensione 2N i cui elementi di posizione pari siano gli elementi del primo vettore e gli elementi di posizione dispari siano gli elementi del secondo vettore.
Ho provato a farlo ma non mi funziona bene, questo è il codice fatto:

#include<stdio.h>
#define N 4
#define M 2*N

void terzoVettore(int vett1[], int vett2[]){
	int j, i, doppioVett1[M], doppioVett2[M];
	
	printf("Gli elementi del terzo vettore sono: ");
	for(i=0;i<N;i++){
		if(i%2==0){
			doppioVett1[j]=vett1[i];
			printf("%d\n",doppioVett1[j]);
		}else{
			doppioVett2[j]=vett2[i];
			printf("%d\n",doppioVett2[j]);
		}
	}
}

main(){
	
	int vett1[N], vett2[N],i, j;
	
	printf("Inserisci i numeri del primo vettore: ");
	for(i=0;i<N;i++){
	scanf("%d",&vett1[i]);
	}
	printf("Inserisci i numeri del secondo vettore:");
	for(i=0;i<N;i++){
	scanf("%d",&vett2[j]);
	}
	
	terzoVettore(vett1, vett2);
	
}
penso ci sia un problema con le posizioni, cioè nel terzo vettore, che mi crea solo di 4 posizioni, mi mette nelle posizioni dispari(la prima e la terza) i numeri del primo vettore (solo i primi 2), mentre nella seconda posizione (quindi la prima pari) mi mette il quarto numero del secondo vettore (sono un po' confuso ahah), mentre nella quarta posizione mi mette sempre 0. Non riesco a capire l'errore, qualcuno può darmi una mano? Grazie in anticipo :))

22 Risposte

  • Re: Creazione terzo vettore

    Ma chiede di usare un terzo vettore di lunghezza doppia, perché ne hai usati di due?
    Tieni d'occhio quanto vale j.
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Ma chiede di usare un terzo vettore di lunghezza doppia, perché ne hai usati di due?
    Tieni d'occhio quanto vale j.
    Mi chiede di creare due vettori di lunghezza N e un terzo vettore di lunghezza 2N con i primi due vettori.
    Pensi sia j il problema?
  • Re: Creazione terzo vettore

    Appunto, chiede UN terzo vettore, tu ne hai usati due (doppioVett1 e doppioVett2).
    Usi i e j in un ciclo, ma incrementi solo i.
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Appunto, chiede UN terzo vettore, tu ne hai usati due (doppioVett1 e doppioVett2).
    Usi i e j in un ciclo, ma incrementi solo i.
    ah vero, non so perché ne ho fatti due in effetti ahah. Ho sistemato questa cosa e messo l'incremento di j alla fine di ogni if, ma non è cambiato nulla :((
  • Re: Creazione terzo vettore

    Posso vedere?
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Posso vedere?
    certo!
    
    void terzoVettore(int vett1[], int vett2[]){
    	int j, i, doppioVett[M];
    	
    	printf("Gli elementi del terzo vettore sono: ");
    	for(i=0;i<N;i++){
    		if(i%2==0){
    			doppioVett[j]=vett1[i];
    			printf("%d\n",doppioVett[j]);
    			j++;
    		}else{
    			doppioVett[j]=vett2[i];
    			printf("%d\n",doppioVett[j]);
    			j++;
    		}
    	}
    }
  • Re: Creazione terzo vettore

    Beh intanto j non è inizializzato.
    Per caricare in secondo vettore, devi fare M iterazioni del ciclo, non N.
    Ti conviene iterare su j, che è il contatore di doppioVett.
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Beh intanto j non è inizializzato.
    Per caricare in secondo vettore, devi fare M iterazioni del ciclo, non N.
    Ti conviene iterare su j, che è il contatore di doppioVett.
    giusto giusto.
    Con iterare su j intendi mettere j nel ciclo for al posto della i?
  • Re: Creazione terzo vettore

    Sì, e controllare la parità di j.
    Attenzione che hai sbagliato anche il main. Anche lì usi un j che non aumenta nel secondo ciclo (stavo impazzendo anch'io).
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Sì, e controllare la parità di j.
    Attenzione che hai sbagliato anche il main. Anche lì usi un j che non aumenta nel secondo ciclo (stavo impazzendo anch'io).
    ah stai provando a farlo pure tu? scusa per il disturbo ahah. Comunque ancora non mi funziona, pure mettendo la j al posto della i nel ciclo (mi crea il terzo vettore con tutti 0), e si, sono stupido, grazie per avermi fatto notare la j nel main ahah. E cambiando la i con j, non c'è più bisogno di incrementare poi alla fine dell'if la j giusto?
  • Re: Creazione terzo vettore

    La j già la incrementi nel for, però una volta peschi da un vettore e una volta nell'altro, quindi devi sapere a che punto sei arrivato negli altri due.
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    La j già la incrementi nel for, però una volta peschi da un vettore e una volta nell'altro, quindi devi sapere a che punto sei arrivato negli altri due.
    capito capito, grazie, pure se ancora non sono riuscito a risolvere :c
    
    #include<stdio.h>
    #define N 2
    #define M 2*N
    
    void terzoVettore(int vett1[], int vett2[]){
    	int j, i, doppioVett[M];
    	
    	printf("Gli elementi del terzo vettore sono: ");
    	for(j=0;j<M;j++){
    		if(j%2==0){
    			doppioVett[j]=vett1[i];
    			printf("%d\n",doppioVett[j]);
    		}else{
    			doppioVett[j]=vett2[j];
    			printf("%d\n",doppioVett[j]);
    		}
    	}
    }
    
    main(){
    	
    	int vett1[N], vett2[N],i, j;
    	
    	printf("Inserisci i numeri del primo vettore: ");
    	for(i=0;i<N;i++){
    	scanf("%d",&vett1[i]);
    	}
    	printf("Inserisci i numeri del secondo vettore:");
    	for(j=0;j<N;j++){
    	scanf("%d",&vett2[j]);
    	}
    	
    	terzoVettore(vett1, vett2);
    }
    
    si nota che sono alle prime armi con C? ahah
  • Re: Creazione terzo vettore

    Non è il C. Devi fermarti un attimo a vedere cosa fa questo programma. Disegnati i vettori e tieni, prova a fare qualche iterazione a mano su carta (prima di imparare ad usare il debugger) e vedi quanto valgono gli undici. Intanto se i non aumenta mai, prendi sempre vett(0) da entrambi.
    Non andare a tentativi.
  • Re: Creazione terzo vettore

    Alexv ha scritto:


    Non è il C. Devi fermarti un attimo a vedere cosa fa questo programma. Disegnati i vettori e tieni, prova a fare qualche iterazione a mano su carta (prima di imparare ad usare il debugger) e vedi quanto valgono gli undici. Intanto se i non aumenta mai, prendi sempre vett(0) da entrambi.
    Non andare a tentativi.
    ma il fatto è che nella mia testa dovrebbe funzionare così, e il fatto che non funzioni mi manda in confusione ahha. E in che senso quanto valgono gli undici? comunque ho provato a mettere anche l'incremento ma non va. E scusa non funziona anche così la programmazione? cioè sbagliare anche tante volte alla fin fine ci sta, basta capire che si sbaglia e non rifarlo (pure se evidentemente io non lo sto capendo ahahaha)
Devi accedere o registrarti per scrivere nel forum
22 risposte