PDA

Visualizza la versione completa : [C] ordinamento per selezione


Skass89
30-12-2009, 15:59
questo è il codice




#include <stdio.h>
#define dim 10

int main(){

int a[dim];
int i, j, imin, temp, b, n;

printf("inserire dimensioni vettore = ");
scanf("%d", &n);

for(i=0;i<n;i++){
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}

for(i=0;i<n-1;i++){
imin=i;
for(j=i+1;j<n;j++){
if(a[imin]>a[i])
imin=j;
temp=a[i];
a[i]=a[imin];
a[imin]=temp;

}
}
for(i=0;i<n;i++)
printf("%d ", a[imin]);



system("pause");
return 0;
}


sono un paio di giorni che lo rivedo per cercare l'errore ma niente...mi sfugge sicuramente qualcosa....impostato così, il programma non mi restituisce l'array ordinato ma la penultima cifra da me inserita ripetuta tante volte quante sono le celle dell'array, deicse all'inizio dell'esecuzione...

YuYevon
30-12-2009, 17:30
Il fatto che ti stampi sempre lo stesso numero è dovuto al ciclo di stampa con un errore abbastanza evidente



for (i = 0; i < n; i++)
printf("%d ", a[imin]);


sono sicuro che lo vedi :)

Per il resto, c'è qualcosa che non va nell'algoritmo. Rivedi come fai l'aggiornamento dell'indice del minimo. Considera anche che lo scambio tra l'elemento a[i] e a[imin] va fatto solo *dopo* la conclusione del ciclo for interno, e non ad ogni sua iterazione, quindi sistema meglio le parentesi graffe.

Skass89
30-12-2009, 17:41
for(i=0;i<n-1;i++){
imin=i;
for(j=i+1;j<n;j++){
if(a[imin]>a[j])
imin=j;
}
temp=a[i];
a[i]=a[imin];
a[imin]=temp;

}
for(i=0;i<n;i++)
printf("%d ", a[i]); //assurdo...altro che evidente, era bello grosso


eccolo qui....ora funziona....questi errori mi demoralizzano, sopratutto quando sei avanti ad uno schermo per ore e poi ti arriva la notizia che stai dormendo visto che la soluzione è così semplice....GRAZIE MILLE....

YuYevon
30-12-2009, 18:00
Originariamente inviato da Skass89
questi errori mi demoralizzano

Non ti abbattere, di errori così se ne commettono a miliardi, soprattutto quando si studia.

Approfitto per consigliarti uno stile di indentazione più decente: migliorare la leggibilità del codice è un ottimo modo per individuare subito errori di scrittura (come puo essere un imin in luogo di i, che non è dovuto certamente ad ignoranza) o di indentazione (come parentesi graffe messe dove non ci devono stare). Dai uno sguardo agli stili di indentazione (http://en.wikipedia.org/wiki/Indent_style), in particolare al K&R (http://en.wikipedia.org/wiki/Indent_style#K.26R_style), e in generale allo stile di programmazione (http://en.wikipedia.org/wiki/Programming_style).

Skass89
30-12-2009, 18:06
YuYevon grazie, sei molto gentile...mi metto subito in lettura...chissà forse riesco diminuire i fissamenti con bocca aperta avanti a qusto schermo :mame: grazie ancora...siete stati una bella scoperta!!! spero di non rompervi fino a dopo capodanno quindi nel caso fosse vero TANTISSIMI AUGURI E BUON INIZIO!!!!

MItaly
30-12-2009, 19:05
Tra parentesi, credo che, soprattutto per un principiante, sia più chiaro lo stile di indentazione ANSI (o Allman).

Loading