Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [c++] Ottenere un vettore partendo da due vettori

    Salve ragazzi. La traccia di un esercizio mi chiede di allocare dinamicamente tutti i vettori che uso. In particolare devo dare la possibilità all'utente di inserire due vettori di dimensione N.
    Successivamente devo stampare a video il vettore che si ottiene prendendo un elemento dal primo vettore e uno dal secondo.
    VI RICORDO CHE è IMPORTANTE L'ALLOCAZIONE DINAMICA.
    Esempio:
    vettore 1: 0 1 2
    vettore 2: 0 1 2
    vettore unito: 001122

    E' giusto svolgere l'esercizio in questo modo?
    codice:
    #include <iostream>
    #include <string>
    #define NUMERO 2
    using namespace std;
    
    int main() {
    int* VETTORE1 = new int[NUMERO];
    int* VETTORE2 = new int[NUMERO];
    int* VETTORE_MERGE = new int[2*NUMERO];
    
    for(int i=0; i<NUMERO; i++) {
    cout << "inserisci l'elemento di indice " << i << " nel vettore 1";
    cin >> VETTORE1[i];
    }
    for(int j=0; j<NUMERO; j++) {
    cout << "inserisci l'elemento di indice " << j << " nel vettore 2";
    cin >> VETTORE2[j];
    }
    for(int i=0; i<NUMERO; i++) {
    cout << VETTORE1[i];
    }
    cout << endl;
    for(int i=0; i<NUMERO; i++) {
    cout << VETTORE2[i];
    }
    for(int i=0; i<(NUMERO*2); i++) {
    VETTORE_MERGE[i] = 0;
    }
    for(int k=0; k<(NUMERO*2); (k++))
    { 
    	if((k%2) != 0) { } else 
    	{
    	VETTORE_MERGE[k] = VETTORE1[k];
    	VETTORE_MERGE[k + 1] = VETTORE2[k];
    	}
    }
    	cout << endl;
    	cout << "MERGE";
    for(int z=0; z<(NUMERO*2); z++) {
    cout << VETTORE_MERGE[z];
    }
    system("pause");
    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    manca un k++ nel for..

    copiando 2 valori alla volta devi ciclare saltando di 2 in 2.. e stando attento a non sforare se gli elementi sono dispari

  3. #3
    c'è il k++ nel for solo che per sbaglio è chiuso tra parentesi.
    Gli elementi non possono essere mai dispari.
    Se gli array sono composti da un numero dispari di termini la somma è pari.
    Se gli array sono composti da un numero pari di termini la somma è pari.
    Gli array devono essere composti dello stesso numero di termini.

    Ho chiesto se è giusto perchè se lo compilo i due array di partenza vengono memorizzati correttamente. Mentre quello unito negli ultimi due termini mi da dei valori per esempio
    -290292 e -392248.
    Provate a compilarlo non basta fare altro che copia incolla.
    Grazie

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ciao...ho dato uno sguardo al programma...e c'era la parte del merge che mi metteva qualche dubbio....tipo:
    codice:
    for(int k=0; k<(NUMERO*2); (k++))
    { 
    	if((k%2) != 0) { } else 
    	{
    	VETTORE_MERGE[k] = VETTORE1[k];
    	VETTORE_MERGE[k + 1] = VETTORE2[k];
    	}
    }
    secondo me non puoi usare lo stesso indice k sia per i VETTORE1 e VETTORE2 (che hanno dimensione pari a NUMERO) sia per il vettore VETTORE_MERGE ( che invece ha dimensione 2*NUMERO!! ); così facendo quando k sarà maggiore di NUMERO e vai a fare VETTORE1[k], vai ad accedere in zone d memoria che non c'entrano niente con VETTORE1!!
    Io ho provato a fare qualche modifica e sembra funzionare...posto sotto il codice del ciclo for modificato:
    codice:
    for(int k=0; k<(NUMERO*2); (k++))
    { 
    	if( f == 0 ) {
    	    VETTORE_MERGE[k] = VETTORE1[k1++];
    	    f = !f;
         }
    	else {    
            VETTORE_MERGE[k] = VETTORE2[k2++];
            f = !f;
            
    	}
    }
    Uso 1 indice per ogni vettore ( anche se se ne potrebbe usare solo 1 mi sà) e poi uso la variabile f facendola commutare da 1 a 0....che se nn ricordo male si chiama operazione di toggle!!...ma cmq poco importa!!...se ci sono problemi....fai un fischio!! ciao
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    io dicevo che ne serve un altro di k++ oltre a quello nel for.. infatti per come hai fatto tu sovrascrivevi sempre un valore ad ogni ciclo..

  6. #6
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    infatti per come hai fatto tu sovrascrivevi sempre un valore ad ogni ciclo..
    si ma con queste parole a chi ti riferisci?? perchè nn mi pare che si sovrascriva qualcosa!!!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il ciclo finale dovrebbe essere semplicemente

    codice:
    int j, k;
    for(j=k=0; k<(NUMERO*2); k+=2, j++)
    { 
        VETTORE_MERGE[k] = VETTORE1[j];
        VETTORE_MERGE[k+1] = VETTORE2[j];
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    si....bhè si poteva sicuro semplificare molto...però in quel modo mi sembrava più chiaro!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da MrX87
    però in quel modo mi sembrava più chiaro!
    De gustibus ...

    A sembra il contrario ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    come ha scritto oregon il ciclo for deve avanzare di due in due (k+=2) e non di uno..
    che è quello che ti avevo detto io prima..
    se avanzi di uno scrivi nella posizione k e k + 1 ma il giro successivo K = k + 1 e quindi sovrascriverai tale posizione che già avevi aggiornato nell'iterazione precedente..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.