Problema ordinamento vettore di struttura C++

di Anonimizzato13421 il
12 risposte
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

  • Nella for j non incrementi j
  • LoL è vero so 2 ore che ci sbatto e non riuscito a vedere una cosa cosi evidente grz. Adesso provo e ti faccio sapere
  • Sì, però lo scambio non è corretto ...
  • Secondo me devi utilizzare un puntatore alla struct. Altrimenti scambi i valori delle struct contenute nella funzione
  • Infatti mi da errore lo stesso
  • 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.
  • Oregon corri a farti bello che mancano solo 4 ore.........che poi ti tocca rispondere per tutto l'anno....è capodanno!!!!
  • 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;
        }]
  • Nel secondo for non è i < n ma j < n mi sono sbagliato a scrivere XD
  • Quindi? Risolto?
  • Non mi ordina ma mi ripete n volte l ultimo struttura che inserisco provo a cambiare algoritmo perché non riesco a capire il problema
  • 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