Autor
|
Tema: ayuda lista simple imprecion de datos (Leído 3,128 veces)
|
jorgecotrinax
Desconectado
Mensajes: 28
|
trabajo con visual studio 2015 el problema es que al imprimir los datos estos no se muestran solo se muestra caracteres sin sentido por favor ayúdenme pdt : ignoren la funcion burbuja trataba de ordenar la lista simpre por ese metodo seleccionado ponderado pero creo que solo muevo el dato y no todos xD #include<iostream> #include<string.h> using namespace std;
class Estudiante { public: char codigo[5]; string nombre; float poderado; Estudiante* siguiente; Estudiante( char* cod, string nom,float pode ) { cod=codigo; nom =nombre; pode = poderado; siguiente = NULL; } };
class NodoSimple { public: Estudiante* cabeza; NodoSimple() { cabeza = NULL; }
void insertar(char* cod, string nom, float pode) { Estudiante * nuevo = new Estudiante(cod, nom, pode); if (!cabeza) { cabeza = nuevo; } else { nuevo->siguiente = cabeza; cabeza = nuevo; } }
void imprimirburbuja() { float t; Estudiante* aux = cabeza; while (cabeza->siguiente) { aux = cabeza->siguiente; while (aux) { if (cabeza->poderado>aux->poderado) { t = aux->poderado; aux->poderado = cabeza->poderado; cabeza->poderado = t; } aux = aux->siguiente; } cabeza = cabeza->siguiente; aux = cabeza->siguiente; } }
void imprimir() { Estudiante* aux = cabeza; while (aux) { cout << "listade alumnos" << endl; cout << aux->codigo << endl; cout << aux->nombre.c_str() << endl; cout << aux->poderado << endl; aux = aux->siguiente;
} cout <<"-----------------------------"<< endl; } };
int main() { NodoSimple milista; milista.insertar("asas", "carlos", 18); milista.insertar("asss", "lucas", 11); milista.insertar("aaaa", "mateo", 10); milista.insertar("asss", "marcos", 8);
milista.imprimir();
system("pause"); }
|
|
« Última modificación: 7 Octubre 2019, 19:18 pm por jorgecotrinax »
|
En línea
|
|
|
|
K-YreX
|
Sólo he llegado hasta la clase <Estudiante> pero ya te puedo decir que el error (o al menos uno de ellos) está en el constructor. class Estudiante{ public: char codigo[5]; string nombre; float poderado; Estudiante* siguiente; Estudiante( char* cod, string nom,float pode ){ cod=codigo; // esta al reves nom =nombre; // esta al reves pode = poderado; // esta al reves siguiente = NULL; } };
Cada objeto de la clase <Estudiante> tiene 4 datos miembros que son: <codigo>, <nombre>, <poderado> y <siguiente>. Los datos miembros no son <cod>, <nom> y <pode>. Estos últimos son los nombres que tendrán los parámetros del constructor mientras este se ejecuta. Estos nombres son temporales y en cada función pueden tener nombres distintos. Aparte de eso cuidado al guardar el código. Para "copiar" cadenas de tipo C (o dicho de otra manera, arrays de <char>) debes usar métodos como <strcpy()> o más recomendable <strncpy()>. No vale con usar el operador de igual =.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Sólo he llegado hasta la clase <Estudiante> pero ya te puedo decir que el error (o al menos uno de ellos) está en el constructor. class Estudiante{ public: char codigo[5]; string nombre; float poderado; Estudiante* siguiente; Estudiante( char* cod, string nom,float pode ){ cod=codigo; // esta al reves nom =nombre; // esta al reves pode = poderado; // esta al reves siguiente = NULL; } };
Cada objeto de la clase <Estudiante> tiene 4 datos miembros que son: <codigo>, <nombre>, <poderado> y <siguiente>. Los datos miembros no son <cod>, <nom> y <pode>. Estos últimos son los nombres que tendrán los parámetros del constructor mientras este se ejecuta. Estos nombres son temporales y en cada función pueden tener nombres distintos. Aparte de eso cuidado al guardar el código. Para "copiar" cadenas de tipo C (o dicho de otra manera, arrays de <char>) debes usar métodos como <strcpy()> o más recomendable <strncpy()>. No vale con usar el operador de igual =. Perdon que interrumpa pero me gustaría saber como trabajas con ese atributo Estudiante* siguiente; Como sabes cual es su siguiente si creas secuencialmente a los estudiantes A, B y C por ejemplo estudiante A luego B, C o sea como es que A va a tener a B y B a C, u otro caso al crear A, B, C este A tendrá a B y C, y B a C y C a NULL, bueno algo asi
|
|
|
En línea
|
7w7
|
|
|
K-YreX
|
Perdon que interrumpa pero me gustaría saber como trabajas con ese atributo Estudiante* siguiente; Como sabes cual es su siguiente si creas secuencialmente a los estudiantes A, B y C por ejemplo estudiante A luego B, C o sea como es que A va a tener a B y B a C, u otro caso al crear A, B, C este A tendrá a B y C, y B a C y C a NULL, bueno algo asi Al parecer la función <insertar()> trabaja como si de una pila se tratase. Crea el primer estudiante A y hace <cabeza = A>. Luego crea al estudiante B pero en lugar de hacer: A->siguiente = B;
Lo que hace es: B->siguiente = cabeza; // en este caso cabeza es A cabeza = B;
Por lo que si inserta los estudiantes A, B, C, D, la lista quedaría de la siguiente manera:
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
jorgecotrinax
Desconectado
Mensajes: 28
|
Sólo he llegado hasta la clase <Estudiante> pero ya te puedo decir que el error (o al menos uno de ellos) está en el constructor. class Estudiante{ public: char codigo[5]; string nombre; float poderado; Estudiante* siguiente; Estudiante( char* cod, string nom,float pode ){ cod=codigo; // esta al reves nom =nombre; // esta al reves pode = poderado; // esta al reves siguiente = NULL; } };
Cada objeto de la clase <Estudiante> tiene 4 datos miembros que son: <codigo>, <nombre>, <poderado> y <siguiente>. Los datos miembros no son <cod>, <nom> y <pode>. Estos últimos son los nombres que tendrán los parámetros del constructor mientras este se ejecuta. Estos nombres son temporales y en cada función pueden tener nombres distintos. Aparte de eso cuidado al guardar el código. Para "copiar" cadenas de tipo C (o dicho de otra manera, arrays de <char>) debes usar métodos como <strcpy()> o más recomendable <strncpy()>. No vale con usar el operador de igual =. si se eso que esta al reves es que no me lo aceptaba me parecio raro probe quitando la cantidad de datos que quiero "[4]" y me permitio hacerlo como es correctamente pero como hago cunado me piden una cantidad fija de datos ?
|
|
|
En línea
|
|
|
|
K-YreX
|
si se eso que esta al reves es que no me lo aceptaba me parecio raro probe quitando la cantidad de datos que quiero "[4]" y me permitio hacerlo como es correctamente pero como hago cunado me piden una cantidad fija de datos ?
No sé a que te refieres con eso último. Si tienes un constructor con 3 parámetros, cuando crees un objeto, debes hacerlo con 3 parámetros. Si a lo que te refieres es a poder crear objetos pasando 3 parámetros o pasando otro número de parámetros lo que debes hacer es sobrecargar el constructor con otro número de parámetros. Si no te refieres a eso, intenta explicármelo otra vez de otra forma para que pueda ayudarte. Podrías ponerme cómo lo tenías y qué era lo que no te dejaba o qué es lo que quieres poder hacer.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
jorgecotrinax
Desconectado
Mensajes: 28
|
No sé a que te refieres con eso último. Si tienes un constructor con 3 parámetros, cuando crees un objeto, debes hacerlo con 3 parámetros. Si a lo que te refieres es a poder crear objetos pasando 3 parámetros o pasando otro número de parámetros lo que debes hacer es sobrecargar el constructor con otro número de parámetros. Si no te refieres a eso, intenta explicármelo otra vez de otra forma para que pueda ayudarte. Podrías ponerme cómo lo tenías y qué era lo que no te dejaba o qué es lo que quieres poder hacer. esto lo ise a proposito por que me daba error si lo ponia correctamente Estudiante( char* cod, string nom,float pode ){ cod=codigo; // esta al reves nom =nombre; // esta al reves pode = poderado; // esta al reves siguiente = NULL; } al parecer era por la cantidad de datos que puse [5] lo quite [5]y me codigo se ejecuto correctamente la pregunta como hago para yo elegir la cantidad de datos de cada archivo o debo usar solamente uso el tipo de dato correcto al fina solo trato de hacer esto -> https://drive.google.com/open?id=1LD0zBfxs1FsDMGSTp1th0zlob7P6HxkR
|
|
|
En línea
|
|
|
|
K-YreX
|
esto lo ise a proposito por que me daba error si lo ponia correctamente Estudiante( char* cod, string nom,float pode ){ cod=codigo; // esta al reves nom =nombre; // esta al reves pode = poderado; // esta al reves siguiente = NULL; } al parecer era por la cantidad de datos que puse [5] lo quite [5]y me codigo se ejecuto correctamente la pregunta como hago para yo elegir la cantidad de datos de cada archivo o debo usar solamente uso el tipo de dato correcto al fina solo trato de hacer esto -> https://drive.google.com/open?id=1LD0zBfxs1FsDMGSTp1th0zlob7P6HxkRLo siento pero sigues sin ser específico. Igual soy yo pero sigo sin entender tu duda... pusiste [5], dónde?? como hago para yo elegir la cantidad de datos de cada archivo Te refieres al largo de la variable <cod> y <codigo>?? Eso tienes que controlarlo con otra variable. Cuando pasas a esa función el parámetro <cod>, estás pasando la dirección de memoria en la que empieza el código <cod> pero para saber cuándo acaba o cómo de largo es, debes pasar otro parámetro que sea el largo. Si te da igual lo largo que sea <cod> porque en <codigo> vas a copiar sus X primeros caracteres podrías hacer algo como (de paso te pongo cómo hacer estas cosas sin andar cambiando nombres usando la partícula <this>): Estudiante(char *codigo, string nombre, float poderado){ this->nombre = nombre; // this->nombre es el del objeto y nombre solo es el parametro this->poderado = poderado; this->siguiente = NULL; // se puede omitir pero poniendolo se ve mejor que es un atributo del objeto strncpy(this->codigo, codigo, X); // asi copias en this->codigo los X primeros caracteres de codigo }
Si una vez más no he acertado con la interpretación pues bueno, una explicación que te llevas de regalo...
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda con esta lista encadenada simple
.NET (C#, VB.NET, ASP)
|
alonsomzo
|
0
|
3,299
|
3 Abril 2009, 00:39 am
por alonsomzo
|
|
|
LISTA SIMPLE
Programación C/C++
|
m87
|
4
|
2,913
|
5 Junio 2010, 05:48 am
por [D4N93R]
|
|
|
AYUDA ORDENAR LISTA SIMPLE[C]
Programación C/C++
|
HRSLASH
|
0
|
9,285
|
23 Abril 2011, 04:22 am
por HRSLASH
|
|
|
Lista circular simple (LCS)
Programación C/C++
|
Cpp
|
1
|
2,334
|
11 Diciembre 2014, 01:50 am
por engel lex
|
|
|
Lista simple -- Error
Programación C/C++
|
eduardo1012
|
0
|
1,663
|
17 Noviembre 2016, 03:19 am
por eduardo1012
|
|