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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas con una linea de codigo c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problemas con una linea de codigo c++  (Leído 6,714 veces)
max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
problemas con una linea de codigo c++
« en: 8 Abril 2014, 08:04 am »

buenas tengo un programa con  lo siguiente esto es lo que me pieden
Escribir un programa que contenga los siguientes elementos:
1. Dos constantes de tipo entero cNotas = 3 y cEstudiantes = 100
2. Dos estructuras una llamada Estudiante y la otra llamada Notas.
3. La estructura Estudiante debe contener los siguientes atributos:
a. string cuenta
b. string nombre
c. int edad
d. char sexo
4. La estructura Estudiante debe contener los siguientes métodos:
a. Registrar_Estudiante: Donde se ingresan los datos del estudiante.
5. La Estructura RegistroNotas debe contener los siguientes atributos:
a. Estudiante alumno[cEstudiantes]
b. int notas[cNotas]
6. La Estructura RegistroNotas, debe recibir la cantidad de estudiantes a
procesar, además debe contener los siguientes métodos:
a. Registrar_Notas: Que realiza las siguientes acciones:
i. Un ciclo para operar la cantidad de Estudiantes.
ii. Invocar el método Registrar_Estudiante del objeto alumno.
iii. Solicitar las tres notas parciales
b. Calcular_NotaFinal: Que obtendrá el promedio de las tres notas
c. Imprimir_CuadroNotas: Debe recibir la cantidad de estudiantes
procesados, donde se imprimirá el cuadro de Notas, los datos a
imprimir son los siguientes:
i. cuenta
ii. nombre
iii. notas (se imprimirá las tres notas)
iv. nota final
v. El programa determinará quién es el estudiante con mayor Nota y el número de aprobados y reprobados.
7. Crear un procedimiento principal que realice las siguientes acciones
a. Crear un objeto de RegistroNotas RN
b. Solicitar el número de estudiantes a procesar
c. Invocar el método Registrar_Notas del objeto RN, pasando el número de estudiantes a procesar.
d. Invocar el método Imprimir_CuadroNotas del objeto RN, pasando el número de estudiantes procesados.

este es mi codigo
Código:
#include<iostream>
#include<string>
const int cNotas=3, cEstudiantes=100;
using namespace std;



struct estudiante {
string cuenta;
string nombre;
int edad;
char sexo;

void registrar_estudiantes(string cuenta ,string nombre ,int edad,char sexo ){
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 Notas{
estudiante alumno[cEstudiantes],ptom;
int notas[cNotas];

void registrar_notas(int nestudiante){
for (int i=0;nestudiante>i;i++)
{
cout<<"ingresar la informacion del estudiante "<<i<<endl;
alumno[i].registrar_estudiantes() ;
cout<<"ingresar nota 1";
cin>>notas[0];
cout<<"ingresar nota 2";
cin>>notas[1];
cout<<"ingresar nota 3";
cin>>notas[2];
}
}
int calcular_nta_final( estudiante alumno){

int promedio =(notas[0]+notas[1]+notas[2])/3;
return promedio;
}
void imprimir(int nestudiante){
//cout<<"cuenta/tnombre/tedad/tsexo/tnota[1]/tnota[2]/tnota[3]/tpromedio/n";
for (int i=0; i<nestudiante;i++){
cout<<"cuenta\tnombre\tedad\tsexo\tnota[1]\tnota[2]\tnota[3]\tpromedio/n";
cout<<   estudiante::cuenta<<"\t"<<estudiante::nombre <<"\t"<<notas [0]<<"\t" <<notas [1]<<"\t"<< notas [2]<<"\t"<<&Notas::calcular_nta_final <<"\t";
}
}

};

void main(){
int nestudiante=0;
int A[cEstudiantes];
Notas RN;
cout<<"ingrese cantidad de estudiantes a procesar";
cin>>nestudiante;
(A);
RN.registrar_notas(nestudiante);
RN.imprimir (nestudiante);
system("pause");

}

tengo el siguiente problema
Código:
void imprimir(int nestudiante){
//cout<<"cuenta/tnombre/tedad/tsexo/tnota[1]/tnota[2]/tnota[3]/tpromedio/n";
for (int i=0; i<nestudiante;i++){
cout<<"cuenta\tnombre\tedad\tsexo\tnota[1]\tnota[2]\tnota[3]\tpromedio/n";
cout<< estudiante::cuenta<<"\t"<<estudiante::nombre<<   "\t"<<notas [0]<<"\t" <<notas [1]<<"\t"<< notas [2]<<"\t"<<&Notas::calcular_nta_final <<"\t";
}
}
no puedo mandar a imprimir ademas de el promedio no me lo tira  y cuando lo quiero hacer 
Código:
calcular_nta_final
me tira que use
Código:
&Notas::calcular_nta_final


« Última modificación: 8 Abril 2014, 08:14 am por max9100 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #1 en: 8 Abril 2014, 08:57 am »

Con todos mis respetos, el que te está enseñando a programar no tiene ni la más remota idea de cómo se ha de estructurar un programa:

* En C++ lo lógico es usar "class" en vez de "struct"... son bastante parecidas, pero no iguales.

* No tiene sentido usar clases o estructuras sin conocer, al menos, el uso de los constructores por defecto. En tu práctica ni se menciona este elemento.

* No tienen ningún sentido que una clase almacene datos y se comunique con el usuario a la vez.

* Las variables de una clase o estructura deberían estar, como norma general, siempre en la parte privada. Para interactuar con ellas se implementan funciones para leer y modificar dichas variables.

* En C++ existen un tipo de clases, denominadas contenedores, que te permiten almacenar colecciones de elementos de una forma sencilla y rápida. Los arrays de C, como los que te propone usar, dan muchísimos problemas si no se usan con extremo cuidado.

Alguno me podrá decir que sí, pero que estás aprendiendo... razón de más para asentar una buena base desde el principio... en vez de llenar la cabeza con ideas que no sirven de mucho.

Vale, ya me he desahogado, ahora, retomando tu práctica te comento:

Código:
5. La Estructura RegistroNotas debe contener los siguientes atributos:
a. Estudiante alumno[cEstudiantes]
b. int notas[cNotas]

Vamos a ver, si para cada alumno hay que almacenar tres notas... que (perdón por la expresión) ***** de diseño es este?? Ahí únicamente hay 2 vectores independientes... es como tener una lista de tus amigos por un lado y, por otro, una lista de teléfonos (contando con que para cada amigo puedes tener varios números ) ... no hay relación entre ellos.

Podría tener más sentido un diseño tal que

Código
  1. // Estructura coherente
  2. struct RegistroNotas
  3. {
  4.  Estudiante alumno;
  5.  int notas[ cNotas ];
  6. };
  7.  
  8. // Array de RegistroNotas... ahora si, cada estudiante tiene sus tres parciales.
  9. RegistroNotas[ cEstudiantes ] registroNotas;

Sigo defendiéndolo... quien te está enseñando no tiene ni idea y encima se explica fatal.

Ahora, partiendo de este diseño...

Código
  1. cout<<   estudiante::cuenta<<"\t"<<estudiante::nombre <<"\t"<<notas [0]<<"\t" <<notas [1]<<"\t"<< notas [2]<<"\t"

la forma de acceder a las variables no es con el operador '::' eso está reservado para el caso de miembros estáticos.

En tu caso es con el operador '.'

Código
  1. cout << registroNotas[ nEstudiante ].alumno.cuenta << "\t"
  2.     << registroNotas[ nEstudiante ].alumno.nombre << "\t"
  3.     << registroNotas[ nEstudiante ].notas[ 0 ] << "\t"
  4.     << registroNotas[ nEstudiante ].notas[ 1 ] << "\t"
  5.     << registroNotas[ nEstudiante ].notas[ 2 ] << endl;

"registroNotas" es el nombre del array, el que he puesto antes. Como "registroNotas" es un array, necesito usar "nEstudiante" para acceder a una posición concreta... en esta posición me voy a encontrar con una estructura de tipo "RegistroNotas", que contiene un miembro "alumno" que es de tipo "Estudiante" y un array de tipo int llamado "notas"... el resto del código sigue la misma lógica.

En cualquier caso, dado que el número de notas viene definido por la constante "cNotas", la impresión debería quedar tal que:

Código
  1. cout << registroNotas[ nEstudiante ].alumno.cuenta << "\t"
  2.     << registroNotas[ nEstudiante ].alumno.nombre;
  3.  
  4. for ( int i=0; i< cNotas; i++ )
  5. {
  6.  cout  << "\t" << registroNotas[ nEstudiante ].notas[ i ];
  7. }
  8.  
  9. cout << endl;

Así, si cambias la constante cNotas, el código se adaptará de forma automática.


« Última modificación: 8 Abril 2014, 09:12 am por eferion » En línea

max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #2 en: 8 Abril 2014, 09:18 am »

bueno gracias por tu sugerencia pero me sale el siguiente error en lo primero que dices
Código:
struct Registro_Notas{
estudiante alumno;
int notas[cNotas];
};
Registro_Notas [cEstudiantes ] Registro_Notas ;

el erroe es el siguiente
Código:
error C2143: syntax error : missing ';' before '['
error C2337: 'cEstudiantes' : attribute not found
« Última modificación: 8 Abril 2014, 09:28 am por max9100 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #3 en: 8 Abril 2014, 09:26 am »

cambia estudiante por Estudiante...

y luego

Registro_Notas registorNotas[cEstudiantes ];
En línea

max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #4 en: 8 Abril 2014, 09:33 am »

lo e cambiado pero sigue en lo mismo solo se puede con el array o tengo que cambiar la srtruct a class???
errores solo de ese cambio a array
Código:
error C2337: 'cEstudiantes' : attribute not found
error C2337: 'cEstudiantes' : attribute not found
error C2470: 'RegistroNotas' : looks like a function definition, but there is no parameter list; skipping apparent body
En línea

max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #5 en: 8 Abril 2014, 09:33 am »

lo e cambiado pero sigue en lo mismo solo se puede con el array o tengo que cambiar la srtruct a class???
errores solo de ese cambio a array
Código:
error C2337: 'cEstudiantes' : attribute not found
error C2337: 'cEstudiantes' : attribute not found
error C2470: 'RegistroNotas' : looks like a function definition, but there is no parameter list; skipping apparent body
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #6 en: 8 Abril 2014, 09:38 am »

cEstudiantes es la constante que tienes que tener definida al inicio del programa.

En qué línea te da el error?? que código tienes en esa línea?? y en las anteriores??
En línea

max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #7 en: 8 Abril 2014, 09:43 am »

Código:
#include<iostream>
#include<string>
 
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;
}
};
los errores solo empiezan desde el cambio de la structura después por cambio de strctura ay de declara miento de cnotas y de estudiante.
Código:
struct registroNotas{
Estudiante alumno;
int notas[cNotas];
};
solo en esta linea estan los primeros 3 errores
Código:
registroNotas [cEstudiantes ] registroNotas ;

Código:
error C2143: syntax error : missing ';' before '['
error C2337: 'cEstudiantes' : attribute not found
error C2470: 'RegistroNotas' : looks like a function definition, but there is no parameter list; skipping apparent body
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #8 en: 8 Abril 2014, 09:46 am »

cambia estudiante por Estudiante...

y luego

Registro_Notas registroNotas[cEstudiantes ];

El segundo cambio no lo has aplicado
En línea

max9100

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: problemas con una linea de codigo c++
« Respuesta #9 en: 8 Abril 2014, 09:58 am »

 :D :Dlisto yya me quito el error
pero me sige sacando un error en el siguiente linea de codigo
Código:
for (int i=0;nestudiante>i;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] ;
}
}

Código:
registroNotas[i].alumno.registrar_estudiantes ;

Código:
error C3867: 'Estudiante::registrar_estudiantes': function call missing argument list; use '&Estudiante::registrar_estudiantes' to create a pointer to member

ese error sige aparecieondo y no c porque


y en la parte de sacar el promedio no se si esta bien la linea de codigo
Código:
int calcular_nta_final(){
for (int i=0;cNotas >i;i++)
{
int promedio =(registroNotas[i].notas[0] +registroNotas[i].notas[1]+registroNotas[i].notas[2])/3;
return promedio;
}
}
« Última modificación: 8 Abril 2014, 10:09 am por max9100 » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar codigo a una linea « 1 2 3 »
PHP
dimitrix 22 8,878 Último mensaje 28 Junio 2007, 10:52 am
por dimitrix
Repetir una línea de código
.NET (C#, VB.NET, ASP)
Krata 5 4,891 Último mensaje 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,614 Último mensaje 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,088 Último mensaje 15 Abril 2016, 15:21 pm
por wolfbcn
Limpiar una linea de codigo[c++]
Programación C/C++
ianmorar03 1 2,882 Último mensaje 28 Junio 2016, 01:38 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines