Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/04/2010, 22:48
Fenris
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Pregunta problemas con estructuras en C

Hola

Solicito su ayuda ya que no hay caso que haga funcionar este código y la verdad no se que este mal, me puse a jugar en C un rato para refrescar conocimientos pero me encontré con este problema que no puedo resolver.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. extern unsigned _floatconvert;
  6. #pragma extref _floatconvert
  7.  
  8. struct Alumnos{
  9.  char* Nombre;
  10.  float Notas[3];
  11.  float Examen;
  12.  float Promedio;
  13. };
  14.  
  15. struct ResultAlumnos{
  16.  float promedioMasAlto;
  17.  char* alumnosExamen; //almacena los alumnos con la nota mas baja en el examen.
  18. };
  19.  
  20. //prototipo de funciones
  21. ResultAlumnos notaMasBajaExamen(struct Alumnos input[]); //Funcion que Verifica la Nota menor que obtuvo un alumno en el EXAMEN.
  22. float promedioFinalMasAlto(struct Alumnos input[]);
  23.  
  24. int main()
  25. {
  26. float promedioMasAlto;
  27. ResultAlumnos alumnos[3];
  28. Alumnos notasAlumnos[3];
  29. int i;
  30.  
  31. clrscr();
  32. //Introducimos las Notas.
  33. for(i = 0; i <= 2; i++)
  34. {
  35. printf("************************************");
  36. printf("\n**** Promedio de Notas Alumno %d ****" , (i +1));
  37. printf("\n************************************\n\n");
  38. float auxP = 0; //Variable Auxiliar para Sacar el Promedio.
  39. float auxE = 0; //Variable Auxiliar para Sacar la Nota del Examen.
  40. //Introducimos el Nombre.
  41. printf("Ingrese el Nombre del Alumno : ");
  42. scanf("%s",notasAlumnos[i].Nombre);
  43. //Introducimos las Notas PARCIALES.
  44. for(int e = 0; e <= 2; e++)
  45. {
  46. printf("Ingrese la Nota Numero %d : " , (e + 1));
  47. scanf("%f",&notasAlumnos[i].Notas[e]);
  48. }
  49. //Introducimos la Nota del Examen.
  50. printf("Ingrese la Nota del Examen : ");
  51. scanf("%f",&notasAlumnos[i].Examen);
  52. //Sacamos el Promedio.
  53. for(int f = 0; f <= 2; f++ ){auxP = auxP + notasAlumnos[i].Notas[f];}
  54.  
  55. auxP /= 3;
  56. auxP *= 0.7;
  57.  
  58. //Nota Examen.
  59. auxE = notasAlumnos[i].Examen;
  60. auxE *= 0.3;
  61.  
  62. //Guardamos el Promedio Final.
  63. notasAlumnos[i].Promedio = auxE + auxP;
  64.  
  65. printf("Tu Promedio de notas es : %.1f \n\n", notasAlumnos[i].Promedio );
  66. printf("\n------------------------------------------\n");
  67. }//cierra ciclo for array alumnos
  68.  
  69. *alumnos = notaMasBajaExamen(notasAlumnos);
  70. printf("Alumno %s",*alumnos[0].alumnosExamen);
  71. printf("\n------------------------------------------\n");
  72.  
  73. promedioMasAlto = promedioFinalMasAlto(notasAlumnos);
  74. printf ("El promedio de notas mas alto es: %.1f", promedioMasAlto);
  75. printf("\n------------------------------------------\n");
  76. system("pause");
  77.  
  78. return 0;
  79. }
  80.  
  81. ResultAlumnos notaMasBajaExamen(struct Alumnos input[])
  82. {
  83. float nota;
  84. int index,i,j;
  85. int repite=0;
  86. //char* nombre;
  87.  
  88. ResultAlumnos answer[3];
  89. nota = input[0].Examen;
  90. //nombre = input[0].Nombre;
  91. //printf("Nombre : %s",input[0].Nombre);
  92. j=0;
  93. for (i=1; i<3; i++){
  94.   if (input[i].Examen < nota){
  95.     nota = input[i].Examen;
  96.     answer[j].alumnosExamen = input[i].Nombre;
  97.     j++;
  98.   }
  99.   else if(input[i].Examen == nota){
  100.     answer[j].alumnosExamen = input[i].Nombre;
  101.     repite = 1;
  102.     j++;
  103.   }
  104. }
  105.     if(repite == 1)
  106.      answer[j].alumnosExamen = input[0].Nombre;
  107.     else
  108.       answer[0].alumnosExamen = input[0].Nombre;
  109.  
  110. return *answer;
  111. };
  112.  
  113.  
  114. float promedioFinalMasAlto(struct Alumnos input[])
  115. {
  116. float promedio;
  117. int i;
  118. promedio = input[0].Promedio;
  119. for (i=0; i<3; i++){
  120.   if (input[i].Promedio > promedio){
  121.     promedio = input[i].Promedio;
  122.   }
  123. }
  124. return promedio;
  125. }

La función que me da problemas es "notaMasBajaExamen" ya que la otra funciona bien, la idea de esa función es que retorne una estructura conteniendo el o los nombre(s) de el o los alumno(s) que tuvieron la nota mas baja del examen, los recorro con for en vez de hacerlo estáticos porque la idea una vez que funcione es probar cambiando el tamaño del array de estructuras.

Saludos