|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 50
|
[C]ordinamento in c
Ciao a tutti
ho un piccolo problema con questo programma c...premetto che il programma completo è molto più complesso, visto che devo fare tante altre operazioni oltre a quelle che vedete qui...perciò potrei aver dimenticato di cancellare qualcosa del codice Codice:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,int **argv[]){
int c,i;
void sort(int array[], int dim);
/*dichiarazione vettore*/
int array[c];
/*Inserisco i valori nell'array*/
for(i=0;i<=c;i++){
array[i]=(int)argv[i+1];
}
/*ordina dal piu piccolo al piu grande*/
sort(array,c);
for (i=0; i<c; i++) {
printf ("Il %d numero e' = %s\n",i+1,(char *)array[i]);
}
exit(0);
}
for (i = (dim - 1); i >= 0; i--) {
for (j = 0; j < i; j++) {
if (array[j] > array[i]) {
k = array[j];
array[j] = array[i];
array[i] = k;
}
}
}
}
$ ./nsort 2 1 4 Il 1 numero e' = 2 Il 2 numero e' = 1 Il 3 numero e' = 4 mentre ovviamente dovrebbe stampare $ ./nsort 2 1 4 Il 1 numero e' = 1 Il 2 numero e' = 2 Il 3 numero e' = 4 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Ho fatto una prova su un array piccolo ed il sort funziona bene, piuttosto è quel cast a char* che usi nella printf che mi suona abbastanza bruttino (e che tra l'altro, pur compilando, si spacca a runtime con codeblocks). Sostanzialmente, lì stai utilizzando un puntatore ma non hai allocato preventivamente memoria.
Non puoi stampare semplicemente l'intero, senza castarlo a stringa ?
__________________
Il sole è giallo |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Effettivamente...
Inoltre, sta attento agli indici degli array. Se dichiari un array di dimensione c, gli indici effettivamente andranno da 0 a c-1. Il comportamenteo che ottieni utlizzando anche il c-esimo elemento (array[c]) è imprevedibile.
__________________
Il sole è giallo |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 50
|
il problema è che inizialmente avevo fatto cosi
Codice:
int main(int argc,int argv[]){
..........
for (i=0; i<=c; i++)
{
printf ("Il %d numero e' = %d\n",i+1,array[i]);
}
.......
}
$ ./nsort 7 6 4 9 0 9 Il 1 numero e' = -1080998059 Il 2 numero e' = -1080998057 Il 3 numero e' = -1080998055 Il 4 numero e' = -1080998053 Il 5 numero e' = -1080998051 Il 6 numero e' = -1080998049 e sul momento la soluzione che avevo trovato era quella di fargli il cast e stamparlo come stringa....solo che come hai visto si è rifiutato di ordinare gli input |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
..
Codice:
#include <stdio.h>
#include <stdlib.h>
void sort(int *array, int length)
{
int i, j, k;
for (i = length - 1; i >= 0; --i)
{
for (j = 0; j < i; ++j)
{
if (array[j] > array[i])
{
k = array[j];
array[j] = array[i];
array[i] = k;
}
}
}
}
int main(int argc, char** argv)
{
int c = argc - 1, i;
int *array = malloc(c * sizeof(int));
for (i = 0; i < c; ++i)
{
array[i] = atoi(argv[i + 1]);
}
for (i = 0; i < c; ++i)
{
printf("Il %d numero e' = %d\n", i + 1, array[i]);
}
sort(array, c);
for (i = 0; i < c; ++i)
{
printf("Il %d numero e' = %d\n", i + 1, array[i]);
}
free(array);
return 0;
}
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 50
|
grazie mille
Codice:
free(array); |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
Codice:
int *array = malloc(c * sizeof(int)); Codice:
int array[argc - 1]; Ultima modifica di ||ElChE||88 : 06-05-2009 alle 14:39. |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 50
|
ah ok, ancora grazie mille;-)
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:20.




















