Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20

    [C++]Copia somma elementi omologhi di due vettori se > k intero in un terzo vettore

    In output ho dei valori strani...che ho sbagliato?...
    codice:
    /*
    Siano dati in ingresso, da file o da tastiera, il riempimento n ed i valori di due vettori V1 e V2 di interi. 
    Sia dato inoltre un ulteriore intero k.
    Si scriva un programma che verifichi, per ogni coppia di elementi omologhi di V1 e V2, se la loro somma sia maggiore di k. 
    In caso affermativo, si copi il valore della loro somma in un nuovo vettore V3. 
    Si strutturi il programma in opportuni sottoprogrammi.
    Esempio:
    INPUT:	n =  6 		V1  =    7 15 19 12  2  6 	V2  =    2  9  7 25  8  6 	k = 11
    OUTPUT:	V3 = 24 26 37 12
    */
    
    #include<iostream>
    using namespace std;
    #include<stdlib.h>
    
    //Prototipi delle funzioni
    void input(int &n,int &k,int v1[],int v2[]);
    void somma(int n,int k,int v1[],int v2[],int v3[]);
    void output(int n, int v3[]);
    
    int main()
    {
        //Dichisrazioni variabili
        int n,k;
        int v1[100];
        int v2[100];
        int v3[100];
        
        //Chiamate delle funzioni
        input(n,k,v1,v2);
        somma(n,k,v1,v2,v3);
        output(n,v3);
        
        
        cout<<"\n\n";
        
        
        
        system("PAUSE");
        return 0;
    }
    
    void input(int &n,int &k,int v1[],int v2[])
    {
        int i;
        int j;
        
        cout<<"Assegna valore intero ad n elementi dei vettori\n";
        cin>>n;
        
        cout<<"Assegna "<<n<<" valori interi al vettore V1\n";
        for(i=0;i<n;i++)
        {
            cin>>v1[i];
        }      
        
         cout<<"Assegna "<<n<<" valori interi al vettore V2\n";
        for(i=0;i<n;i++)
        {
            cin>>v2[i];
        }      
         cout<<"Assegna valore intero a k\n";
        cin>>k;
    }
    
    void somma(int n,int k,int v1[],int v2[],int v3[])
    {
        int i;
        int som[100];
        for(i=0;i<n;i++)
        {
          som[i] = v1[i]+ v2[i];
        }    
        for(i=0;i<n;i++)
        {
          if(som[i]>k)
          {
           v3[i] = som[i];
          }
        }      
    }
    
    void output(int n, int v3[])
    {
        int i;
        cout<<"\nGli elementi del nuovo vettore v3 sono\n";
        for(i=0;i<n;i++)
        {
            cout<<v3[i]<<"\n";
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20
    Per facilitarvi il compito.. vi copio il codice fondamentale

    codice:
    void somma(int n,int k,int v1[],int v2[],int v3[])
    {
        int i;
        int som[100];
        for(i=0;i<n;i++)
        {
          som[i] = v1[i]+ v2[i];
        }    
        for(i=0;i<n;i++)
        {
          if(som[i]>k)
          {
           v3[i] = som[i];
          }
        }      
    }

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    codice:
    void somma(int n,int k,int v1[],int v2[],int v3[])
    {
        int i;
        int som[100];
        for(i=0;i<n;i++)
        {
          som[i] = v1[i]+ v2[i];
        }    
        for(i=0;i<n;i++)
        {
          if(som[i]>k)
          {
           v3[i] = som[i];
          }
        }      
    }
    L'errore è commesso qui.
    Poiché non puoi sapere a priori quanti saranno i numeri con somma maggiore di k, non puoi usare questo codice.
    Con questo listato infatti, il programma lavora cosi:

    V1 1 8
    V2 2 8
    K 11 11

    V3 ?? 16

    Come puoi vedere da questo penoso esempio, se v1[i]+v2[i] è minore di k, som[i] e v3[i] rimangono "indefiniti" ed è quindi normale che ti stampi valori strampalati.
    Prova quest'altro codice
    codice:
    void somma(int n,int k,int v1[],int v2[],int v3[])
    {
        int i;
        int t;
        t = 0;
    
        for(i=0;i<n;i++)
        {
          if(v1[i]+v2[i]>k)
          {
           v3[t++] = v1[i]+v2[i];
          }
        v3[t++] = '\0';
        }      
    }
    In questo modo la numerazione del vettore finale è "separata" da quella degli elementi.
    L'ultima riga di code serve a troncare la lettura del vettore (100 elementi sono troppi.)

    Naturalmente anche la funzione stampa va modificata (il ciclo for deve avere come valore limite strlen(v3) )

    Si lo so, non mi so spiegare bene, comunque se non hai capito posta qui.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

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 © 2024 vBulletin Solutions, Inc. All rights reserved.