Autor
|
Tema: problemas con una linea de codigo c++ (Leído 6,690 veces)
|
eferion
Desconectado
Mensajes: 1.248
|
registroNotas[i].alumno.registrar_estudiantes ;
si "registrar_estudiantes" es una función... tienes que llamarla con los paréntesis: registroNotas[i].alumno.registrar_estudiantes( );
En cuanto al promedio... si lo almacenas en un int estarás perdiendo precisión, ya que un promedio únicamente almacena la parte entera de la operación... estás perdiendo los decimales. Además, te pasa lo mismo que te he comentado antes, si cambias el valor de cNotas, el código no funcionará ya que hace todo "a piñón fijo"... la idea es que uses un bucle para calcular el promedio desde 0 hasta cNotas. float promedio = 0.0; for ( int j=0; j < cNotas; j++ ) promedio += registroNotas[i].notas[ j ]; promedio /= (float)cNotas;
|
|
|
En línea
|
|
|
|
max9100
Desconectado
Mensajes: 14
|
ok ya cambie pero al momento de llamar imprimir el main me da error for (int i=0; i<nestudiante ;i++){ registroNotas [i].imprimir()[i]; }
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Es que esa línea no tiene ningún sentido.
A ver, respira hondo. Se supone que estás aprendiendo... y esto es parte del proceso de aprendizaje... si te doy todo mascado no vas a aprender nada salvo a copiar.
si "imprimir( )" es una función que retorna...nada, por qué le pones después ese ""??
|
|
|
En línea
|
|
|
|
max9100
Desconectado
Mensajes: 14
|
perdon estoy un poco estresado porque lla ni madres sabia que hacer y no soy tan malo en la programacion de c++ bueno esto es lo que tengo en el main int main(){ int nestudiante=0;
cout<<"ingrese cantidad de estudiantes a procesar"; cin>>nestudiante;
for (int i=0; i<nestudiante ;i++){ registrar_notas(nestudiante); }
for (int i=0; i<nestudiante ;i++){ imprimir(nestudiante); }
system("pause");
} pero al momento de que el programa empieza a funcionar pasa algo por ejemplo pongo 2 de los cuales estudiantes quiero ingresar pero 2,1,0,1 jeje ademas no me tira el promedio ni las notas que e ingresado
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
pero al momento de que el programa empieza a funcionar pasa algo por ejemplo pongo 2 de los cuales estudiantes quiero ingresar pero 2,1,0,1 Perdona pero no me he enterado de nada. ademas no me tira el promedio ni las notas que e ingresado Pon el código que tienes, que después de tantos cambios el anterior no es válido. Además, estaría bien que indicases en la etiqueta "code" que el código es de C++ "code=cpp". Así tendrá un aspecto más legible. Un último consejo... tabular el código con espacios hace que sea más legible en el foro que si usas el tabulador.
|
|
|
En línea
|
|
|
|
max9100
Desconectado
Mensajes: 14
|
me refiero a esto que no me sale las notas ni promedio ademas de que el programa tiene un ciclo de 3 no de dos ingrese cantidad de estudiantes a procesar 2 ingresar la informacion del estudiante 0 ingresar cuenta max ingresar nombre max ingresar edad 18 ingresar sexo m ingresar nota 1 45 ingresar nota 2 45 ingresar nota 3 45 ingresar la informacion del estudiante 1 ingresar cuenta max ingresar nombre max ingresar edad 18 ingresar sexo m ingresar nota 1 45 ingresar nota 2 45 ingresar nota 3 45 ingresar la informacion del estudiante 0 ingresar cuenta max ingresar nombre max ingresar edad 18 ingresar sexo m ingresar nota 1 45 ingresar nota 2 45 ingresar nota 3 45 ingresar la informacion del estudiante 1 ingresar cuenta max ingresar nombre max ingresar edad 18 ingresar sexo m ingresar nota 1 45 ingresar nota 2 45 ingresar nota 3 45 0 0 0reprobo 0 0 0reprobo Presione una tecla para continuar . . .
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
for (int i=0; i<nestudiante ;i++){ registrar_notas(nestudiante); }
si a registrar_notas, le pasas siempre nestudiante, obviamente, la función no va a funcionar como esperas. "nestudiante" es una constante... si tu quieres iterar tienes que usar la variable adecuada, en este caso la que recorre todos los valores desde 0 hasta "nestudiante", es decir, "i". for (int i=0; i<nestudiante ;i++){ registrar_notas( i ); }
|
|
|
En línea
|
|
|
|
max9100
Desconectado
Mensajes: 14
|
aqui esta el codigo completo pero me sige tirando el error de las notas y ahora el ciclo me lo tira 1 vez y lo pongo 2.#include<iostream> #include<string> #include <cstdlib> const int cNotas=3, cEstudiantes=100; using namespace std;
struct Estudiante {
string cuenta; string nombre; int edad; char sexo;
void registrar_estudiantes( ){ cout<<"ingresar cuenta ";getchar (); getline(cin,cuenta); cout<<"ingresar nombre ";getchar (); getline(cin,nombre); cout<<"ingresar edad "; cin>>edad; cout<<"ingresar sexo "; cin>>sexo; } };
struct Registro_Notas{ Estudiante alumno; int notas[cNotas]; }; Registro_Notas registroNotas [cEstudiantes ] ;
void registrar_notas(int nestudiante){ for (int i=0;i<nestudiante;i++) { cout<<"ingresar la informacion del estudiante "<<i<<endl; registroNotas[i].alumno.registrar_estudiantes() ; cout<<"ingresar nota 1 "; cin>>registroNotas[i].notas[cNotas] ; cout<<"ingresar nota 2 "; cin>>registroNotas[i].notas[cNotas] ; cout<<"ingresar nota 3 "; cin>>registroNotas[i].notas[cNotas] ; } } float calcular_nta_final(float promedio = 0.0){
for ( int i=0; i < cNotas; i++ ) promedio += registroNotas[i].notas[ i ]; promedio /= (float)cNotas; return promedio ; } void imprimir(int j){
cout << registroNotas[ cEstudiantes ].alumno.cuenta << "\t"<< registroNotas[ cEstudiantes ].alumno.nombre; for ( int i=0; i< cNotas; i++ ) { cout << "\t" << registroNotas[ cEstudiantes ].notas[ i ]; } if(calcular_nta_final()<70) cout<<"aprobo"; else cout<<"reprobo"; cout << endl; } int main(){ int nestudiante=0;
cout<<"ingrese cantidad de estudiantes a procesar "; cin>>nestudiante;
for (int i=0; i<nestudiante ;i++){ registrar_notas(i); }
for (int j=0; j<nestudiante ;j++){ imprimir(j); }
system("pause"); }
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Revisa el código, tiene comentarios con los errores que has cometido. #include <iostream> #include <string> #include <cstdlib> const int cNotas=3, cEstudiantes=100; using namespace std; struct Estudiante { string cuenta; string nombre; int edad; char sexo; void registrar_estudiantes( ) { // *********** // getchar?? no mezcles NUNCA cin con getchar, por favor. // funcionan de forma diferente y mezclarlas puede provocar efectos extraños. // *********** cout <<"ingresar cuenta "; cin >> cuenta; cout <<"ingresar nombre "; cin >> nombre; cout <<"ingresar edad "; cin >> edad; cout <<"ingresar sexo "; cin >> sexo; } }; struct Registro_Notas { Estudiante alumno; int notas[cNotas]; }; Registro_Notas registroNotas [cEstudiantes ] ; void registrar_notas(int nestudiante) { // *********** // nestudiante es el indice del estudiante actual... el bucle sobra // *********** // *********** // Si cambias 'i' por 'i+1' le das al usuario un indice mas legible // *********** cout<<"ingresar la informacion del estudiante "<< (nestudiante+1) <<endl; registroNotas[ nestudiante ].alumno.registrar_estudiantes( ); // *********** // cNotas es una constante... la idea es usar un bucle // *********** for ( int j = 0; j < cNotas; j++ ) { cout << "ingresar nota " << j+1 << " "; cin >> registroNotas[ nestudiante ].notas[ j ]; } } // *********** // promedio no es un argumento de la funcion... no tiene sentido // lo que si tienes que pasarle es el indice del estudiante // *********** float calcular_nota_final( int estudiante ) { float promedio = 0.0; for ( int i=0; i < cNotas; i++ ) promedio += registroNotas[ estudiante ].notas[ i ]; promedio /= (float)cNotas; return promedio ; } // *********** // j ??? que narices es j??? y si cambiamos j por estudiante ??? ahora queda mas claro, no? // Pues eso. // Ahora queda claro que todos los usos de cEstudiantes que tienes en esta funcion // son incorrectos // *********** void imprimir(int estudiante) { cout << registroNotas[ estudiante ].alumno.cuenta << "\t" << registroNotas[ estudiante ].alumno.nombre << "\t"; for ( int i=0; i< cNotas; i++ ) cout << registroNotas[ estudiante ].notas[ i ] << "\t"; // *********** // Se supone que 100 es la nota máxima, no?? // Entonces se aprobara si la nota es superior a 70, no inferior. // *********** if( calcular_nota_final( estudiante ) > 70.0) cout<<"aprobo"; else cout<<"reprobo"; cout << endl; } int main() { int nestudiante=0; cout<<"ingrese cantidad de estudiantes a procesar "; cin>>nestudiante; cout << endl << "###" << nestudiante << "###" << endl; // *********** // Si nestudiante >= cEstudiante la aplicacion va a dar error, deberias controlar eso // *********** for (int i=0; i<nestudiante ;i++) { registrar_notas(i); } // *********** // Detalle: aqui puedes reutilizar i sin problemas. // *********** for (int i=0; i<nestudiante ;i++) { imprimir(i); } system("pause"); // *********** // Detalle: aunque el compilador lo ponga por defecto, pon este return siempre. // *********** return 0; }
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pasar codigo a una linea
« 1 2 3 »
PHP
|
dimitrix
|
22
|
8,844
|
28 Junio 2007, 10:52 am
por dimitrix
|
|
|
Repetir una línea de código
.NET (C#, VB.NET, ASP)
|
Krata
|
5
|
4,882
|
27 Febrero 2008, 23:51 pm
por Sin Nick xD
|
|
|
Pasar de una linea de codigo a otro sin perder la secuencia del codigo en vb
Programación Visual Basic
|
plak
|
2
|
2,600
|
28 Junio 2014, 03:13 am
por plak
|
|
|
Conoce al hombre que destruyó su compañía con una línea de código
Noticias
|
wolfbcn
|
0
|
2,060
|
15 Abril 2016, 15:21 pm
por wolfbcn
|
|
|
Limpiar una linea de codigo[c++]
Programación C/C++
|
ianmorar03
|
1
|
2,877
|
28 Junio 2016, 01:38 am
por AlbertoBSD
|
|