Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    2

    [C] Problema ordinamento struttura

    Salva a tutti sono nuovo nel forum. Mi servirebbe una mano nel capire quali errori ho commesso nel codice che ho realizzato per un'esercitazione per esame universitario. La traccia del problema richiedeva, una volta definita la struttura e averla popolata, di effettuare l'ordinamento in base al livello degli impiegati. Fino alla creazione e al popolamento della tabella il programma funziona, però poi arrivato all'ordinamento il programma termina dandomi errore. Il compilatore tuttavia non mi segnala alcun errore. Il problema dunque risiede nel modo in cui uso le istruzioni nella procedura ordina (o comunque nel modo in cui passo i parametri), però facendo vari tentativi non sono ancora riuscito a comprendere bene come usare i comandi per lo scambio di elementi all'interno della struttura, né tantomeno a capire se sono corretti.

    Il tipo di ordinamento che ho usato è un Bubble Sort con sentinella (o almeno credo sia quello, dato che ho realizzato il codice seguendo l'algoritmo con i diagrammi di flusso che la prof ci ha passato. Comunque il codice dell'ordinamento funziona, l'ho testato su array monodimensionale).

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    
    typedef struct{
        char matricola[7];
        char nome[20];
        char cognome[20];
        int livello;
        int straord_mensile[12];
        int straord_annuo;
    }impiegati_t;
    
    impiegati_t inserimento (void);
    void ordina (impiegati_t *dipendenti, int dim);
    
    int main(){
        impiegati_t impiegati[MAX];
            int i;
            int n;
            printf("Inserisci il numero dei dipendenti. (Max 100 dipendenti) \n");
            scanf("%d", &n);
            for(i=0; i<n; i++){
                impiegati[i]=inserimento();
            }
            ordina (&impiegati[MAX], n);
            return(0);
    }
    
    
    impiegati_t inserimento(void){
        impiegati_t impieg;
        int j;
        printf("Inserisci il codice matricola dell'impiegato. (6 caratteri) \n");
        scanf("%s", impieg.matricola);
        printf("Inserisci il nome dell'impiegato. \n");
        scanf("%s", impieg.nome);
        printf("Inserisci il cognome dell'impiegato. \n");
        scanf("%s", impieg.cognome);
        printf("Inserisci il livello dell'impiegato. \n");
        scanf("%d", &impieg.livello);
        printf("\nInserisci il numero di ore di straordinari mensili dell'impiegato. \n");
        impieg.straord_annuo=0;
        for (j=0; j<12; j++){
            printf("Inserisci il numero di ore di straordinari del %d ^ mese dell'impiegato. \n", (j+1));
            scanf("%d", &impieg.straord_mensile[j]);
            impieg.straord_annuo=impieg.straord_annuo+impieg.straord_mensile[j];
        }
        return(impieg);
    }
    
    void ordina (impiegati_t *dipendenti, int dim){
        int i, j;
        int perno;
        int scambio;
        impiegati_t temp[MAX];
        temp[MAX]=*dipendenti;
        perno=dim;
        do{
            scambio=0;
            i=0;
            j=0;
            for(i=0; i<perno-1; i++){
                    if(dipendenti[i].straord_annuo>dipendenti[i+1].straord_annuo){
                        strcpy(temp[j].nome, dipendenti[i].nome);
                        strcpy(dipendenti[i].nome, dipendenti[i+1].nome);
                        strcpy(dipendenti[i+1].nome, temp[j].nome);
                        strcpy(temp[j].cognome, dipendenti[i].cognome);
                        strcpy(dipendenti[i].cognome, dipendenti[i+1].cognome);
                        strcpy(dipendenti[i+1].cognome, temp[j].cognome);
                        strcpy(temp[j].matricola, dipendenti[i].matricola);
                        strcpy(dipendenti[i].matricola, dipendenti[i+1].matricola);
                        strcpy(dipendenti[i+1].matricola, temp[j].matricola);
                        temp[j].livello=dipendenti[i].straord_annuo;
                        dipendenti[i].straord_annuo=dipendenti[i+1].straord_annuo;
                        dipendenti[i+1].straord_annuo=temp[j].livello;
                        temp[j].straord_annuo=dipendenti[i].straord_annuo;
                        dipendenti[i].straord_annuo=dipendenti[i+1].straord_annuo;
                        dipendenti[i+1].straord_annuo=temp[j].straord_annuo;
                        scambio=1;
                        j++;
                }
            }
        perno=perno-1;
        }while(scambio!=0);
        for(i=0; i<dim; i++){
            printf("Matricola impiegato: %s \n", dipendenti[i].matricola);
            printf("Nome impiegato: %s \n", dipendenti[i].nome);
            printf("Cognome impiegato: %s \n", dipendenti[i].cognome);
            printf("Livello impiegato: %d \n", dipendenti[i].livello);
            printf("Straordinario annuo: %d \n", dipendenti[i].straord_annuo);
        }
    }
    Ultima modifica di Alexhey; 26-01-2017 a 16:24

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quali errori ? Non ci sono errori in compilazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    2
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Quali errori ? Non ci sono errori in compilazione ...
    Sì, scusami ho notato che il problema di chiudersi con il messaggio di errore era un problema del compilatore. Comunque resta un altro problema .. ossia che non mi effettua l'ordinamento crescente e non riesco a capire il perché. :/

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.