PDA

Visualizza la versione completa : [C] Selection sort ed errore "segmentation fault<core dumped>"


johnnny
09-02-2011, 11:47
ragazzi una volta compilato mi da errore : segmentation fault<core dumped>
dov' l'errore ?




#include<stdio.h>
#include<stdlib.h>



int main()

{ int a[10],n,i,j,t,p,min;;

printf("\n Quanti elementi vuoi inserire nell'array ?");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("\n Inserisci elemento");
scanf("%d",&a[i]);
}

min=a[0];
for(i=0;i<n-1;i++)
{ for(j=i+1;j<n;j++)
{if(a[j]<min)
{ min=a[j];
p=j;
}
}
t=a[i];
a[i]=min;
a[p]=t;
}
for(i=0;i<n;i++)
{printf("\n %d",a[i]);
}
return 0;
}

lolide
09-02-2011, 12:30
Originariamente inviato da johnnny
ragazzi una volta compilato mi da errore : segmentation fault<core dumped>
dov' l'errore ?




#include<stdio.h>
#include<stdlib.h>



int main()

{ int a[10],n,i,j,t,p,min;;
....
}


Intanto prova a correggere quel ; di troppo. Poi vediamo se c' qualcos'altro

_Alfabetagamma_
10-02-2011, 00:46
Originariamente inviato da johnnny
ragazzi una volta compilato mi da errore : segmentation fault<core dumped>
dov' l'errore ?






int main()


for(i=0;i<n-1;i++)
{ for(j=i+1;j<n;j++)
{if(a[j]<min)
{ min=a[j];
p=j;



La condizione del for palesemente errata. Se inserisci UN elemento, lui fa i=0, i<1-1. Suggerisco un <= o un <n.

Laikius91
10-02-2011, 08:18
Originariamente inviato da _Alfabetagamma_
La condizione del for palesemente errata. Se inserisci UN elemento, lui fa i=0, i<1-1. Suggerisco un <= o un <n.


Mmmm lo scopo del programma quello di ordinare l'array, se presente un solo elemento, l'array gi ordinato e quindi non deve nemmeno entrare nel ciclo :)

_Alfabetagamma_
10-02-2011, 10:05
:D ops :dh: avevo cercato un errore (in generale) senza notare cosa facesse il programma XD :dh:

premoli
10-02-2011, 10:13
Ciao!!!

Beh stai palesemente sbagliando l'algoritmo, il selection sort lavora sugli indici del vettore, poi proprio non capisco a cosa ti possa servire quella p.

johnnny
10-02-2011, 10:37
allora se puoi vorresti postarmi una versione corretta del selection sort?

premoli
10-02-2011, 10:48
Ecco:




#include<stdio.h>
#include<stdlib.h>

int main()

{ int a[10]; //vettore
int i, j, imin; //indici
int n, t;

do{
printf("\n Quanti elementi vuoi inserire nell'array ?");
scanf("%d",&n);
}while(n<1 || n>10); //controllo sulle dimensioni del vettore

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

for(i=0;i<n-1;i++){
imin=i;
for(j=i+1;j<n;j++){
if(a[j]<a[imin]){
imin=j; //nel caso a[j]<a[min] assegno ad imin il valore di j, bada bene il valore
//di j (ovvero l'indice) non di a[j] (ovvero il valore contenuto nella posizione j-esima del vettore)
}
}
t=a[i];
a[i]=a[imin];
a[imin]=t;
}

printf("\n\nEcco il vettore ordinato\n\n");
for(i=0;i<n;i++){
printf("%d ",a[i]);
}

return 0;
}


Ora che ti ho postato il codice, ti esorto a leggerlo e a comprendere dove sbagliavi in precedenza e se c' qualcosa che non capisci chiedi pure.

Loading