PDA

Visualizza la versione completa : [C++] Problema con programma di sorting.


flashare
23-08-2011, 16:14
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ì:



/*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?? :dhò:

MItaly
23-08-2011, 16:18
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, ...).

Celebron
23-08-2011, 16:25
*nothing

flashare
23-08-2011, 17:02
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?

Loading