Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/04/2010, 13:40
Fenris
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Pregunta problema con devolver una struct en C

Hola a todos

tengo el siguiente problema, declaro 2 estructuras de las cuales lleno con datos una de ellas en el main, dentro de main tambien hago una llamada a una funcion a la cual le paso como argumento una estructura y retorna una la segunda estructura declarada, esa estructura que retorna la funcion la asigno a una variable del tipo de dicha estructura pero cuando imprimo los datos solo me muestra la primera posicion del arreglo siendo que en ocaciones hay mas de 1 elemento en el array.

Adjunto el codigo para que lo revisen y me ayuden a encontrar el porque?.

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