[ Foro de C ]

Ordenaminento

17-Jan-2015 19:11
Invitado (DonDIrac)
1 Respuestas

Buenas, he hecho un programa  para ordenar números de un archivo .txt, el programa compila pero da "violación de segmento core generado" Me podríais ayudar? Gracias por vuestra ayuda.


#include <stdio.h>

	float burbuja( int n , float *a[n]) 
{
int i,j,z;

for (i=0;i<=(n-2);i++) {
	for (j=0;j<=(n-i-2);j++) {
			if (a[j]>a[j+1]) {
						z=*a[j];
						*a[j]=*a[j+1];
						*a[j+1]=z; }
						}
}
					
					return *a[n]; 
}
int main () {
int n;
int i;
float x;  
  printf ("Introduzca el numero de elementos a ordenar; \n");
  scanf ("%d",&n);
       FILE *datos;			// la lista con los elementos desordenados//
		datos=fopen("desordenados.txt","r+");
	FILE *orden;		// lista de salida de datos//
		orden=fopen("numord.txt","w");
float *a[n];
	for  (i=0;i<n;i++) {
 fscanf (datos,"%f",&x);
 *a[i]=x; }

*a[n]=burbuja(n,&a[n]);

fclose(datos);
fclose(orden); 
}




18-Jan-2015 01:48
Nacho Cabanes (+83)

Haces varias cosas que no entiendo y que pueden provocar problemas por muchos lados:

- Tienes un array de punteros a float, en vez de un array de float, que debería ser lo "natural".

- Tu función "burbuja" no devuelve el array ordenado ni modifica una variable global, sino que devuelve un único "float".

- En el cuerpo de esa función, comparas valores de a[i], que no son números sino direcciones de memoria, porque es un array de punteros) pero en cambio intercambias el valor contenido en esas direcciones.

- Existe un fichero "orden" que creas, cierras y no usas para nada.

Si soluciones al menos las 3 primeras de esas cosas, el programa empezará a comportarse mejor. Lo vital es que quites tanto asterisco, para que sea un array de números, en vez de un array de punteros.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)