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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda lista simple imprecion de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda lista simple imprecion de datos  (Leído 3,128 veces)
jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
ayuda lista simple imprecion de datos
« en: 22 Septiembre 2019, 19:10 pm »

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 :xD :xD :xD :xD


Código:
#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
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #1 en: 22 Septiembre 2019, 19:24 pm »

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.
Código
  1. class Estudiante{
  2.    public:
  3.        char codigo[5];
  4.        string nombre;
  5.        float poderado;
  6.        Estudiante* siguiente;
  7.  
  8.        Estudiante( char* cod, string nom,float pode ){
  9.            cod=codigo; // esta al reves
  10.            nom =nombre; // esta al reves
  11.            pode = poderado; // esta al reves
  12.            siguiente = NULL;
  13.        }
  14. };
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

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #2 en: 22 Septiembre 2019, 22:27 pm »

ok muchísimas gracias  ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #3 en: 25 Septiembre 2019, 07:53 am »

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.
Código
  1. class Estudiante{
  2.    public:
  3.        char codigo[5];
  4.        string nombre;
  5.        float poderado;
  6.        Estudiante* siguiente;
  7.  
  8.        Estudiante( char* cod, string nom,float pode ){
  9.            cod=codigo; // esta al reves
  10.            nom =nombre; // esta al reves
  11.            pode = poderado; // esta al reves
  12.            siguiente = NULL;
  13.        }
  14. };
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
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #4 en: 25 Septiembre 2019, 11:32 am »

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:
Código
  1. A->siguiente = B;
Lo que hace es:
Código
  1. B->siguiente = cabeza; // en este caso cabeza es A
  2. cabeza = B;
Por lo que si inserta los estudiantes A, B, C, D, la lista quedaría de la siguiente manera:
Código:
D(cabeza)->C->B->A->NULL 
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #5 en: 30 Septiembre 2019, 02:15 am »

muchas gracias de corazón  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) esot esta mucho mejor sobro hago las de doblemente enlazadas 
En línea

jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #6 en: 30 Septiembre 2019, 04:45 am »

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.
Código
  1. class Estudiante{
  2.    public:
  3.        char codigo[5];
  4.        string nombre;
  5.        float poderado;
  6.        Estudiante* siguiente;
  7.  
  8.        Estudiante( char* cod, string nom,float pode ){
  9.            cod=codigo; // esta al reves
  10.            nom =nombre; // esta al reves
  11.            pode = poderado; // esta al reves
  12.            siguiente = NULL;
  13.        }
  14. };
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
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #7 en: 30 Septiembre 2019, 15:38 pm »

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. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #8 en: 30 Septiembre 2019, 16:07 pm »

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. :-X

esto lo ise a proposito por que me daba error si lo ponia correctamente
Código:
 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]
Código:
char codigo[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
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
« Respuesta #9 en: 1 Octubre 2019, 01:39 am »

esto lo ise a proposito por que me daba error si lo ponia correctamente
Código:
 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]
Código:
char codigo[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
Lo siento pero sigues sin ser específico. Igual soy yo pero sigo sin entender tu duda... pusiste [5], dónde?? :huh: :huh:
Citar
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>):
Código
  1. Estudiante(char *codigo, string nombre, float poderado){
  2.    this->nombre = nombre; // this->nombre es el del objeto y nombre solo es el parametro
  3.    this->poderado = poderado;
  4.    this->siguiente = NULL; // se puede omitir pero poniendolo se ve mejor que es un atributo del objeto
  5.    strncpy(this->codigo, codigo, X); // asi copias en this->codigo los X primeros caracteres de codigo
  6. }
Si una vez más no he acertado con la interpretación pues bueno, una explicación que te llevas de regalo... :rolleyes: :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con esta lista encadenada simple
.NET (C#, VB.NET, ASP)
alonsomzo 0 3,299 Último mensaje 3 Abril 2009, 00:39 am
por alonsomzo
LISTA SIMPLE
Programación C/C++
m87 4 2,913 Último mensaje 5 Junio 2010, 05:48 am
por [D4N93R]
AYUDA ORDENAR LISTA SIMPLE[C]
Programación C/C++
HRSLASH 0 9,285 Último mensaje 23 Abril 2011, 04:22 am
por HRSLASH
Lista circular simple (LCS)
Programación C/C++
Cpp 1 2,334 Último mensaje 11 Diciembre 2014, 01:50 am
por engel lex
Lista simple -- Error
Programación C/C++
eduardo1012 0 1,663 Último mensaje 17 Noviembre 2016, 03:19 am
por eduardo1012
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines