[c++] eliminare num che si ripetono+di una volta nel vettore

di Anonimizzato11625 il
4 risposte
Ciao a tutti e buon 2013!!
Ho un problema con il programma che deve eliminare i numeri che si ripetono più di una volta nel vettore.
Ho pensato a una soluzione del genere ma non ho capito perchè la funzione elimina_occorrenze non fa nulla.

#include<iostream>
#include<cstdlib>

using namespace std;

#define N 30
typedef int vettore [N];
vettore v;
void inserimento(vettore,int&);
void occorrenze(vettore,int&);
void elimina_occorrenze(vettore,int&,vettore,int&);

void inserimento(vettore v,int&num_elem){
     cout<<"\n quanti elementi vuoi inserire?";
     cin>>num_elem;
     int i;
     if(num_elem<=N){
                     for(i=0;i<num_elem;i++){
                                             cout<<"n\l'elemento numero" << i+1<< " e' ";
                                             cin>>v[i];}
              cout<<"\ il vettore v e' uguale a [";        
     for(i=0;i<num_elem;i++){
                             cout<<" "<<v[i];
                             }
     cout<<"]";                               
     }
     else cout<<"\n ERRORE!!";
     cout<<endl;
     }
     
  void occorrenze(vettore v,int&num_elem){
     int i,j,k;
     int trovato;
     int occorrenze;
     int nuovi_elem=0;
     
     for(i=0;i<num_elem;i++){
                             trovato=0;
         for(j=0;j<i && trovato==0;j++){                    
          if(v[j]==v[i]) trovato=1;                  
          }
          if(trovato==0){
                         occorrenze=0;
                         for(k=0;k<num_elem;k++){
                          if(v[k]==v[i]) occorrenze++; 
                                               }
          cout<<"\n il valore" << v[i] << "si ripete "<< occorrenze << "volte"<<endl;               
                                             if(occorrenze>1)
          cout<<"\n il valore"<<v[i]<<"va eliminato"<<endl;                      
                                                 
                                                 }
                                                 }
                         
                                                 }
                         
                         
                               
void elimina_occorrenze(vettore v,int&num_elem,vettore uscita,int&elem_uscita){
          int i;
          int occorrenze;
          int nuovi = 0;
          for (int i = 0; i < num_elem; i++) {
               if(occorrenze == 1){
                        uscita[nuovi] = v[i];
                        nuovi++;
                        cout<<nuovi<<endl;
                                   }
                                   }

    elem_uscita = nuovi;
}      
       
     
  int main(){
    vettore v;
    vettore uscita;
    int num_elem;
    int elem_uscita;
    int i;
    inserimento(v,num_elem);
    occorrenze(v,num_elem);
    elimina_occorrenze(v,num_elem,uscita,elem_uscita);
  cout << "Il nuovo vettore e': \n";
    for(i = 0; i < elem_uscita; i++) {
        cout << "  " << uscita[i] << "\n";
    }
    system("pause");
    }    

Mi aiutate a capire perchè?
Grazie

4 Risposte

  • Quanto vale occorrenze? E perché fai:
    
    int i;
    ...
    for (int i = ...)
    
  • Non capisco.Su cosa devo ragionare?
  • In elimina_occorrenze stai usando la variabile occorrenze senza che tu le abbia dato un valore.
    Inoltre quella doppia dichiarazione di int i potrebbe generare confusione nel caso tu intenda espandere la funzione.
  • La doppia dichiarazione di i è stata una distrazione, l'ho corretta.
    Che valore dovrei dare ad occorrenze?
    La funzione occorrenze mi dice quante volte si ripete un elemento nel vettore.
    Con la funzione elimina occorenze non gli sto dicendo che se un elemento si ripete una sola volta deve darmi come vettore di uscita un vettore composto da questi elementi che compaiono nel vettore una volta sola?
Devi accedere o registrarti per scrivere nel forum
4 risposte