Svolgiamo insieme Ordinare alfabeticamente e cancellare nomi uguali con struct

Quentin Tarantino

Administrator
Utente Premium
7 Gennaio 2017
18
3
3
Ho un problema legato ad una funziona che fino alla scorsa compilazione non mi dava problemi mo che ho aggiunto una nuova funzione mi da problemi che non capisco
Lo scopo del mo programma è quello di prendere da file dei nomi e dei numeri di prof e ordinarli e eliminare quelli simili.

Questo è il mio file:

chianese
3321
moscato
3345
picariello
2134
moscato
3345

Questa è la mia libreria:

C++:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

using namespace std;

#define STR_MAX 100
#define VET_MAX 100

typedef char Stringa [STR_MAX];

typedef struct Lista{
  
   Stringa Cognome;
   int Numero;
   Lista *next;
  
}Professore;

typedef Lista* Pnodo;
typedef Professore Docenti [VET_MAX];

void carica_file(Stringa, fstream &f, Docenti , int *);
void stampa_file( Docenti, int);
void controllo_ordine(Docenti, int);
void confronto(Stringa , Stringa , int *);
void scambio(Docenti, int);
void elimina_uguali(Docenti, int);
void cancella_nodo(Stringa , Pnodo &)

Funzioni

C++:
 #include "alfabetico.h"

void carica_file(Stringa nome, fstream &f, Docenti professore, int *d){
  
   int i=0;
  
   cout<<"\n Inserisci nome del file che vuoi caricare :";
   cin.getline(nome,STR_MAX-1, '\n');
   f.open(nome, ios::in);
   if(!f){
      
      cout<<"\n Errore durante l'inserimento del nome del file...";
      exit(1);
      
   }else{
      
      while(!f.eof()){
        
         f>>professore[i].Cognome;
         f>>professore[i].Numero;
         i++;
      }
      i--;
   }

   *d=i;   
   f.close();
}

void stampa_file( Docenti insegnanti, int dimensione){
  
   cout<<"\n Stampo il file :\n";
   for(int i=0; i<dimensione; i++){
      
      cout<<insegnanti[i].Cognome<<endl;
      cout<<insegnanti[i].Numero<<endl;
      
   }
  
}

void controllo_ordine( Docenti professori, int size){
  
   Professore scambio;
   int risult, cont;

  
   for(int i=0; i<size; i++){
      
      for(int j=i+1; j<size; j++){

         risult=strcmp(professori[i].Cognome, professori[j].Cognome);
        
            if(risult>0){
            
            scambio=professori[i];
            professori[i]=professori[j];
            professori[j]=scambio;
            
               }else{
      
            cont++;
            risult=cont;
      
         }
      }
        
   }
  
   if(risult==size){
      
      cout<<"\n L'elenco è già ordinato alfabeticamente \n";
      
   }
  
   stampa_file(professori, size);
   cout<<"\n Controllo se ci sono elementi uguali: \n";
   elimina_uguali(professori, size);
   stampa_file(professori, size);
  
}

void elimina_uguali(Docenti prof, int s){
  
Pnodo L1;
int ris;
  
for(int i=0; i<s; i++){
      
   for(int j=i+1; i<s; j++){
  
      ris=strcmp(prof[i].Cognome, prof[j].Cognome);
      
         if(ris==0){
        
            cancella_nodo(prof[j].Cognome,Pnodo &L1);
                    
         }
              
      }
            
   }   
        
}
      
void cancella_nodo(Stringa cognome, Pnodo &n1){

Pnodo Temp;
      
   if(n1!=NULL){

      if(n1->Cognome==prof[j].Cognome){
                        
         Temp=n1;
         n1=n1->next;
         delete Temp;
         }else {
        
            cancella_nodo(Stringa cognome, Pnodo &n);
        
         }
      }
}

C++:
#include "alfabetico.h"

int main(){
  
   Stringa nome_file;
   fstream file;
   Docenti dati;   
   int dim;
  
  
   carica_file(nome_file, file, dati, &dim);
   stampa_file(dati, dim);
   controllo_ordine(dati, dim);

}


Immagine.png

Perchè? Perchè?
 
Ultima modifica:

Quentin Tarantino

Administrator
Utente Premium
7 Gennaio 2017
18
3
3
Risolto ma poi mi esce questo

Funzioni

C++:
void elimina_uguali(Docenti prof, int s){
  
Pnodo L1;
int ris;
  
for(int i=0; i<s; i++){
      
   for(int j=i+1; i<s; j++){
  
      ris=strcmp(prof[i].Cognome, prof[j].Cognome);
      
         if(ris==0){
        
            cancella_nodo(prof[j].Cognome,&j, Pnodo L1);
                    
         }
              
      }
            
   }   
        
}
      
void cancella_nodo(Docenti insegnante,int *j, Pnodo &n1){


Pnodo Temp;
      
   if(n1!=NULL){

      if(n1->Cognome==insegnante[j].Cognome){
                        
         Temp=n1;
         n1=n1->next;
         delete Temp;
         }else {
        
            cancella_nodo(Docenti insegnante,int &j, Pnodo &n1);
        
         }
      }
}

Libreria

C++:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

using namespace std;

#define STR_MAX 100
#define VET_MAX 100

typedef char Stringa [STR_MAX];

typedef struct Lista{
    
    Stringa Cognome;
    int Numero;
    Lista *next;
    
}Professore;

typedef Lista* Pnodo;
typedef Professore Docenti [VET_MAX];

void carica_file(Stringa, fstream &f, Docenti , int *);
void stampa_file( Docenti, int);
void controllo_ordine(Docenti, int);
void confronto(Stringa , Stringa , int *);
void scambio(Docenti, int);
void elimina_uguali(Docenti, int);
void cancella_nodo(Docenti ,int , Pnodo &);

3.png
Non so come andare avanti
 

Seguici su Facebook