elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con programa en c++ para ingreso de N alumnos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con programa en c++ para ingreso de N alumnos  (Leído 4,035 veces)
ricarcuc

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ayuda con programa en c++ para ingreso de N alumnos
« en: 8 Noviembre 2018, 22:21 pm »

estoy creando un programa:
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;
}


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ayuda con programa en c++ para ingreso de N alumnos
« Respuesta #1 en: 8 Noviembre 2018, 22:39 pm »

Recomendaciones antes de darte la solucion.

Si es muy comun vengan aqui preguntan por su tarea, y no hay problema cuando se tiene tiempo se les ayuda, sin embargo lo que no acepto es que vengan con un código copiado/pegado de quien sabe cuantas fuentes distintas. (Si se va a copiar un codigo es por que lo entiendes y no tienes dudas de que hacada una de sus instrucciones)

Tienes tanto "printf" como "cout", esto denota que has copiado y pegado el codigo de distintas fuentes de programacion, ademas se notan estilos de programacion diferente. Ademas las funciones de adorno como SetConsoleTextAttribute entre otras son incesarias, te estan enseñando a programar no a diseñar, asi que podrias presindir de ellas para hacer la tarea un poco mas sencilla.

El problema de tu codigo radica en que copiaste o tu mismo hiciste un codigo que esta mal, no considera los arreglos de forma correcta, esto es no empiezas desde la poscion 0.

En programacion empezamos a contar desde 0 como el primer elemento. Con exepcion de Visual Mi3rd4 que si lo hace apartir de la posicion 1 para el primer element

Si tienes un arreglo de 4 elementos ej.

int Arreglo[4];

Lo ideal hacer un FOR o While para Rellenarlo empezando desde la posicion 0 hasta la poscion 3.

Cuenta conmigo:

Código:
arreglo[0] = 1; //La posicion 0 del arreglo es el primer elemento del mismo
arreglo[1] = 2; //La posicion 1 del arreglo es el segundo elemento del mismo
arreglo[2] = 3; //La posicion 2 del arreglo es el tercer elemento del mismo
arreglo[3] = 4; //La posicion 3 del arreglo es el cuarto elemento del mismo.



En tu codigo tienes un FOR donde inicias a la variable 'i' desde 1 hasta menor o igual a 4.
Cuando realmente deberia de inicialzarse en 0 hasta menor que 4

Tu codigo:

Código:
for(i=1;i<=4;i++)
{

Cuando deberia de ser lo siguiente para todos los FOR desde donde los capturas hasta donde los imprimes

Código:
for(i=0;i<4;i++)
{

La razon por la cual salen valores no validos es por que estas leyendo en posiciones de memoria que estan siendo utilizadas por otras variables.

Saludos!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa gds control de ingreso
Ingeniería Inversa
futelder16 1 4,778 Último mensaje 5 Enero 2012, 18:20 pm
por .:UND3R:.
Ayuda Programa de planilla alumnos
Java
stinkydj 0 1,703 Último mensaje 23 Octubre 2012, 04:52 am
por stinkydj
[C++][AYUDA]....Proyecto de Base de Datos de Alumnos
Programación C/C++
grego027 7 7,368 Último mensaje 19 Enero 2015, 22:36 pm
por ivancea96
Crear carpeta FTP para profesores y alumnos
GNU/Linux
migueliyo89 0 2,290 Último mensaje 26 Abril 2016, 00:05 am
por migueliyo89
Cuando hay espacios en el ingreso del nombre el programa termina
Programación C/C++
matver 3 2,327 Último mensaje 9 Marzo 2017, 13:14 pm
por matver
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines