Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cachemarra en 4 Enero 2016, 08:03 am



Título: Ayuda programa
Publicado por: Cachemarra en 4 Enero 2016, 08:03 am
Buenas tardes, alguno podria ayudarme con el sig. fragmento de codigo?
Lo que tiene que hacer es acomodar los datos que tenga el archivo por orden de mayor a menor respecto a "promedio"

Código:
void resultados_yai(void)/*Muestra el resultado de todos los morros*/
{
FILE *califas=fopen("Boleta.txt","w");
fptr=fopen("estudiante.dat","rb");/*Abre el archivo de datos para imprimirlo*/
if(fptr==NULL)/*Si no hay ningun dato en el archivo cierra el programa*/
{
printf("\nNo existen datos en el archivo.\n");
}

printf("\t\tEl rival mas debil versión alumnos\n\n");
fprintf( califas,"\t\tEl rival mas debil versión alumnos\n\n");
printf("Control Nombre U I U II U III U IV U V U VI Promedio");
fprintf(califas,"Control Nombre U I U II U III U IV U V U VI Promedio");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
fprintf(califas,"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
while ((fread(&boleta,sizeof(boleta),1,fptr))>0)/*Permite la lectura de datos del archivo*/
{
printf("%d %s %d ",boleta.matricula,boleta.nombre,boleta.unidad[0]);
printf("%d %d %d %d ",boleta.unidad[1],boleta.unidad[2],boleta.unidad[3],boleta.unidad[4]);
printf("%d %.2f\n",boleta.unidad[5],boleta.prom);
fprintf(califas,"%d %s %d ",boleta.matricula,boleta.nombre,boleta.unidad[0]);
fprintf(califas,"%d %d %d %d ",boleta.unidad[1],boleta.unidad[2],boleta.unidad[3],boleta.unidad[4]);
fprintf(califas,"%d %.2f\n",boleta.unidad[5],boleta.prom);
}
fclose(fptr);/*Cierra el archivo*/
fclose(califas);
while(getchar()!='\n');
}

Asimismo es bienvenida cualquier recomendacion y correcion, muchas gracias!


Título: Re: Ayuda programa
Publicado por: fary en 4 Enero 2016, 10:35 am
Aquí tienes las solución.

https://foro.elhacker.net/programacion_cc/programa_ordenar_numero_mayormenor-t234758.0.html

saludos.


Título: Re: Ayuda programa
Publicado por: Cachemarra en 5 Enero 2016, 05:07 am
Muchas gracias!  ;-)
Por cierto, el siguiente fragmento de codigo, que es exactamente lo que hace?
Código:
while ((fread(&boleta,sizeof(boleta),1,fptr))>0)


Título: Re: Ayuda programa
Publicado por: MAFUS en 5 Enero 2016, 09:46 am
Lée, desde el archivo apuntado por fptr, 1 dato del tamaño del objeto boleta y li mete en el objeto boleta. Si ha leído 1 byte o mas while ejecutará su código asociado.

Para solucionar tu problema puedes crear una lista enlazada en la que iras metiendo los datos qur pilles del archivo, después le das esa lista a una función que te los ordene.
O con la misma lista creas un array dinámico con tantos elementoa tengas en la lista y se lo das a la función de librería estándar qsort para que te lo ordene.


Título: Re: Ayuda programa
Publicado por: Cachemarra en 6 Enero 2016, 06:43 am
Gracias por la ayuda, ya esta resuelto!