Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Nella funzione controllo_ordine devi inizializzare cont

    int risult, cont=0;

    e nella funzione elimina_uguali devi correggere la for in questo modo

    for (int j = i + 1; j<s; j++) {
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #2
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Nella funzione controllo_ordine devi inizializzare cont

    int risult, cont=0;

    e nella funzione elimina_uguali devi correggere la for in questo modo

    for (int j = i + 1; j<s; j++) {
    Ancora nessun risultato non mi stampa niente rimane sempre con Controllo se ci sono elementi uguali: e non mi stampa niente

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da TheBlackWolf Visualizza il messaggio
    Ancora nessun risultato non mi stampa niente rimane sempre con Controllo se ci sono elementi uguali: e non mi stampa niente
    Adesso qual è il contenuto del file di testo e il codice che utilizzi? Mostra nuovamente tutto per essere sicuri di cosa stai utilizzando.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Adesso qual è il contenuto del file di testo e il codice che utilizzi? Mostra nuovamente tutto per essere sicuri di cosa stai utilizzando.

    Questo è il file di testo professore.txt

    rossi
    3321
    lorenzo
    3345
    ferrante
    2134
    lorenzo
    3345

    Libreria

    codice:
    #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(const Docenti,const int);
    void controllo_ordine(Docenti, int);
    void confronto(Stringa , Stringa , int *);
    void scambio(Docenti, int);
    void elimina_uguali(Docenti, int);
    
    void cancella_nodo(Stringa ,int , Pnodo &);


    Funzioni:

    codice:
    #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(const Docenti insegnanti,const 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=0;
    
    
        
        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";
            
        }
            cout<<"\n L'elenco è ora ordinato alfabeticamente \n";
        stampa_file(professori, size);
        cout<<"\n Controllo se ci sono elementi uguali nel caso li elimino \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; j<s; j++) {
        
            ris=strcmp(prof[i].Cognome, prof[j].Cognome);
            
                if(ris==0){
                
                    cancella_nodo(prof[j].Cognome,j, L1);
                                
                }
                        
            }
                    
        }    
                
    }
            
    void cancella_nodo(Stringa insegnante,int j, Pnodo &n1){
    
    
    
    
    Pnodo Temp;
            
        if(n1!=NULL){
    
    
            if(n1->Cognome==insegnante){
                                    
                Temp=n1;
                n1=n1->next;
                delete Temp;
                }else {
                
                    cancella_nodo(insegnante, j, n1);
                
                }
            }
    }


    Main

    codice:
    #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);
    
    
    }
    1.png
    2.png
    3.png

    Mi stampa il file già eliminando il cognome e il numero uguale perchè?Lorenzo dovrebbe essere stampato due volte prima quando stampo in generale la struct dopo averla caricata e poi dopo quando l'ho ordinata solo in elimina uguali non ci dovrebbe essere.
    #strangethings #sottosopra
    Ultima modifica di TheBlackWolf; 09-07-2018 a 14:48

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Per leggere correttamente il file di testo, è necessario che all'ultima riga (dove c'è il 3345) si vada a capo. Quindi, se usi il notepad, l'ultima riga la devi scrivere

    3345

    e tasto Invio.

    Fatto questo, il codice leggerà correttamente l'ultimo nominativo ma ci sarà un errore nella funzione

    cancella_nodo

    quando verrà eseguita con il parametro L1 che non ha nessun valore ... Come intendevi utilizzare L1 all'inizio chiamando la cancella_nodo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Per leggere correttamente il file di testo, è necessario che all'ultima riga (dove c'è il 3345) si vada a capo. Quindi, se usi il notepad, l'ultima riga la devi scrivere

    3345

    e tasto Invio.

    Fatto questo, il codice leggerà correttamente l'ultimo nominativo ma ci sarà un errore nella funzione

    cancella_nodo

    quando verrà eseguita con il parametro L1 che non ha nessun valore ... Come intendevi utilizzare L1 all'inizio chiamando la cancella_nodo?
    Hai ragione non punta a niente quel l1.
    Scusami se creo un array di strcut alla fine non sarebbe come creare implicitamente una lista? Un array non ha indirizzi di memoria consecutivi quindi non potrei puntare a quell'indirizzo in cui è collocata quella struct e eliminarla? C'è un modo?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No, con una lista ti basta gestire i puntatori per eliminare un nodo, per l'array devi "spostare" tutte le informazioni che stanno dopo l'elemento su in memoria. Non è la stessa cosa.

    Poi, se l'esercizio prevede le liste, non puoi usare gli array.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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