1. Almacenar en un arreglo los datos personales de los alumnos (máximo 40) de un salón de clases (código, nombre, dirección, edad, sexo, cal1, cal2, promedio), calcular el promedio y almacenarlo en el campo promedio, posteriormente imprimir:
a) Lista de los alumnos.
b) Lista de los alumnos que tienen una determinada edad y aprobaron.
c) Promedio del grupo.
d) Promedio de los alumnos comprendido entre un rango de edades especificado por el usuario.
pero cuando selecciono B o C o D el penultimo estudiante ingresado tine un codigo que no deveri y el ultimo que se imprime es 0 ya sea que inicialice en 1 la variable del for o en 0 agradecere su ayuda al final del codigo ahi una imagen que muestra el error para esta prueba utilice el ingreso de 4 estudiantes por lo tedioso que es ingresar los 40 y al ingresar los cuarenta estudiantes se produce el mismo error
Código:
#include <iostream>
#include <stdlib.h> //NUEVA LIBRERIA
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <F:\c++\proyecto final\libreria validacion de enteros\bibliotecavalidaint.cpp>
using namespace std;
using namespace validacionIngresoint;
struct alumno{
int codigo,cod;
char nombre[50];
char direccion[50];
char sexo[30];
int edad;
float cal1,cal2,prom,sumagrup,promediogrupo,promedioedad;
};
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
char opc,resp,aux,entero;
string estudiante;
int contador,ingresado=0, salida,i, j,c,k,bandera,edadbuscar;
alumno a[4];
do{
opc=aux;
system ("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
printf("\tBien Venido Usuario\n");
printf("Elige alguna de las siguientes Opciones\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf("\n\ta) Ingresar Alumno\n");
printf("\tb) Lista de Alumnos\n");
printf("\tc) Promedio del grupo\n");
printf("\td) Promedio de alumnos de determinada edad\n");
cout<<"--> ";cin>>opc;
do{
bandera=aux;
opc=tolower(opc);
if((opc!='a')&&(opc!='b')&&(opc!='c')&&(opc!='d'))
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
printf("\n---<Por favor elija una opcion valida>---: ");
bandera=1;
cin>>opc;
}
}while(bandera==1);
switch(opc){
case 'a':
{
for(i=1;i<=4;i++)
{
system ("cls");
a[i].cod=i;
cout << "\n Codigo de alumno: "<<a[i].cod;
getchar ();
cout << "\nIngrese nombre del estudiante: ";
gets(a[i].nombre);
cout << "Ingrese direccion del estudiante: ";
gets(a[i].direccion);
cout << "Ingrese sexo del estudiante: ";
gets(a[i].sexo);
cout << "Ingrese edad del Estudiante: ";
do{
a[i].edad=tomarInt();
if(a[i].edad<1||a[i].edad>100)
{
cout << "\nEdad Ingresada no valida la edad deve de ser mayor a 0 años y menor a 100 o comuniquese con proveedor del sistema: \n";
}
cout<<"("<<i<<")";
}while (a[i].edad<1||a[i].edad>100);
cout << "Ingrese calificacion 1 (1-100pts.): ";
do{
a[i].cal1=tomarInt();
if(a[i].cal1>100||a[i].cal1<1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout<<"\nNota ingresada debe ser de 1-100 pts. \e";
}
}while(a[i].cal1>100||a[i].cal1<1);
cout << "Ingrese calificacion 2 (1-100pts.): ";
do{
a[i].cal2=tomarInt();
if(a[i].cal2>100||a[i].cal2<1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout<<"\nNota ingresada debe ser de 1-100 pts.\e ";
cout<<"("<<i<<")";
}
cout<<"("<<i<<")";
}while(a[i].cal2>100||a[i].cal2<1);
cout<<"\n\n";
a[i].prom = (a[i].cal1 + a[i].cal2)/2;
a[i].sumagrup=a[i].sumagrup+a[i].prom;
system ("pause");
ingresado++;
}
cout<<"Usted ingreso ";
a[i].promediogrupo=(a[i].sumagrup)/40;
system ("pause");
system ("cls");
break;
}
case 'b':
{
system ("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout << "\tLista de Alumnos\n\n" << endl;
if(ingresado>1)
{
for(j=1; j<=i; j++)
{
if(ingresado>1||ingresado<41)
{
cout << "SU CODIGO" << "----> " << a[j].cod << endl;
cout << "SU NOMBRE" << "----> " << a[j].nombre << endl;
cout << "CALIFICACION 1" << "----> " << a[j].cal1 << endl;
cout << "CALIFICACION 2" << "----> " << a[j].cal2 << endl;
cout << "PROMEDIO" << "----> " << a[j].prom << endl;
cout <<"________________________________________________________________________\n";
putchar('\a');
}
}
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
printf("\t<<< No ahi datos Ingresados >>>\n\n");
}
break;
}
case 'c':
{
system ("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
if(ingresado++>0){
cout << "\n\tEl promedio del grupo de alumnos ingresado es de: " << a[i].promediogrupo<< endl;
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout << "\n\t<<NO AHI DATOS INGRESADOS>>\n";
}
system ("pause");
system ("cls");
break;
}
case 'd':{
do{
if(ingresado>1)
{
system ("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout <<"\t>>>>>Verificaremos promedio de notas segun Edad <<<<<\n\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
cout << "\n Ingrese edad a buscar: " << endl;
do
{
getchar();
edadbuscar=tomarInt();
for(k=1; k<=i; k++)
{
if (edadbuscar == a[k].edad)
{
a[k].promedioedad=a[k].promedioedad+a[k].prom ;
contador=contador+1;
}
}
if(edadbuscar!=a[k].edad)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout<<"\n No existen alumnos de "<<edadbuscar<<" años\e"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout<<"\n Si decea realizar otra busque digite s: ";
cin>>resp;
}
}while((edadbuscar!=a[k].edad)&&(resp=='s'||resp=='S'));
cout<<"alumnos de esta edad: "<<contador;
a[k].promedioedad=a[k].promedioedad/contador;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout<<"\n\tEl promedio total alumnos de "<<edadbuscar<<" años es de: "<<a[k].promedioedad;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout<<"\nDigite S para realizar otra CONSULTA: ";
cin>>resp;
system ("cls");
}
else{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout<<"\n\t>>>> NO AHI ALUMNOS INGRESADOS <<<<\n\n";
}
}while(resp=='s'||resp=='S');
break;
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
cout<<"\nDigite S para Realizar otra operacion segun opciones de menu: ";
cin>>resp;
}while(resp=='s'||resp=='S');
return 0;
}