Problema ordinamento vettore di struttura C++

di
Anonimizzato13421
il
12 risposte

Problema ordinamento vettore di struttura C++

Salve a tutti e buone feste passate.
La struttura è la seguente
 struct corso{
    char cnome[32];
    char docente [32];
    int crediti;
    int studenti;
};
Essa si trova in un modulo separato in un header file.
Ecco l'algoritmo utilizzato per ordinare l array
void scambio(int &a, int&b){
    int appo=a;
    a=b;
    b=appo;
}

void ordinastruct(corso uni[],int n){
    int i,j;
    for(i=0; i<n-1; i++){
        for(j=i+1; i<n; i++){
            if(uni[i].studenti > uni[j].studenti)
                scambio(uni[i].studenti,uni[j].studenti);
                
        }
    }
    
}
Il testo mi chiede di ordinare l array secondo i studenti iscritti se avete bisogno del main chiedete pure ma non penso ci sia bisogno perche in fase di compilazione non ci sono errori ma in run time non mi ordina bene la struttura Grazie in anticipo.

12 Risposte

  • Re: Problema ordinamento vettore di struttura C++

    Nella for j non incrementi j
  • Re: Problema ordinamento vettore di struttura C++

    LoL è vero so 2 ore che ci sbatto e non riuscito a vedere una cosa cosi evidente grz. Adesso provo e ti faccio sapere
  • Re: Problema ordinamento vettore di struttura C++

    Sì, però lo scambio non è corretto ...
  • Re: Problema ordinamento vettore di struttura C++

    Secondo me devi utilizzare un puntatore alla struct. Altrimenti scambi i valori delle struct contenute nella funzione
  • Re: Problema ordinamento vettore di struttura C++

    Infatti mi da errore lo stesso
  • Re: Problema ordinamento vettore di struttura C++

    Non ha senso scambiare solo un elemento della struttura. Devi scambiare le due strutture e [j] usando la stessa funzione modificata per trattare l'intera struttura.
  • Re: Problema ordinamento vettore di struttura C++

    Oregon corri a farti bello che mancano solo 4 ore.........che poi ti tocca rispondere per tutto l'anno....è capodanno!!!!
  • Re: Problema ordinamento vettore di struttura C++

    Intendevi questo perche adesso non mi da errore ma non me li ordina correttamente
    #include <iostream>
    #include "struttura.h"
    using namespace std;
    
    void scambio(corso& a, corso& b){   
        corso appo=a;
        a=b;
        b=appo;
        return;
    }
    
    void ordinastruct(corso uni[],int n){
        int i,j;
        for(i=0; i<n-1; i++)
            for(j=i+1; i<n; j++){
                if(uni[i].studenti > uni[j].studenti)
                    scambio(uni[i],uni[j]);
            }   
        return;
        }]
  • Re: Problema ordinamento vettore di struttura C++

    Nel secondo for non è i < n ma j < n mi sono sbagliato a scrivere XD
  • Re: Problema ordinamento vettore di struttura C++

    Quindi? Risolto?
  • Re: Problema ordinamento vettore di struttura C++

    Non mi ordina ma mi ripete n volte l ultimo struttura che inserisco provo a cambiare algoritmo perché non riesco a capire il problema
  • Re: Problema ordinamento vettore di struttura C++

    Questo breve programma forse ti puo' aiutare con l'algoritmo
    Ovviamente devi adattarlo al tuo caso
    
    #include <stdio.h>
    
    
    void ordina(int *v,int _size)
    {
        bool controllo;
        int i;
    
        int temp;       //solo 2^ modo
    
        do{
            controllo=false;
            for(i=0;i<_size-1;i++){
                if(v[i]>v[i+1]){
                    /*v[i]=v[i]^v[i+1];
                    v[i+1]=v[i]^v[i+1];         //0,104ms
                    v[i]=v[i]^v[i+1];*/
    
                    /*temp=v[i];
                    v[i]=v[i+1];                //0.103ms
                    v[i+1]=temp;*/
    
    
                    controllo=true;
                }
            }
        }while(controllo==true);
    
    }
    
    int main()
    {
        int v[7]={5,9,1,3,7,6,4};
        int _size=sizeof(v)/sizeof(v[0]);
    
        printf("size: %d\n ", _size);
    
        ordina(v,_size);
    
        for(int i=0;i<_size;i++)
            printf("%d\t", v[i]);
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
12 risposte