Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Utilizzo di qsort

  1. #1
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138

    [C ] utilizzo di qsort

    ciao a tutti
    ho questo problema:

    ho una struttura:

    codice:
    typedef struct
    {
       int id;
       int qta;
       int id_negozio;
    }stat_t;
    
    stat_t statistiche[72];
    la struttura contiene tutti i dati inizializzati prima a zero e modificando i dati interessanti nel corso nell'esecuzione.

    ho provato a ordinare i dati con il qsort ma mi ritorna i primi 24 ordinati i successivi 48 uguali a zero...

    qualche buon'anima mi sa dare qualche dritta?
    Macse

    [PHP]-Notepad ++
    [C]-Dev-C++ 5 portable

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ma li devi ordinare in modo crescente? Se si in che modo? Seguendo la numerazione dell'id??
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    devo ordinare in base al valore QTA, ovvero la quantità, in ordine decrescente ...

    adesso però ragionando ho scoperto di avere un ritardo mentale... perchè mi aspettavo che li mettesse in ordine ma li lasciasse nella stessa posizione.... ehm mi sa un po' difficile!!!! Spero che non mi bannino per idiozia manifesta!!!

    comunque mi interesserebbe avere una conferma che utilizzo correttamente la funzione qsort.
    Macse

    [PHP]-Notepad ++
    [C]-Dev-C++ 5 portable

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora, per usare qsort devi definire una funzione comparatrice e passarla a qsort, quindi:
    codice:
    typedef struct
    {
      int id;
      int qta;
      int id_negozio;
    }stat_t;
    
    int compare (const void * a, const void * b)
    {
      return (((stat_t*)a)->qta - ((stat_t*)a)->qta);
    }
    
    int main()
    {
      stat_t statistiche[72];
      //...
      qsort(statistiche, 72, sizeof(stat_t), compare);
      //...
    }
    Una cosa del genere dovrebbe funzionare

  5. #5
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    ok grazie adesso provo... mi sa che mi incasinavo un po' con i tipi di dati passati e i puntatori...

    grazie mille
    Macse

    [PHP]-Notepad ++
    [C]-Dev-C++ 5 portable

  6. #6
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    ho provato ma non mi ordina l'array...
    ho stampato a video l'array prima e dopo il qsort ma è identico


    codice:
    int strcmp2(const void * a, const void * b)
    {
       if(((stat_t*)a)->QTA > ((stat_t*)a)->QTA) return -1;
       if(((stat_t*)a)->QTA < ((stat_t*)a)->QTA) return 1;
       return 0;
    }
    
    qsort(statistiche, 72, sizeof(stat_t), strcmp2);
    NB: nella mia struttura stat_t ho scritto QTA maiuscolo...
    Macse

    [PHP]-Notepad ++
    [C]-Dev-C++ 5 portable

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    C'è un banale errore in entrambi i nostri script
    codice:
    return (((stat_t*)a )->qta - ((stat_t*)a )->qta);
    Ho scritto 2 volte a e tu hai ricopiato l'errore . Naturalmente una delle due deve essere b

  8. #8
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    ehm

    perfetto!!!

    ciao grazie ancora
    Macse

    [PHP]-Notepad ++
    [C]-Dev-C++ 5 portable

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.