AYUDA! fallo en la impresion

Iniciado por NicoSanhueza, 20 Junio 2018, 22:59 PM

0 Miembros y 1 Visitante están viendo este tema.

NicoSanhueza

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);

}

Pieshna

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 (cpp) [Seleccionar]

if(max<arr.promedio)
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio

Se te olvido abrir llaves des pues del parentesis y ejecutar
Código (cpp) [Seleccionar]

if(max<arr.promedio){
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio
}

Pero si gustas aqui esta el ejercicio
Código (cpp) [Seleccionar]
#include <iostream>//entrada y salida estandar
#include <conio.h>//para el getch(); que es pausar pantalla

using namespace std;//evitamos escribir std::cout y std::cin cada vez... Ojo si te marca error aqui puedes eliminar esta linea

struct alumnos
{
    char nombre[20];
    int edad;
    int promedio;
}alumnos[100];//creamos 100 estructuras ya que no se sabe cuantas va a ingresar el usuario

void promedio();
int cantidad;//la hacemos variante universal para que todos los void puedan usar el dato ingresado

int main()
{
    cout<<" Cuantos alumnos desea agregar? ";
    cin>>cantidad;//ingresamos a la variante universal
    for(int i=0; i<cantidad; i++){
    cout<<" Nombre alumno: ";
    cin>>alumnos[i].nombre;
    cout<<" Edad: ";
    cin>>alumnos[i].edad;
    cout<<" Promedio: ";
    cin>>alumnos[i].promedio;
}
promedio();//mandamos a llamar el void
cout<<" Presione cualquier tecla para salir...";
getch();
}

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

    for(i=0;i<cantidad;i++)
    {
        if(max<alumnos[i].promedio){
        max=alumnos[i].promedio;
            pos=i;// se guarda la posición del alumno con el mejor promedio
}
}
      cout<<"\n El alumno con mejor nota es:\n";
      cout<<" Nombre: "<<alumnos[pos].nombre<<endl;
      cout<<" Edad: "<<alumnos[pos].edad<<endl;
      cout<<" Promedio: "<<alumnos[pos].promedio<<endl;

}

NicoSanhueza

Cita de: 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 (cpp) [Seleccionar]

if(max<arr.promedio)
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio

Se te olvido abrir llaves des pues del parentesis y ejecutar
Código (cpp) [Seleccionar]

if(max<arr.promedio){
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio
}

Pero si gustas aqui esta el ejercicio
Código (cpp) [Seleccionar]
#include <iostream>//entrada y salida estandar
#include <conio.h>//para el getch(); que es pausar pantalla

using namespace std;//evitamos escribir std::cout y std::cin cada vez... Ojo si te marca error aqui puedes eliminar esta linea

struct alumnos
{
    char nombre[20];
    int edad;
    int promedio;
}alumnos[100];//creamos 100 estructuras ya que no se sabe cuantas va a ingresar el usuario

void promedio();
int cantidad;//la hacemos variante universal para que todos los void puedan usar el dato ingresado

int main()
{
    cout<<" Cuantos alumnos desea agregar? ";
    cin>>cantidad;//ingresamos a la variante universal
    for(int i=0; i<cantidad; i++){
    cout<<" Nombre alumno: ";
    cin>>alumnos[i].nombre;
    cout<<" Edad: ";
    cin>>alumnos[i].edad;
    cout<<" Promedio: ";
    cin>>alumnos[i].promedio;
}
promedio();//mandamos a llamar el void
cout<<" Presione cualquier tecla para salir...";
getch();
}

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

    for(i=0;i<cantidad;i++)
    {
        if(max<alumnos[i].promedio){
        max=alumnos[i].promedio;
            pos=i;// se guarda la posición del alumno con el mejor promedio
}
}
      cout<<"\n El alumno con mejor nota es:\n";
      cout<<" Nombre: "<<alumnos[pos].nombre<<endl;
      cout<<" Edad: "<<alumnos[pos].edad<<endl;
      cout<<" Promedio: "<<alumnos[pos].promedio<<endl;

}



Muchas gracias!  ;-)