Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NoteMeca en 3 Marzo 2022, 19:37 pm



Título: Ayuda urgente
Publicado por: NoteMeca en 3 Marzo 2022, 19:37 pm
Chicos, tengo que hacer un programa en C para mañana y no tengo idea de cómo hacerlo.

A la clase de Estructuras de Datos del profesor Serrano asiste un grupo numeroso de alumnos. El profesor es muy exigente y aplica cuatro exámenes durante el semestre. Escribe un programa en C que resuelva lo siguiente:

a) El promedio de calificaciones de cada alumno.
b) El promedio del grupo en cada examen.
c) El examen que tuvo el mayor promedio de calificación.
Dato: ALU [N, 4] (donde ALU es un arreglo bidimensional de tipo real de N filas y cuatro columnas que almacena calificaciones de alumnos, 1 < N < 50).

No encuentro la forma de pedirle al usuario la cantidad de filas (cantidad de estudiantes) y hacer el ciclo for para el mismo, y tambien de que no se me mezcle con las columnas que ya las tengo.
Por favor, si pudieran iluminarme, estoy muy desesperado.


Título: Re: Ayuda urgente
Publicado por: K-YreX en 3 Marzo 2022, 19:44 pm
Chicos, tengo que hacer un programa en C para mañana y no tengo idea de cómo hacerlo.

A la clase de Estructuras de Datos del profesor Serrano asiste un grupo numeroso de alumnos. El profesor es muy exigente y aplica cuatro exámenes durante el semestre. Escribe un programa en C que resuelva lo siguiente:

a) El promedio de calificaciones de cada alumno.
b) El promedio del grupo en cada examen.
c) El examen que tuvo el mayor promedio de calificación.
Dato: ALU [N, 4] (donde ALU es un arreglo bidimensional de tipo real de N filas y cuatro columnas que almacena calificaciones de alumnos, 1 < N < 50).

No encuentro la forma de pedirle al usuario la cantidad de filas (cantidad de estudiantes) y hacer el ciclo for para el mismo, y tambien de que no se me mezcle con las columnas que ya las tengo.
Por favor, si pudieran iluminarme, estoy muy desesperado.

Así de simple es pedir al usuario la cantidad de filas:
Código
  1. int num_filas;
  2. printf("Introduce la cantidad de filas: ");
  3. scanf("%d", &num_filas);
  4.  
  5. printf("La cantidad de filas es: %d", num_filas);

PD: No se hacen tareas.
Si quieres ayuda sobre una parte específica de tu programa, agrega tu código antes.


Título: Re: Ayuda urgente
Publicado por: Tachikomaia en 3 Marzo 2022, 20:27 pm
Pide que te devuelvan el dinero/tiempo por no enseñarte bien  >:(


Título: Re: Ayuda urgente
Publicado por: NoteMeca en 3 Marzo 2022, 21:24 pm
Este es mi código, por favor si pudieran revisarlo y decirme qué le falta o qué está mal, disculpen las molestias.
Código
  1. #include <stdio.h>
  2.  
  3. const int MAX = 50;
  4. const int EXA = 4;
  5. void Lectura(float[MAX][EXA], int);
  6. void Funcion1(float[MAX][EXA], int);
  7. void Funcion2(float[MAX][EXA], int);
  8. void main(void)
  9. {
  10.    int NAL;
  11.    float ALU[MAX][EXA];
  12.    do
  13.    {
  14.        printf("Ingrese el número de alumnos del grupo: ");
  15.        scanf("%d", &NAL);
  16.    }
  17.    while (NAL > MAX || NAL < 1);
  18.    Lectura(ALU, NAL);
  19.    Funcion1(ALU, NAL);
  20.    Funcion2(ALU, NAL);
  21. }
  22. void Lectura(float A[][EXA], int N)
  23.  
  24. {
  25.    int I, J;
  26.    for(I=0; I<N; I++)
  27.        for(J=0; J<EXA; J++)
  28.        {
  29.            printf("Ingrese la calificación %d del alumno %d: ", J+1, I+1);
  30.            scanf("%f", &A[I][J]);
  31.        }
  32. }
  33. void Funcion1(float A[][EXA], int T)
  34. {
  35.    int I, J;
  36.    float SUM, PRO;
  37.    for(I=0; I<T; I++)
  38.    {
  39.        SUM = 0;
  40.        for(J=0; J<EXA; J++)
  41.            SUM += A[I][J];
  42.        PRO = SUM / EXA;
  43.        printf("\nEl promedio del alumno %d es: %5.2f", I+1, PRO);
  44.    }
  45. }
  46. void Funcion2(float A[][EXA], int T)
  47. {
  48.    int I, J, MAY;
  49.    float SUM, PRO, MPRO = 0;
  50.    printf("\n");
  51.    for(J=0; J<EXA; J++)
  52.    {
  53.        SUM = 0;
  54.        for(I=0; I<T; I++)SUM += A[I][J];PRO = SUM / T;
  55.        if(PRO > MPRO)
  56.        {
  57.            MPRO = PRO;MAY = J;
  58.        }
  59.        printf("\nEl promedio del examen %d es: %f", J+1, PRO);
  60.        }printf("\n\nEl examen con mayor promedio es: %d \t Promedio: %5.2f", MAY+1, MPRO);
  61. }

MOD: Usar etiquetas de Código GeSHi


Título: Re: Ayuda urgente
Publicado por: K-YreX en 3 Marzo 2022, 21:54 pm
El código es mejorable pero a simple vista parece que funciona correctamente. (No lo he ejecutado, sólo lo he revisado por encima)
Si no es así y el programa da algún error o muestra resultados inesperados, agrega un ejemplo de ejecución donde se muestre el error.

Según el enunciado que has puesto en el primer mensaje veo un pequeño error:
Citar
Dato: ALU [N, 4] (donde ALU es un arreglo bidimensional de tipo real de N filas y cuatro columnas que almacena calificaciones de alumnos, 1 < N < 50).
Te piden que el número de filas de la matriz sea exactamente N y no 50. Esto debes hacerlo usando memoria dinámica y al finalizar el programa debes liberar dicha memoria.
Si no has visto el uso de memoria dinámica puedes obviar este detalle aunque siendo precisos con el enunciado, eso es lo que te están pidiendo.

Por si te interesa mejorarlo:
  • La función main() debe ser de tipo int.
    Aunque en ciertas fuentes antiguas puede aparecer la función main() de tipo void. Lo correcto es que sea de tipo int.
    Además es la única función que no necesitas indicar expresamente al final el 'return 0' ya que el compilador lo agregará automáticamente si no lo haces tú.
  • Las variables y funciones se escriben con minúsculas.
    La nomenglatura camelCase (ej: numAlumnos, calcularPromedio()) está aceptada tanto para variables como funciones.
    La nomenglatura snake_case (ej: num_alumnos) está mayormente aceptada para variables que para funciones.
    La nomenglatura SCREAMING_SNAKE_CASE (ej: NUM_ALUMNOS) está única y exclusivamente aceptada para constantes.
    La nomenglatura PascalCase (ej: NumAlumnos) se utiliza para structs.
  • Utiliza funciones bien definidas y nómbralas con nombres que permitan identificar su funcionalidad.
    Qué será mejor? Tener una función que se llame como la primera o como la segunda:
Código
  1. // PRIMERA OPCION
  2. float calcularPromedio(float matriz[][NUM_NOTAS], int numAlumnos, int alumno);
  3. // USO
  4. for(int i = 0; i < numAlumnos; ++i) {
  5.  printf("El promedio del alumno %d es: %.2f", i+1, calcularPromedio(matriz, numAlumnos, i));
  6. }
  7.  
  8. // SEGUNDA OPCION
  9. float funcion1(float A[][EXA], int T);
  10. // USO
  11. // ??? Pues no se como usarla porque no se que parametros tengo que pasarle ya que no son descriptivos