Gracias por su pronta respuesta amigo. En este caso estoy diciendo que "i" recorrerá las n cantidad de estudiante y "x"recorrerá las 5 notas de cada estudiante, me captura las n cantidad de estudiante pero no las 5 notas diferentes de cada estudiante, me captura solo la 5 notas del ultimo estudiante y las coloca en todos los estudiante, como se visualiza en la imagen.
Hola tienes varios problemas de entrada los nombres de las personas los estas manejando como enteros tienes dos opciones o manejarlos como string o un arreglo de char al ver que estas en C++ aconsejo los strings otra cosa es que no estabas guardando correctamente las notas ya que las estabas sobrescribiendo.
Al imprimir no recorrias correctamente los arreglos de notas y nombres de los estudiantes y por eso los datos no eran los correctos, bueno me di a la tarea de modificar tu programa y ya funciona pero tiene detalles.
Código
#include <iostream>
usingnamespace std;
void llenar (string estudiantes[], int notas[]);
void imprimir(string estudiantes[], int notas[]);
int menu ();
//variables
int num=0;
int asignatura=5;
string estudiantes[100];
int posicionesEstudiante=0;
int notas[100];
int posicionNotas=0;
int main()
{
int opc;
do
{
opc=menu();
switch(opc)
{
case1:
llenar(estudiantes, notas);
break;
case2:
imprimir(estudiantes, notas);
break;
case3:
cout<<"\nADIOS"<<endl;
break;
}
}
while(opc !=3);
cin.get();
}
void llenar (string estudiantes[], int notas [])
{
cout<<"Deme el numero de estudiante a insertar: "<<endl<<endl;
cin>>num;
for(int i=0; i<=num-1; i++)
{
cout<<"\nDame el estudiante "<<i+1<<endl;
cin>>estudiantes[posicionesEstudiante];
for(int x=0; x<asignatura; x++)
{
cout<<"\nNota "<<x+1<<" del estudiante "<<i+1<<" :";
cin>>notas[posicionNotas];
posicionNotas++;
}
posicionesEstudiante++;
}
}
void imprimir (string estudiantes [], int notas [])
{
int contador=0;
for(int i=0; i<=posicionesEstudiante-1; i++)
{
cout<<"\nESTUDIANTE "<<i+1<<endl<<endl;
cout<<estudiantes[i]<<endl<<endl;
for(int x=0; x<asignatura; x++)
{
cout<<notas[contador]<<endl;
contador++;
}
}
}
int menu ()
{
int opc;
cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl;
cin>>opc;
return opc;
}
Si quieres puedes reformular tu programa y usar structs para poder tener una mejor abstraccion. Ejemplo:
Código
#include <iostream>
usingnamespace std;
constint NUMERO_ASIGNTURAS=5;
struct Estudiante
{
string nombre;
int asignaturas[NUMERO_ASIGNTURAS];
};
int main(){
Estudiantes estudiantes[100];
return0;
}
Si sabes usar vector o listas enlazadas puedes sustuir los arreglos. Si tienes dudas avisanos saludos...
« Última modificación: 22 Julio 2016, 21:59 pm por crack81 »
En línea
Si C/C++ es el padre de los lenguajes entonces ASM es dios.
En el X haces eso siempre escribes en los mismos 5 lugares.
Necesitas algo como un desplazamiento seria como
Código
5* i +x
Te dejo este video
Muchisimas gracias amigo me resolviste el problema tarde un poco en comprender el desplazamiento que debo de hacer para no sobrescribir las notas en el arreglo
Hola tienes varios problemas de entrada los nombres de las personas los estas manejando como enteros tienes dos opciones o manejarlos como string o un arreglo de char al ver que estas en C++ aconsejo los strings otra cosa es que no estabas guardando correctamente las notas ya que las estabas sobrescribiendo.
Al imprimir no recorrias correctamente los arreglos de notas y nombres de los estudiantes y por eso los datos no eran los correctos, bueno me di a la tarea de modificar tu programa y ya funciona pero tiene detalles.
Código
#include <iostream>
usingnamespace std;
void llenar (string estudiantes[], int notas[]);
void imprimir(string estudiantes[], int notas[]);
int menu ();
//variables
int num=0;
int asignatura=5;
string estudiantes[100];
int posicionesEstudiante=0;
int notas[100];
int posicionNotas=0;
int main()
{
int opc;
do
{
opc=menu();
switch(opc)
{
case1:
llenar(estudiantes, notas);
break;
case2:
imprimir(estudiantes, notas);
break;
case3:
cout<<"\nADIOS"<<endl;
break;
}
}
while(opc !=3);
cin.get();
}
void llenar (string estudiantes[], int notas [])
{
cout<<"Deme el numero de estudiante a insertar: "<<endl<<endl;
cin>>num;
for(int i=0; i<=num-1; i++)
{
cout<<"\nDame el estudiante "<<i+1<<endl;
cin>>estudiantes[posicionesEstudiante];
for(int x=0; x<asignatura; x++)
{
cout<<"\nNota "<<x+1<<" del estudiante "<<i+1<<" :";
cin>>notas[posicionNotas];
posicionNotas++;
}
posicionesEstudiante++;
}
}
void imprimir (string estudiantes [], int notas [])
{
int contador=0;
for(int i=0; i<=posicionesEstudiante-1; i++)
{
cout<<"\nESTUDIANTE "<<i+1<<endl<<endl;
cout<<estudiantes[i]<<endl<<endl;
for(int x=0; x<asignatura; x++)
{
cout<<notas[contador]<<endl;
contador++;
}
}
}
int menu ()
{
int opc;
cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl;
cin>>opc;
return opc;
}
Si quieres puedes reformular tu programa y usar structs para poder tener una mejor abstraccion. Ejemplo:
Código
#include <iostream>
usingnamespace std;
constint NUMERO_ASIGNTURAS=5;
struct Estudiante
{
string nombre;
int asignaturas[NUMERO_ASIGNTURAS];
};
int main(){
Estudiantes estudiantes[100];
return0;
}
Si sabes usar vector o listas enlazadas puedes sustuir los arreglos. Si tienes dudas avisanos saludos...
Crack a ti tambien muchisimas gracias por tomarte la molesta de editar mi codigo para optimizarlo, maneje a los estudiantes como enteros porque todavia no he visto string, pero gracias a tu codigo lo voy analizar y aprendere su uso para adelantarme a los contenidos y estar preparado, corri tu codigo y funciono excelente aplicado desde otra logica con el mismo objetivo.
Muchas gracias a los dos por su buena atencion y su excelente explicacion aprendi bastante, a ese mismo codigo tengo que añardirle la funcion "INSERTAR, BUSCAR y BORRAR" estare publicando mis avances si tengo alguna duda o problema en otro tema mas adelante. ya que este tema me lo resolvieron.
« Última modificación: 23 Julio 2016, 03:35 am por Jesusinfo »