Ayuda programa

Iniciado por Cachemarra, 4 Enero 2016, 08:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Cachemarra

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"

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!

fary

Un byte a la izquierda.

Cachemarra

Muchas gracias!  ;-)
Por cierto, el siguiente fragmento de codigo, que es exactamente lo que hace?
while ((fread(&boleta,sizeof(boleta),1,fptr))>0)

MAFUS

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.

Cachemarra

#4
Gracias por la ayuda, ya esta resuelto!