#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define CANTIDAD_ALUMNOS 10
#define CANTIDAD_MATERIAS 5
#define MAXIMA_CALIFICACION 100
#define MINIMA_CALIFICACION 0
#define MAXIMA_LONGITUD_CADENA 100
int aleatorio_en_rango(int minimo, int maximo)
{
return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
}
void llenarMatriz(float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1])
{
int y, x;
for (y = 0; y < CANTIDAD_ALUMNOS; y++)
{
float suma = 0;
for (x = 0; x < CANTIDAD_MATERIAS; x++)
{
int calificacion = aleatorio_en_rango(MINIMA_CALIFICACION, MAXIMA_CALIFICACION);
suma += (float)calificacion;
matriz[y][x] = calificacion;
}
// Agregar promedio
float promedio = suma / CANTIDAD_MATERIAS;
matriz[y][CANTIDAD_MATERIAS] = promedio;
}
}
void imprimirLinea()
{
int x;
printf("+----------");
for (x = 0; x < CANTIDAD_MATERIAS + 1; x++)
{
printf("+--------");
}
printf("+\n");
}
void imprimir(float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1], char alumnos[CANTIDAD_ALUMNOS][MAXIMA_LONGITUD_CADENA])
{
int y, x;
float promedioMayor = matriz[0][CANTIDAD_MATERIAS];
float promedioMenor = matriz[0][CANTIDAD_MATERIAS];
char alumnoPromedioMayor[MAXIMA_LONGITUD_CADENA];
char alumnoPromedioMenor[MAXIMA_LONGITUD_CADENA];
memcpy(alumnoPromedioMayor, alumnos[0], MAXIMA_LONGITUD_CADENA);
memcpy(alumnoPromedioMenor, alumnos[0], MAXIMA_LONGITUD_CADENA);
imprimirLinea();
printf("| Alumno |");
for (x = 0; x < CANTIDAD_MATERIAS; x++)
{
printf("Cal %d |", x + 1);
}
printf("Promedio|\n");
imprimirLinea();
for (y = 0; y < CANTIDAD_ALUMNOS; y++)
{
printf("|%-10s|", alumnos[y]);
float suma = 0;
for (x = 0; x < CANTIDAD_MATERIAS; x++)
{
int calificacion = matriz[y][x];
printf("%-7d |", calificacion);
}
float promedio = matriz[y][CANTIDAD_MATERIAS];
if (promedio > promedioMayor)
{
promedioMayor = promedio;
memcpy(alumnoPromedioMayor, alumnos[y], MAXIMA_LONGITUD_CADENA);
}
if (promedio < promedioMenor)
{
promedioMenor = promedio;
memcpy(alumnoPromedioMenor, alumnos[y], MAXIMA_LONGITUD_CADENA);
}
printf("%0.2f |\n", promedio);
imprimirLinea();
}
printf("Promedio mayor: %s con %0.2f\n", alumnoPromedioMayor, promedioMayor);
printf("Promedio menor: %s con %0.2f\n", alumnoPromedioMenor, promedioMenor);
}
int main()
{
srand(getpid());
float matriz[CANTIDAD_ALUMNOS][CANTIDAD_MATERIAS + 1];
char alumnos[CANTIDAD_ALUMNOS][MAXIMA_LONGITUD_CADENA] = {
"ALUMNO 1",
"ALUMNO 2",
"ALUMNO 3",
"ALUMNO 4",
"ALUMNO 5",
"ALUMNO 6",
"ALUMNO 7",
"ALUMNO 8",
"ALUMNO 9",
"ALUMNO 10",
};
llenarMatriz(matriz);
imprimir(matriz, alumnos);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojZGVmaW5lIENBTlRJREFEX0FMVU1OT1MgMTAKI2RlZmluZSBDQU5USURBRF9NQVRFUklBUyA1CiNkZWZpbmUgTUFYSU1BX0NBTElGSUNBQ0lPTiAxMDAKI2RlZmluZSBNSU5JTUFfQ0FMSUZJQ0FDSU9OIDAKI2RlZmluZSBNQVhJTUFfTE9OR0lUVURfQ0FERU5BIDEwMAoKaW50IGFsZWF0b3Jpb19lbl9yYW5nbyhpbnQgbWluaW1vLCBpbnQgbWF4aW1vKQp7CiAgICByZXR1cm4gbWluaW1vICsgcmFuZCgpIC8gKFJBTkRfTUFYIC8gKG1heGltbyAtIG1pbmltbyArIDEpICsgMSk7Cn0KCnZvaWQgbGxlbmFyTWF0cml6KGZsb2F0IG1hdHJpeltDQU5USURBRF9BTFVNTk9TXVtDQU5USURBRF9NQVRFUklBUyArIDFdKQp7CiAgICBpbnQgeSwgeDsKICAgIGZvciAoeSA9IDA7IHkgPCBDQU5USURBRF9BTFVNTk9TOyB5KyspCiAgICB7CiAgICAgICAgZmxvYXQgc3VtYSA9IDA7CiAgICAgICAgZm9yICh4ID0gMDsgeCA8IENBTlRJREFEX01BVEVSSUFTOyB4KyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgY2FsaWZpY2FjaW9uID0gYWxlYXRvcmlvX2VuX3JhbmdvKE1JTklNQV9DQUxJRklDQUNJT04sIE1BWElNQV9DQUxJRklDQUNJT04pOwogICAgICAgICAgICBzdW1hICs9IChmbG9hdCljYWxpZmljYWNpb247CiAgICAgICAgICAgIG1hdHJpelt5XVt4XSA9IGNhbGlmaWNhY2lvbjsKICAgICAgICB9CiAgICAgICAgLy8gQWdyZWdhciBwcm9tZWRpbwogICAgICAgIGZsb2F0IHByb21lZGlvID0gc3VtYSAvIENBTlRJREFEX01BVEVSSUFTOwogICAgICAgIG1hdHJpelt5XVtDQU5USURBRF9NQVRFUklBU10gPSBwcm9tZWRpbzsKICAgIH0KfQoKdm9pZCBpbXByaW1pckxpbmVhKCkKewogICAgaW50IHg7CiAgICBwcmludGYoIistLS0tLS0tLS0tIik7CiAgICBmb3IgKHggPSAwOyB4IDwgQ0FOVElEQURfTUFURVJJQVMgKyAxOyB4KyspCiAgICB7CiAgICAgICAgcHJpbnRmKCIrLS0tLS0tLS0iKTsKICAgIH0KICAgIHByaW50ZigiK1xuIik7Cn0KCnZvaWQgaW1wcmltaXIoZmxvYXQgbWF0cml6W0NBTlRJREFEX0FMVU1OT1NdW0NBTlRJREFEX01BVEVSSUFTICsgMV0sIGNoYXIgYWx1bW5vc1tDQU5USURBRF9BTFVNTk9TXVtNQVhJTUFfTE9OR0lUVURfQ0FERU5BXSkKewogICAgaW50IHksIHg7CiAgICBmbG9hdCBwcm9tZWRpb01heW9yID0gbWF0cml6WzBdW0NBTlRJREFEX01BVEVSSUFTXTsKICAgIGZsb2F0IHByb21lZGlvTWVub3IgPSBtYXRyaXpbMF1bQ0FOVElEQURfTUFURVJJQVNdOwogICAgY2hhciBhbHVtbm9Qcm9tZWRpb01heW9yW01BWElNQV9MT05HSVRVRF9DQURFTkFdOwogICAgY2hhciBhbHVtbm9Qcm9tZWRpb01lbm9yW01BWElNQV9MT05HSVRVRF9DQURFTkFdOwogICAgbWVtY3B5KGFsdW1ub1Byb21lZGlvTWF5b3IsIGFsdW1ub3NbMF0sIE1BWElNQV9MT05HSVRVRF9DQURFTkEpOwogICAgbWVtY3B5KGFsdW1ub1Byb21lZGlvTWVub3IsIGFsdW1ub3NbMF0sIE1BWElNQV9MT05HSVRVRF9DQURFTkEpOwoKICAgIGltcHJpbWlyTGluZWEoKTsKICAgIHByaW50ZigifCAgQWx1bW5vICB8Iik7CiAgICBmb3IgKHggPSAwOyB4IDwgQ0FOVElEQURfTUFURVJJQVM7IHgrKykKICAgIHsKICAgICAgICBwcmludGYoIkNhbCAlZCAgIHwiLCB4ICsgMSk7CiAgICB9CiAgICBwcmludGYoIlByb21lZGlvfFxuIik7CiAgICBpbXByaW1pckxpbmVhKCk7CiAgICBmb3IgKHkgPSAwOyB5IDwgQ0FOVElEQURfQUxVTU5PUzsgeSsrKQogICAgewogICAgICAgIHByaW50ZigifCUtMTBzfCIsIGFsdW1ub3NbeV0pOwogICAgICAgIGZsb2F0IHN1bWEgPSAwOwogICAgICAgIGZvciAoeCA9IDA7IHggPCBDQU5USURBRF9NQVRFUklBUzsgeCsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGNhbGlmaWNhY2lvbiA9IG1hdHJpelt5XVt4XTsKICAgICAgICAgICAgcHJpbnRmKCIlLTdkIHwiLCBjYWxpZmljYWNpb24pOwogICAgICAgIH0KICAgICAgICBmbG9hdCBwcm9tZWRpbyA9IG1hdHJpelt5XVtDQU5USURBRF9NQVRFUklBU107CiAgICAgICAgaWYgKHByb21lZGlvID4gcHJvbWVkaW9NYXlvcikKICAgICAgICB7CiAgICAgICAgICAgIHByb21lZGlvTWF5b3IgPSBwcm9tZWRpbzsKICAgICAgICAgICAgbWVtY3B5KGFsdW1ub1Byb21lZGlvTWF5b3IsIGFsdW1ub3NbeV0sIE1BWElNQV9MT05HSVRVRF9DQURFTkEpOwogICAgICAgIH0KICAgICAgICBpZiAocHJvbWVkaW8gPCBwcm9tZWRpb01lbm9yKQogICAgICAgIHsKICAgICAgICAgICAgcHJvbWVkaW9NZW5vciA9IHByb21lZGlvOwogICAgICAgICAgICBtZW1jcHkoYWx1bW5vUHJvbWVkaW9NZW5vciwgYWx1bW5vc1t5XSwgTUFYSU1BX0xPTkdJVFVEX0NBREVOQSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiJTAuMmYgICB8XG4iLCBwcm9tZWRpbyk7CiAgICAgICAgaW1wcmltaXJMaW5lYSgpOwogICAgfQogICAgcHJpbnRmKCJQcm9tZWRpbyBtYXlvcjogJXMgY29uICUwLjJmXG4iLCBhbHVtbm9Qcm9tZWRpb01heW9yLCBwcm9tZWRpb01heW9yKTsKICAgIHByaW50ZigiUHJvbWVkaW8gbWVub3I6ICVzIGNvbiAlMC4yZlxuIiwgYWx1bW5vUHJvbWVkaW9NZW5vciwgcHJvbWVkaW9NZW5vcik7Cn0KCmludCBtYWluKCkKewogICAgc3JhbmQoZ2V0cGlkKCkpOwogICAgZmxvYXQgbWF0cml6W0NBTlRJREFEX0FMVU1OT1NdW0NBTlRJREFEX01BVEVSSUFTICsgMV07CiAgICBjaGFyIGFsdW1ub3NbQ0FOVElEQURfQUxVTU5PU11bTUFYSU1BX0xPTkdJVFVEX0NBREVOQV0gPSB7CiAgICAgICAgIkFMVU1OTyAxIiwKICAgICAgICAiQUxVTU5PIDIiLAogICAgICAgICJBTFVNTk8gMyIsCiAgICAgICAgIkFMVU1OTyA0IiwKICAgICAgICAiQUxVTU5PIDUiLAogICAgICAgICJBTFVNTk8gNiIsCiAgICAgICAgIkFMVU1OTyA3IiwKICAgICAgICAiQUxVTU5PIDgiLAogICAgICAgICJBTFVNTk8gOSIsCiAgICAgICAgIkFMVU1OTyAxMCIsCiAgICB9OwogICAgbGxlbmFyTWF0cml6KG1hdHJpeik7CiAgICBpbXByaW1pcihtYXRyaXosIGFsdW1ub3MpOwp9Cg==