Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jorgecotrinax en 22 Septiembre 2019, 19:10 pm



Título: ayuda lista simple imprecion de datos
Publicado por: jorgecotrinax 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");
}


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: K-YreX 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 =.


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: jorgecotrinax en 22 Septiembre 2019, 22:27 pm
ok muchísimas gracias  ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: Beginner Web 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 ;-)


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: K-YreX 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 


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: jorgecotrinax en 30 Septiembre 2019, 02:15 am
muchas gracias de corazón  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) esot esta mucho mejor sobro hago las de doblemente enlazadas 


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: jorgecotrinax 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 ?


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: K-YreX 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


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: jorgecotrinax 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


Título: Re: AYUDA LISTA SIMPLE IMPRECION DE DATOS
Publicado por: K-YreX 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