Verán, el programa que tengo que hacer es el siguiente.
Leer N cantidad de estudiantes, y dentro de otra estructura sus notas (parte teórica y parte práctica), como un máximo de 5 calificaciones para cada alumno. Es decir, si digo que son 3 notas prácticas serán 3 notas prácticas para todos los alumnos, lo mismo para la parte teórica.
En fin, todo chévere, pero cuando intento mostrar las calificaciones que ingresé previamente, me muestra valores basura.
¿Alguien podría echarme una mano? El programa lo estoy haciendo en Code::Blocks.
Acá les dejo el código fuente que llevo hasta ahora:
Leer N cantidad de estudiantes, y dentro de otra estructura sus notas (parte teórica y parte práctica), como un máximo de 5 calificaciones para cada alumno. Es decir, si digo que son 3 notas prácticas serán 3 notas prácticas para todos los alumnos, lo mismo para la parte teórica.
En fin, todo chévere, pero cuando intento mostrar las calificaciones que ingresé previamente, me muestra valores basura.
¿Alguien podría echarme una mano? El programa lo estoy haciendo en Code::Blocks.
Acá les dejo el código fuente que llevo hasta ahora:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;
//Variables globales para la cantidad de prácticos y parciales.
int nPracticos, nParciales;
struct Notas {
int practicos[];
int parciales[];
float promedio;
};
typedef struct Notas Notas;
struct Estudiante {
char nombre[25];
char apellido[35];
char cedula[10];
char sexo;
int edad;
Notas notas;
};
typedef struct Estudiante Estudiante;
int leerEstudiantes();
int leerEvaluaciones(char tipo[]); //Para leer la cantidad de practicos y parciales.
void llenarEstudiante(Estudiante& estudiante, int id);
void mostrarEstudiante(const Estudiante& estudiante, int id);
int main() {
int nEstudiantes;
nEstudiantes = leerEstudiantes();
nPracticos = leerEvaluaciones((char*)"Practicos");
nParciales = leerEvaluaciones((char*)"Parciales");
system("cls");
Estudiante estudiante[nEstudiantes];
//Llenando cada uno de los estudiantes.
for(int est = 0; est < nEstudiantes; est++) {
llenarEstudiante(estudiante[est], est);
}
system("cls");
//Mostrar datos de los estudiantes.
for(int est = 0; est < nEstudiantes; est++) {
mostrarEstudiante(estudiante[est], est);
}
return 0;
}
int leerEstudiantes() {
int nEstudiantes;
do {
cout << "Introduzca la cantidad de estudiantes: ";
cin >> nEstudiantes;
if(nEstudiantes <= 0) {
cerr << "Cantidad de estudiantes invalida." << endl;
}
}while(nEstudiantes <= 0);
return nEstudiantes;
}
int leerEvaluaciones(char tipo[]) {
int cantidad;
do{
cout << "Ingrese la cantidad de " << tipo << ": ";
cin >> cantidad;
if(cantidad <= 0 || cantidad > 5) {
cerr << "Cantidad incorrecta." << endl;
}
}while(cantidad <= 0 || cantidad > 5);
return cantidad;
}
void llenarEstudiante(Estudiante& estudiante, int id) {
//Variables para calcular el promedio.
int pPracticos = 0, pParciales = 0;
//Lectura de datos generales.
cout << "Ingrese nombre de estudiante [" << (id + 1) << "]: ";
cin >> estudiante.nombre;
cout << "Ingrese apellido de estudiante [" << (id + 1) << "]: ";
cin >> estudiante.apellido;
cout << "Ingrese cedula de estudiane [" << (id + 1) << "]: ";
cin >> estudiante.cedula;
cout << "Ingrese edad de estudiante [" << (id + 1) << "]: ";
cin >> estudiante.edad;
cout << "Ingrese sexo de estudiante [" << (id + 1) << "] (M/F): ";
cin >> estudiante.sexo;
//Lectura de notas prácticas.
for(int pr = 0; pr < nPracticos; pr++) {
do {
cout << "Ingrese nota del practico [" << (pr + 1) << "]: ";
cin >> estudiante.notas.practicos[pr];
if(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10) {
cerr << "Nota incorrecta." << endl;
}
}while(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10);
}
//Lectura de notas parciales.
for(int pa = 0; pa < nParciales; pa++) {
do {
cout << "Ingrese nota del parcial [" << (pa + 1) << "]: ";
cin >> estudiante.notas.parciales[pa];
if(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10) {
cerr << "Nota incorrecta." << endl;
}
}while(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10);
}
//Calculando el promedio del estudiante:
//Sumatoria de Prácticos
for(int pr = 0; pr < nPracticos; pr++) {
pPracticos += estudiante.notas.practicos[pr];
}
//Sumatoria de Parciales
for(int pa = 0; pa < nParciales; pa++) {
pParciales += estudiante.notas.parciales[pa];
}
//Cálculo del promedio.
estudiante.notas.promedio = pPracticos/nPracticos*0.20 + pParciales/nParciales*0.50;
}
void mostrarEstudiante(const Estudiante& estudiante, int id) {
cout << "Nombre de estudiante [" << (id + 1) << "]: " << estudiante.nombre << endl;
cout << "Apellido de estudiante [" << (id + 1) << "]: " << estudiante.apellido << endl;
cout << "Cedula de estudiante [" << (id + 1) << "]: " << estudiante.cedula << endl;
cout << "Sexo de estudiante [" << (id + 1) << "]: " << estudiante.sexo << endl;
cout << "Edad de estudiante [" << (id + 1) << "]: " << estudiante.edad << endl;
for(int j = 0; j < nPracticos; j++) {
cout << "Nota del practico [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.practicos[j] << endl;
}
for(int j = 0; j < nParciales; j++) {
cout << "Nota del parcial [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.parciales[j] << endl;
}
cout << "Promedio del estudiante [" << (id + 1) << "]: " << estudiante.notas.promedio << endl;
cout << "-------------------" << endl;
}