fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5.  
  6. #define CANTIDAD_ALUMNOS 10
  7. #define CANTIDAD_MATERIAS 5
  8. #define MAXIMA_CALIFICACION 100
  9. #define MINIMA_CALIFICACION 0
  10. #define MAXIMA_LONGITUD_CADENA 100
  11.  
  12. int aleatorio_en_rango(int minimo, int maximo)
  13. {
  14. return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
  15. }
  16.  
  17. void llenarMatriz(float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1])
  18. {
  19. int y, x;
  20. for (y = 0; y < CANTIDAD_ALUMNOS; y++)
  21. {
  22. float suma = 0;
  23. for (x = 0; x < CANTIDAD_MATERIAS; x++)
  24. {
  25. int calificacion = aleatorio_en_rango(MINIMA_CALIFICACION, MAXIMA_CALIFICACION);
  26. suma += (float)calificacion;
  27. matriz[y][x] = calificacion;
  28. }
  29. // Agregar promedio
  30. float promedio = suma / CANTIDAD_MATERIAS;
  31. matriz[y][CANTIDAD_MATERIAS] = promedio;
  32. }
  33. }
  34.  
  35. void imprimirLinea()
  36. {
  37. int x;
  38. printf("+----------");
  39. for (x = 0; x < CANTIDAD_MATERIAS + 1; x++)
  40. {
  41. printf("+--------");
  42. }
  43. printf("+\n");
  44. }
  45.  
  46. void imprimir(float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1], char alumnos[CANTIDAD_ALUMNOS][MAXIMA_LONGITUD_CADENA])
  47. {
  48. int y, x;
  49. float promedioMayor = matriz[0][CANTIDAD_MATERIAS];
  50. float promedioMenor = matriz[0][CANTIDAD_MATERIAS];
  51. char alumnoPromedioMayor[MAXIMA_LONGITUD_CADENA];
  52. char alumnoPromedioMenor[MAXIMA_LONGITUD_CADENA];
  53. memcpy(alumnoPromedioMayor, alumnos[0], MAXIMA_LONGITUD_CADENA);
  54. memcpy(alumnoPromedioMenor, alumnos[0], MAXIMA_LONGITUD_CADENA);
  55.  
  56. imprimirLinea();
  57. printf("| Alumno |");
  58. for (x = 0; x < CANTIDAD_MATERIAS; x++)
  59. {
  60. printf("Cal %d |", x + 1);
  61. }
  62. printf("Promedio|\n");
  63. imprimirLinea();
  64. for (y = 0; y < CANTIDAD_ALUMNOS; y++)
  65. {
  66. printf("|%-10s|", alumnos[y]);
  67. float suma = 0;
  68. for (x = 0; x < CANTIDAD_MATERIAS; x++)
  69. {
  70. int calificacion = matriz[y][x];
  71. printf("%-7d |", calificacion);
  72. }
  73. float promedio = matriz[y][CANTIDAD_MATERIAS];
  74. if (promedio > promedioMayor)
  75. {
  76. promedioMayor = promedio;
  77. memcpy(alumnoPromedioMayor, alumnos[y], MAXIMA_LONGITUD_CADENA);
  78. }
  79. if (promedio < promedioMenor)
  80. {
  81. promedioMenor = promedio;
  82. memcpy(alumnoPromedioMenor, alumnos[y], MAXIMA_LONGITUD_CADENA);
  83. }
  84. printf("%0.2f |\n", promedio);
  85. imprimirLinea();
  86. }
  87. printf("Promedio mayor: %s con %0.2f\n", alumnoPromedioMayor, promedioMayor);
  88. printf("Promedio menor: %s con %0.2f\n", alumnoPromedioMenor, promedioMenor);
  89. }
  90.  
  91. int main()
  92. {
  93. srand(getpid());
  94. float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1];
  95. char alumnos[CANTIDAD_ALUMNOS][MAXIMA_LONGITUD_CADENA] = {
  96. "ALUMNO 1",
  97. "ALUMNO 2",
  98. "ALUMNO 3",
  99. "ALUMNO 4",
  100. "ALUMNO 5",
  101. "ALUMNO 6",
  102. "ALUMNO 7",
  103. "ALUMNO 8",
  104. "ALUMNO 9",
  105. "ALUMNO 10",
  106. };
  107. llenarMatriz(matriz);
  108. imprimir(matriz, alumnos);
  109. }
Success #stdin #stdout 0s 5476KB
stdin
Standard input is empty
stdout
+----------+--------+--------+--------+--------+--------+--------+
|  Alumno  |Cal 1   |Cal 2   |Cal 3   |Cal 4   |Cal 5   |Promedio|
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 1  |64      |23      |24      |14      |93      |43.60   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 2  |61      |22      |38      |18      |58      |39.40   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 3  |34      |42      |76      |35      |2       |37.80   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 4  |29      |4       |77      |32      |9       |30.20   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 5  |66      |99      |65      |19      |23      |54.40   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 6  |24      |9       |21      |33      |22      |21.80   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 7  |12      |98      |46      |36      |11      |40.60   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 8  |39      |97      |34      |78      |14      |52.40   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 9  |92      |11      |57      |68      |46      |54.80   |
+----------+--------+--------+--------+--------+--------+--------+
|ALUMNO 10 |59      |97      |51      |36      |29      |54.40   |
+----------+--------+--------+--------+--------+--------+--------+
Promedio mayor: ALUMNO 9 con 54.80
Promedio menor: ALUMNO 6 con 21.80