Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77

    [C++] Problema con programma di sorting.

    Salve. Sto studiando il linguaggio C++, e nella sezione di studio sugli array del mio libro si proponeva la realizzazione di un programma di sorting, tramite il selection sorting.
    In pratica, come sapete, un programma che scelga il numero minore tra quelli da ordinare e lo sostituisca al primo, ripetendo il processo senza più considerare il primo numero, già scambiato.
    Io ho pensato di realizzarlo così:

    codice:
    /*Programma per l'ordinamento
      in senso crescente di un vettore.*/
      
    #include <iostream.h>
    
    float numero[5], alto;
    unsigned i, j, k;
    char Stop;
    
    int main()
    {
        /*Acquisisco i 5 numeri*/
        for(i=0; i<5; i++){
                 cout << "Inserire il " << i+1 << " numero." << endl;
                 cin >> numero[1];
                 }
        cout << endl;
        i=0;
        
        /*Li ordino*/
        for(i=0; i<5; i++){
                 alto = numero[i];
                 k=0;
                 for(j=i; j<5; j++){
                          if(numero[j] < alto){
                                       alto = numero[j];
                                       k = j;
                                       }
                          }
                 numero[k] = numero[i];
                 numero[i] = alto;
                 }
        
        /*Stampo i numeri nell'ordine*/
        cout << "I cinque numeri sono, in ordine crescente:";
        for(i=0; i<5; i++)
            cout << " " << numero[i];
        cout << ".";
        cin >> Stop;
        return(0);
    }
    Tuttavia, qualunque siano i cinque numeri, il programma restituisce come risultato l'ultimo numero inserito, seguito da tre zeri e nuovamente dall'ultimo numero inserito.
    Ad esempio, se i numeri inseriti sono 12, -349, 4, 3.7, 4, il programma stampa come risultato:
    4 0 0 0 4.
    Come mai??

  2. #2
    codice:
                 cin >> numero[1];
    hai scritto 1 invece di i, per cui tutti i dati inseriti vengono salvati nel secondo elemento, e gli altri restano al valore a cui già sono (potrebbe essere qualunque cosa, per caso nel tuo caso è 0).
    Per evitare questi sbagli in futuro ti consiglio di usare nel tuo editor un font appositamente pensato per la programmazione (ad esempio Consolas su Windows, o Inconsolata su Linux), che evidenziano bene le differenze tra caratteri "critici" (1, i, I, l, ...).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    *nothing
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Ho corretto l'errore, tuttavia inserendo nell'ordine 7 -364 2674 12.4 0, restituisce: 2674 0 7 12.4 2674.
    Che è giusto per gli ultimi 4 numeri, mentre al primo invece di mettere il più basso ha messo il più alto.. Come mai?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.