Problema con la conta di elementi ripetuti

di il
4 risposte

Problema con la conta di elementi ripetuti

 //sia dato un file di testo costituito da una sequenza di nomi:stampare a video i nomi che si ripetono di più


#include<iostream>
#include<string.h>
#define N 5
using std::cin;
using std::cout;

typedef struct struttura { char nomi[N];
                           int conta;
                                        }struttura;
                                        
                                        

 void input(int n,struttura *insieme)
                 { int x;
				     for(x=0;x<n;x++)
					    { cout<<"\n inserire la prima parola :   ";
					      cin>>insieme[x].nomi;
						 } 
				 
				 
				 }
				 
				 
				 

void conta(int n,struttura *insieme)
                                       { int i,y,s=0,t;
                                          for(y=0;y<n;y++)
                                             {  for(i=n;i>0;i--)
                                                   {t=strcmp(insieme[i].nomi,insieme[y].nomi);
												      if(t==0)
												       {++s;
												       	 
													   }
													   
												    
												  }
												  
										       insieme[y].conta=s;
										
												}
											 }
                                         
									   
  
  
  
  
  void stampa(int n,struttura *insieme)
                                        {int w;
                                          cout<<"\n di seguito si elencano i nomi che sono stati ripetuti e la loro frequenza: \n";
                                           for(w=0;w<n;w++)
                                              { if(insieme[w].conta>1)
                                                  { cout<<"\n"<<insieme[w].nomi<<"   ripetuto    "<<insieme[w].conta<<"   volte \n";
												  }
											  }
										}





int main()
           { int n;
             
             cout<<"\n quante parole si vogliono inserire ?      ";
             cin>>n;
             struttura insieme[n];
             input(n,insieme);
             conta(n,insieme);
             stampa(n,insieme);
		   }  

la funzione conta dovrebbe restituirmi una struttura costituita dai nomi ed un vettore di numeri che rappresenta quante volte la parola è stata ripetuta..purtroppo non riesco a capire perchè nell'exe mi escono numeri a caso..come potrei risolvere??cosa ho sbagliato a livello logico??

4 Risposte

  • Re: Problema con la conta di elementi ripetuti

    Chiarisci meglio. Cosa c'è nei dati? Dove? Cosa dovrebbe fare il codice? In quale parte?
  • Re: Problema con la conta di elementi ripetuti

    Comunque il problema è ovviamente nella funzione conta.

    Devi modificare il codice in modo che tutte e due le for controllino tutte le parole dalla prima all'ultima (da 0 a <n).
    Il controllo lo farai tra le stringhe con indici y e i diversi tra loro (in modo da non confrontare la stringa con se stessa).
    Inoltre il contatore della prima stringa indicizzata con y dovrà partire da 1 e non da 0. E il contatore della stringa con indice i, se trovata uguale ad una precedente, dovrà essere resettato a 0. Solo le stringhe con contatore a 1 dovranno essere esaminate.
  • Re: Problema con la conta di elementi ripetuti

     //sia dato un file di testo costituito da una sequenza di nomi:stampare a video i nomi che si ripetono di più
    
    
    #include<iostream>
    #include<string.h>
    #define N 5
    using std::cin;
    using std::cout;
    
    typedef struct struttura { char nomi[N];
                               int conta;
                                            }struttura;
                                            
                                            
    
     void input(int n,struttura *insieme)
                     { int x;
    				     for(x=0;x<n;x++)
    					    { cout<<"\n inserire la prima parola :   ";
    					      cin>>insieme[x].nomi;
    						 } 
    				 
    				 
    				 }
    				 
    				 
    				 
    
    void conta(int n,struttura *insieme)
                                           { int i,y,s=0,t;
                                              for(y=1;y<n;y++)
                                                 {  for(i=0;i<n;i++)
                                                       {t=strcmp(insieme[i].nomi,insieme[y].nomi);
    												      if(t==0)
    												       {++s;
    												       	i=0; 
    													   }
    													   
    												    
    												  }
    												  
    										       insieme[y].conta=s;
    										
    												}
    											 }
                                             
    									   
      
      
      
      
      void stampa(int n,struttura *insieme)
                                            {int w;
                                              cout<<"\n di seguito si elencano i nomi che sono stati ripetuti e la loro frequenza: \n";
                                               for(w=0;w<n;w++)
                                                  { if(insieme[w].conta>1)
                                                      { cout<<"\n"<<insieme[w].nomi<<"   ripetuto    "<<insieme[w].conta<<"   volte \n";
    												  }
    											  }
    										}
    
    
    
    
    
    int main()
               { int n;
                 
                 cout<<"\n quante parole si vogliono inserire ?      ";
                 cin>>n;
                 struttura insieme[n];
                 input(n,insieme);
                 conta(n,insieme);
                 stampa(n,insieme);
    		   }
    adesso addirittura in console mi si blocca: dove ho sbagliato ad applicare i tuoi suggerimenti?
  • Re: Problema con la conta di elementi ripetuti

    No ... non hai capito ...

    Il contatore di cui parli è .cont nella struttura.

    La variabile i non deve essere messa a 0.

    I due cicli devono essere uguali da 0 a <n

    Il confronto va fatto solo se i!=j

    Comincia con l'inserire all'inizio della funzione un ciclo che pone l'elemento cont di tutto il vettore di strutture uguale a 1.
    Così indichi che tutte le parole compaiono almeno una volta.
Devi accedere o registrarti per scrivere nel forum
4 risposte