Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problemas con estructuras en C

Estas en el tema de problemas con estructuras en C en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/04/2010, 22:48
 
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
  #2 (permalink)  
Antiguo 21/04/2010, 03:33
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: problemas con estructuras en C

Pide memoria para el campo Nombre, o definelo como un arreglo de caracteres de un largo suficiente para contener un nombre.
  #3 (permalink)  
Antiguo 21/04/2010, 11:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: problemas con estructuras en C

Hola gracias por responder, pero sabes haciendo el cambio que indicas sale un error Lvalue Required en la función "ResultAlumnos notaMasBajaExamen(struct Alumnos input[])" en la parte del for, que estara mal.
Otra consulta como reservo espacio de memoria solo para un miembro de la estructura.

Saludos
  #4 (permalink)  
Antiguo 21/04/2010, 12:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: problemas con estructuras en C

- Hay un codigo con numeros de linea mas arriba, en que linea aparece el error?
- Para copiar un string a otro string se usa strcpy
- Para pedir memoria para un string se usa malloc( largo a contener + 1 )
  #5 (permalink)  
Antiguo 21/04/2010, 13:09
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: problemas con estructuras en C

Lineas 97, 101, 107 que estan dentro de la funcion implementada a partir de la linea 82

Etiquetas: estructuras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:08.