Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NicoSanhueza en 20 Junio 2018, 22:59 pm



Título: AYUDA! fallo en la impresion
Publicado por: NicoSanhueza en 20 Junio 2018, 22:59 pm
Buenas tardes a todos , espero que estén muy bien.

Enunciado del problema: Hacer una estructura llamada alumno, en la cual se tendrán los siguientes miembros: Nombre, edad, promedio, pedir datos al usuario para 3 alumnos, comprobar cuál de los 3 tiene el mejor promedio y posteriormente imprimir los datos del alumno.

Tengo el problema en la impresión de los datos de la persona con mejor promedio.
¿esta bien utilizado el puntero? de no ser así, ¿ como se utiliza correctamente el puntero a estructura para llevarlo a una función?

lo que quería hacer en la función promedio es llevar todo el arreglo a la función( es un arreglo de estructuras)

Llevo mucho tiempo averiguando cual es el error, si me ayudan seria fantástico.
gracias de antemano

#include <stdio.h>

typedef struct alumnos
{
    char nombre[20];
    int edad;
    int promedio;
}alumno;

void datos();
void promedio();

int main()
{
   alumno arr[3];

   datos(arr[0]);
   datos(arr[1]);
   datos(arr[2]);

   promedio(arr);

  return 0;
}


void datos(alumno x)// se rellenan los datos en cada estructura
{
    printf("\nNombre alumno:");
    scanf("%s",&x.nombre);
    printf("\nEdad:");
    scanf("%d",&x.edad);
    printf("\nPromedio:");
    scanf("%d",&x.promedio);

}

void promedio(alumno* arr)
{
    int i,pos,max=0;

    for(i=0;i<3;i++)// se compara el promedio de cada alumno
    {
        if(max<arr.promedio)
            max=arr.promedio;
            pos=i;// se guarda la posición del alumno con el mejor promedio
    }

      printf("\nEl alumno con la mejor nota es: \n");
   printf("\nNombre: %s",arr[pos].nombre);
   printf("\nEdad: %d",arr[pos].edad);
   printf("\nPromedio: %d\n\n",arr[pos].promedio);

}


Título: Re: AYUDA! fallo en la impresion
Publicado por: Pieshna en 21 Junio 2018, 06:50 am
Hola amigo, te recomendaria que usaras la cabecera iostream en vez de stdio ya que es mucho mas facil pero para gustos colores jejeje

Mira el problema esta aqui
Código
  1. if(max<arr.promedio)
  2. max=arr.promedio;
  3. pos=i;// se guarda la posición del alumno con el mejor promedio
  4.  
Se te olvido abrir llaves des pues del parentesis y ejecutar
Código
  1. if(max<arr.promedio){
  2. max=arr.promedio;
  3. pos=i;// se guarda la posición del alumno con el mejor promedio
  4. }
  5.  
Pero si gustas aqui esta el ejercicio
Código
  1. #include <iostream>//entrada y salida estandar
  2. #include <conio.h>//para el getch(); que es pausar pantalla
  3.  
  4. using namespace std;//evitamos escribir std::cout y std::cin cada vez... Ojo si te marca error aqui puedes eliminar esta linea
  5.  
  6. struct alumnos
  7. {
  8.    char nombre[20];
  9.    int edad;
  10.    int promedio;
  11. }alumnos[100];//creamos 100 estructuras ya que no se sabe cuantas va a ingresar el usuario
  12.  
  13. void promedio();
  14. int cantidad;//la hacemos variante universal para que todos los void puedan usar el dato ingresado
  15.  
  16. int main()
  17. {
  18.    cout<<" Cuantos alumnos desea agregar? ";
  19.    cin>>cantidad;//ingresamos a la variante universal
  20.    for(int i=0; i<cantidad; i++){
  21.     cout<<" Nombre alumno: ";
  22.     cin>>alumnos[i].nombre;
  23.     cout<<" Edad: ";
  24.     cin>>alumnos[i].edad;
  25.     cout<<" Promedio: ";
  26.     cin>>alumnos[i].promedio;
  27. }
  28. promedio();//mandamos a llamar el void
  29. cout<<" Presione cualquier tecla para salir...";
  30. getch();
  31. }
  32.  
  33. void promedio()
  34. {
  35.     int i, pos,max=0;
  36.  
  37.    for(i=0;i<cantidad;i++)
  38.    {
  39.        if(max<alumnos[i].promedio){
  40.         max=alumnos[i].promedio;
  41.            pos=i;// se guarda la posición del alumno con el mejor promedio
  42. }
  43. }
  44.      cout<<"\n El alumno con mejor nota es:\n";
  45.      cout<<" Nombre: "<<alumnos[pos].nombre<<endl;
  46.      cout<<" Edad: "<<alumnos[pos].edad<<endl;
  47.      cout<<" Promedio: "<<alumnos[pos].promedio<<endl;
  48.  
  49. }
  50.  


Título: Re: AYUDA! fallo en la impresion
Publicado por: NicoSanhueza en 25 Junio 2018, 02:53 am
Hola amigo, te recomendaria que usaras la cabecera iostream en vez de stdio ya que es mucho mas facil pero para gustos colores jejeje

Mira el problema esta aqui
Código
  1. if(max<arr.promedio)
  2. max=arr.promedio;
  3. pos=i;// se guarda la posición del alumno con el mejor promedio
  4.  
Se te olvido abrir llaves des pues del parentesis y ejecutar
Código
  1. if(max<arr.promedio){
  2. max=arr.promedio;
  3. pos=i;// se guarda la posición del alumno con el mejor promedio
  4. }
  5.  
Pero si gustas aqui esta el ejercicio
Código
  1. #include <iostream>//entrada y salida estandar
  2. #include <conio.h>//para el getch(); que es pausar pantalla
  3.  
  4. using namespace std;//evitamos escribir std::cout y std::cin cada vez... Ojo si te marca error aqui puedes eliminar esta linea
  5.  
  6. struct alumnos
  7. {
  8.    char nombre[20];
  9.    int edad;
  10.    int promedio;
  11. }alumnos[100];//creamos 100 estructuras ya que no se sabe cuantas va a ingresar el usuario
  12.  
  13. void promedio();
  14. int cantidad;//la hacemos variante universal para que todos los void puedan usar el dato ingresado
  15.  
  16. int main()
  17. {
  18.    cout<<" Cuantos alumnos desea agregar? ";
  19.    cin>>cantidad;//ingresamos a la variante universal
  20.    for(int i=0; i<cantidad; i++){
  21.     cout<<" Nombre alumno: ";
  22.     cin>>alumnos[i].nombre;
  23.     cout<<" Edad: ";
  24.     cin>>alumnos[i].edad;
  25.     cout<<" Promedio: ";
  26.     cin>>alumnos[i].promedio;
  27. }
  28. promedio();//mandamos a llamar el void
  29. cout<<" Presione cualquier tecla para salir...";
  30. getch();
  31. }
  32.  
  33. void promedio()
  34. {
  35.     int i, pos,max=0;
  36.  
  37.    for(i=0;i<cantidad;i++)
  38.    {
  39.        if(max<alumnos[i].promedio){
  40.         max=alumnos[i].promedio;
  41.            pos=i;// se guarda la posición del alumno con el mejor promedio
  42. }
  43. }
  44.      cout<<"\n El alumno con mejor nota es:\n";
  45.      cout<<" Nombre: "<<alumnos[pos].nombre<<endl;
  46.      cout<<" Edad: "<<alumnos[pos].edad<<endl;
  47.      cout<<" Promedio: "<<alumnos[pos].promedio<<endl;
  48.  
  49. }
  50.  


Muchas gracias!  ;-)