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

    [c++] Inserimento di elementi di un vettore in un altro. Codice errato.

    Ciao a tutti..Non so se questo argomento è già stato trattato in altre discussioni ma dopo una vasta ricerca nel forum non ho trovato alcuna discussione che trattasse lo stesso argomento.
    Nel programma che segue la compilazione avviene correttamente ma il risultato non è quello richiesto dalla traccia. Non riesco a capire il perchè e soprattutto dove ho sbagliato.
    Qual è il modo esatto di scrivere il programma affinchè esso funzioni correttamente?
    Sono nelle vostre mani.. ..Ciao grazie a tutti per la considerazione..
    codice:
    Traccia:
    Siano assegnati in ingresso, da tastiera, due vettori di interi V1 ed V2, ed i loro riempimenti n1 ed n2. 
    Si supponga che gli elementi del vettore V1 siano ordinati in senso crescente.
    Si scriva un programma che inserisca in ordine nel vettore V1 tutti gli elementi del vettore V2. 
    Si stampi quindi il vettore V1 modificato.
    Il programma deve essere articolato in funzioni (ad es.: input, output, inserisci).
    Suggerimento: la funzione inserisci riceve in ingresso n1, V1, n2 e V2 e modifica il vettore V1 ed il suo riempimento.
    Esempio
    INPUT:	n1 =  7		V1 =  1 4 7 9 12 15 22		n2 =  4		V2 =  14 3 5 25
    OUTPUT:	V1 = 1 3 4 5 7 9 12 14 15 22 25 */
    
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    void input_V1(int vett1[],int& riemp1);
    void input_V2(int vett2[],int& riemp2);
    void insert(int vett1[],int vett2[],int& riemp1,int riemp2);
    void output(int vett1[],int riemp1);
    
    
    int main()
    {
        int V1[100],V2[100];
        int n1,n2;
        
        input_V1(V1,n1);
        input_V2(V2,n2);
        insert(V1,V2,n1,n2);
        output(V1,n1);
        
        system("PAUSE");
        return 0;
    }
    //Funzione input V1;
    void input_V1(int vett1[],int& riemp1)
    {
         int i;
         cout<<"\nAssegna valore intero al riempiemnto di V1:\t";
         cin>>riemp1;
         cout<<"\n\nAssegna "<<riemp1<<" valori interi a V1;\n";
         for(i=0;i<riemp1;i++)
         {
                             cin>>vett1[i];
         }
    }
    //Funzione input V2;
    void input_V2(int vett2[],int& riemp2)
    {
         int i;
         cout<<"\nAssegna valore intero al riempiemnto di V2:\t";
         cin>>riemp2;
         cout<<"\n\nAssegna "<<riemp2<<" valori interi a V2;\n";
         for(i=0;i<riemp2;i++)
         {
                             cin>>vett2[i];
         }
    }     
    //Funzione insert;
    void ric_posto(int vett1[],int vett2[],int riemp1,int riemp2,int& i,int& ins);
    void insert(int vett1[],int vett2[],int& riemp1,int riemp2)
    {
         int i,k,j,ins;
         ric_posto(vett1,vett2,riemp2,riemp2,i,ins);
         if(ins)
         {
                for(k=riemp1-1;k>=i;k--)
                {
                                       vett1[k+1]=vett1[k];
                }
                for(j=0;j<riemp2;j++)
                {
                                     vett1[i]=vett2[j];
                }
         }
         else
         {
             for(j=0;j<riemp2;j++)
             {
                                  vett1[i+1]=vett2[j];
             }
         }
         riemp1++;
    }
    void ric_posto(int vett1[],int vett2[],int riemp1,int riemp2,int& i,int& ins)
    {
         i=0; ins=0;
         int j;
         while(i<riemp1 && !ins)
         {
               for(j=0;j<riemp2;j++)
               {
                                    ins=vett1[i]>vett2[j];
               }
               i++;
         }        
         i--;
    }
    //Funzione output;
    void output(int vett1[],int riemp1)
    {
         int i;
         cout<<"\n\n V =  ";
         for(i=0;i<riemp1;i++)
         {
                              cout<<vett1[i]<<"  ";
         }
         cout<<"\n\n";
    }

  2. #2
    Questo codice non ha senso hai due funzioni che fanno la stessa cosa. Ne basta una

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per darti una risposta bisogna prendere il codice, metterlo in un file, compilarlo, eseguirlo e andare passo passo a fare il debug per capire qual e' il problema e cercare una soluzione ...

    Ma un po' di debugging potresti farlo anche tu per dare un'idea di DOVE potrebbe essere il problema ... non pensi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Grazie per l'aiuto..problema risolto..Ciao tutti..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E qual era l'errore?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Mettendo il ciclo for(j=0;j<riemp2;j++) nel main e richiamando in esso la funzione insert si ha il risultato voluto. Lo sbaglio del primo codice postato stava nel fatto che la funzione insert (non essendo ciclata) non ripeteva il processo di creazione posto, di ricerca,e di inserimento per ogni valore di V2.
    Ecco il codice:
    codice:
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    void input_V1(int vett1[],int& riemp1);
    void input_V2(int vett2[],int& riemp2);
    void insert(int vett1[],int vett2[],int& riemp1,int& j);
    void output(int vett1[],int riemp1);
    
    
    int main()
    {
        int V1[100],V2[100];
        int n1,n2;
        int j;
        
        input_V1(V1,n1);
        input_V2(V2,n2);
        for(j=0;j<n2;j++)
        {
                            insert(V1,V2,n1,j);
        }
        output(V1,n1);
        
        system("PAUSE");
        return 0;
    }
    //Funzione input V1;
    void input_V1(int vett1[],int& riemp1)
    {
         int i;
         cout<<"\nAssegna valore intero al riempiemnto di V1:\t";
         cin>>riemp1;
         cout<<"\n\nAssegna "<<riemp1<<" valori interi a V1;\n";
         for(i=0;i<riemp1;i++)
         {
                             cin>>vett1[i];
         }
    }
    //Funzione input V2;
    void input_V2(int vett2[],int& riemp2)
    {
         int i;
         cout<<"\nAssegna valore intero al riempiemnto di V2:\t";
         cin>>riemp2;
         cout<<"\n\nAssegna "<<riemp2<<" valori interi a V2;\n";
         for(i=0;i<riemp2;i++)
         {
                             cin>>vett2[i];
         }
    }     
    //Funzione insert;
    void ric_posto(int vett1[],int vett2[],int riemp1,int& i,int& ins,int& j);
    void insert(int vett1[],int vett2[],int& riemp1,int& j)
    {
         int i,k,ins;
         ric_posto(vett1,vett2,riemp1,i,ins,j);
         if(ins)
         {
                for(k=riemp1-1;k>=i;k--)
                {
                                       vett1[k+1]=vett1[k];
                }
                vett1[i]=vett2[j];
         }
         else
         vett1[i+1]=vett2[j];
         riemp1++;
    }
    void ric_posto(int vett1[],int vett2[],int riemp1,int& i,int& ins,int& j)
    {
         i=0; ins=0;
         while(i<riemp1 && !ins)
         {
                       ins=vett1[i]>vett2[j];
                       i++;
         }
         i--;
    }
    //Funzione output;
    void output(int vett1[],int riemp1)
    {
         int i;
         cout<<"\n\n V =  ";
         for(i=0;i<riemp1;i++)
         {
                              cout<<vett1[i]<<"  ";
         }
         cout<<"\n\n";
    }
    Ciao e grazie ancora..Blind

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.