Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]Ordinamento (strano risultato)

    Salve , vi posto una parte di codice relativo ad un algoritmo di ordinamento che ho scritto:
    codice:
    void order_ins (Squadra *s, int n)
    {
         int i,j;
         int el_da_ins;
         int appog;
         for (i=1;i<n;i++)
         {
             el_da_ins=(s+i)->numvittoriesquadra;
             j= i-1;
         
         while (j>=0 && el_da_ins < (s+j)->numvittoriesquadra)
         {
               (s+j+1)->numvittoriesquadra = (s+j)->numvittoriesquadra;
               (s+j+1)->numero = (s+j)->numero;
               
               j--;
               }
               (s+j+1)->numvittoriesquadra = el_da_ins;
               }
    }
    Squadra è un tipo strutturato e ha al suo interno numvittoriesquadra e numero(è l'indice della squadra o anche il nome volendo) ma questo è quanto vedo a video facendo la printf prima e dopo l'ordinamento:


    Succede qualcosa di strano agli indici delle squadre...

  2. #2
    Ci ho dato solo un occhio veloce, ma secondo me il problema è nel ciclo while:

    while (j>=0 && el_da_ins < (s+j)->numvittoriesquadra)
    {
    (s+j+1)->numvittoriesquadra = (s+j)->numvittoriesquadra;
    (s+j+1)->numero = (s+j)->numero;

    j--;
    }
    (s+j+1)->numvittoriesquadra = el_da_ins;
    }
    Nell'ultima riga tu copi solo il numero di vittorie, mentre dovresti anche fare in modo di copiare il numero della squdra, perchè altrimenti i numeri di vittorie si aggiornano ma quelli delle squadre si sovrappongono!
    Secondo me potresti rimediare mettendo all'inizio del ciclo for, una cosa del tipo:

    codice:
    int oldNum = (s + i)->numero;
    in modo da tener traccia del numero della squadra che stai analizzando e da poterlo copiare nella sua posizione definitiva alla fine, facendo:

    codice:
    (s + j + 1)->numero = oldNum;
    Potrebbe essere? Sappimi dire se va
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Semplicemente esatto, grazie mille! non mi ero accorto di usare una sola variabile di appoggio quando volevo ordinare due elementi

  4. #4
    Contento di esserti stato utile
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

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.