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

struct en c

Estas en el tema de struct en c en el foro de C/C++ en Foros del Web. Hola, tengo un problema con este ejercicio: #include <stdio.h> #include <stdlib.h> #define N_ALUMNOS 3 struct alumno{ char nombre[30]; double nota; }; int main(){ int i; ...
  #1 (permalink)  
Antiguo 26/02/2010, 06:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
struct en c

Hola, tengo un problema con este ejercicio:
#include <stdio.h>
#include <stdlib.h>
#define N_ALUMNOS 3

struct alumno{
char nombre[30];
double nota;
};

int main(){
int i;
double nota=0.0;
struct alumno clase[N_ALUMNOS];
for(i=0; i<N_ALUMNOS; i++){
printf("Introduce el nombre y la nota del alumno: ");
scanf("%29s %lf",clase[i].nombre,&clase[i].nota);
}
printf("%s\n","El alumno con mayor nota es: ");

for(i=0; i<N_ALUMNOS; i++){
if(clase[i].nota >clase[i+1].nota && i<N_ALUMNOS)
printf("%s %.2lf\n",clase[i].nombre,clase[i].nota);
}
exit(0);
}
Se trata de mostrar el alumno seguido de su nota más alta, pero no me sale. Al compilarlo pongo por ejemplo: sara 7.5, pablo 8.25 y ana 6.08 y como resultado me sale esto :
El alumno con mayor nota es:
pablo 8.25
ana 6.08
No cosigo ver el fallo. Gracias.
  #2 (permalink)  
Antiguo 26/02/2010, 09:33
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: struct en c

Hay un error en el algoritmo. No estas buscando el mayor de forma correcta. Prueba a poner la misma gente en este orden:
- pablo 8.25
- sara 7.50
- ana 6.08

Verás como te imprime los 3. Lo que tu haces es imprimir mientras el alumno 'i' tenga una nota mayor que el siguiente. Esto es erróneo como ya has podido comprobar. Para buscar al que tiene mayor nota, prueba a hacer esto:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N_ALUMNOS 3
  4.  
  5. struct alumno{
  6.     char nombre[30];
  7.     double nota;
  8. };
  9.  
  10. int main(){
  11.     int i, mayorNota;
  12.     double nota=0.0;
  13.     struct alumno clase[N_ALUMNOS];
  14.    
  15.     for(i=0; i<N_ALUMNOS; i++){
  16.         printf("Introduce el nombre y la nota del alumno: ");
  17.         scanf("%29s %lf",clase[i].nombre,&clase[i].nota);
  18.     }
  19.     printf("%s\n","El alumno con mayor nota es: ");
  20.  
  21.     mayorNota = 0;
  22.     for(i=1; i<N_ALUMNOS; i++){
  23.         if(clase[mayorNota].nota <clase[i].nota) mayorNota = i;
  24.     }
  25.     printf("%s %.2lf\n",clase[mayorNota].nombre,clase[mayorNota].nota);
  26.  
  27.     exit(0);
  28. }

Lo que hace es basarse en que la mayor nota será la del primero. De esta manera, el bucle empieza en 1 y no en 0 porque el primero ya lo tenemos. Cada alumno compara su nota con el primero. Si esa nota es menor, no pasa nada pero si es mayor, dejamos el primero y cogemos el nuevo alumno de modo que los alumnos restantes se compararan con este.

P.D.: Para la próxima vez que pongas código, escríbelo como tal ya que sino, cuesta mucho de leer

Saludos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM

Etiquetas: Ninguno
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:10.