Foros del Web » Programación para mayores de 30 ;) » C/C++ »

A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Estas en el tema de A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases en el foro de C/C++ en Foros del Web. Hola a todos, les comento mi problema, tengo que hacer una lista enlazada donde a medida que ingreso los datos los tengo que ordenar, luego ...
  #1 (permalink)  
Antiguo 01/08/2011, 16:27
 
Fecha de Ingreso: agosto-2011
Ubicación: Rivadavia
Mensajes: 4
Antigüedad: 13 años, 3 meses
Puntos: 0
A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Hola a todos, les comento mi problema, tengo que hacer una lista enlazada donde a medida que ingreso los datos los tengo que ordenar, luego mostrarlo, encare el tema usando clases, pero cuando lo compilo me da errores y no se como se solucionan.. pasa que soy nuevo en esto de POO, para hacerlo use el Dev-C++, espero puedan ayudarme.. desde ya muchas gracias..
este es el codigo del programa::

//**************************************************

// esta es la declaracion de la clase lista


#ifndef LISTA_H
#define LISTA_H
#include "nodo.h"

/*
* con esta clase creo la lista
*/
class lista
{
private:
nodo cabeza; // cabeza es un dato tipo nodo

public:
// class constructor
lista();
// class destructor
~lista();
bool InsertarOrdenado(int nuevodato );
void MostrarLista();
};

#endif // LISTA_H

//************************************************

// esta es la declaracion de la clase nodo

ifndef NODO_H
#define NODO_H


class nodo
{
private:
int valor;
nodo *sig;

public:
// class constructor
nodo();
// class destructor
~nodo();

//nodo (int valornuevo,nodo sigui);
nodo VerSiguiente();
int VerDato();
void AsignarDato(int nuevo);
void AsignarSiguiente(nodo siguiente);
};

//************************************************** ****

// esta es la definicion de los metodos de la clase lista

#include "nodo.h"
#include "lista.h" // class's header file
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

// class constructor
lista::lista()
{
cabeza= NULL; // esto lo agregue 2011cabeza= NULL;
}

// class destructor
lista::~lista()


bool lista::InsertarOrdenado(int nuevodato)

{
lista lista=new lista (); //
nodo nuevo; //
nuevo = new nodo(); //
nuevo.AsignarDato(int nuevo); //
nuevo.AsignarSiguiente(cabeza); // me parece que el error esta aca.
nuevo = cabeza; //
try
{
if (cabeza == null)
cabeza = nuevo;
else
{
nodo actual = cabeza;
nodo ant = actual;
while ((actual != null)&& (actual.VerDato() < nuevo.VerDato()))
{
ant = actual;
actual = actual.VerSiguiente();
}
ant.AsignarSiguiente(nuevo);
nuevo.AsignarSiguiente(actual);
return true;
}
return true;
}
return false
}

void lista::MostrarLista()
{
nodo actual=cabeza;
while ((actual != null))
{
cout << actual.VerDato()<< endl;
actual = actual.VerSiguiente();
}
}

//********************************************

//esta es la definicion de los metodos dela clase nodo


#include <iostream.h>
#include "nodo.h" // class's header file
#include "lista.h"


using std::cout;
using std::cin;
using std::endl;

// class constructor
nodo::nodo()
{
// insert your code here
}

// class destructor
nodo::~nodo()
{
// insert your code here
}


//nodo nodo::nodo(int valornuevo,nodo sigui)
//{
// valor = valornuevo;
// sig = sigui;
//}

nodo nodo::VerSiguiente()
{
return sig;
}

int nodo::VerDato()
{
return valor;
}

void nodo::AsignarDato(int nuevo)
{
valor = nuevo;
}

void nodo::AsignarSiguiente(nodo siguiente)
{
sig = siguiente;
}


//*******************************************

// este es el programa principal...


#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include "nodo.h"
#include "lista.h"


using namespace std;

int main(int argc, char *argv[])
{ lista lista;
int dato;
//lista = new lista();
cout<<"\n\n Ingrese Dato Cero (0) para finalizar\n"<<endl;
cin>>dato;
while (dato != 0) // si el dato es cero salgo del programa
{
//nodo nuevo = new nodo(dato,null);
lista.InsertarOrdenado(dato);
cout<<"\n\n Ingrese Dato Cero (0) para finalizar\n"<<endl;
cin>>dato;
}
cout<<"\n\n La Lista de datos es:\n"<<endl;
lista.MostrarLista();

system("PAUSE");
return EXIT_SUCCESS;
}



este programita lo hice en C# ( que me parecio mas entendible y luego cuando lo hice en C++ tuve los problemas..) este es el codigo en C#, y funciona bien..



using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class nodo
{
int valor;
nodo sig;
//constructor
public nodo(int valornuevo,nodo sigui)
{
valor = valornuevo;
sig = sigui;
}

public nodo VerSiguiente()
{ return sig; }

public int VerDato()
{ return valor; }

public void AsignarDato(int nuevo)
{ valor = nuevo; }

public void AsignarSiguiente(nodo siguiente)
{
sig = siguiente;
}

}
class lista
{
nodo cabeza;

public lista()
{
cabeza = null;
}

public bool lnsertarOrdenado(nodo nuevo)
{
try
{
if (cabeza == null)//true: lista vacia
cabeza = nuevo;
else
{
nodo actual = cabeza;
nodo ant = actual;//anterior apunta a lo que apunta actual.
while ((actual != null) && (actual.VerDato() < nuevo.VerDato()))
{
ant = actual;
actual = actual.VerSiguiente();
}
ant.AsignarSiguiente(nuevo);
nuevo.AsignarSiguiente(actual);
return true;
}
return true;
}
catch (Exception e) { Console.WriteLine(e.Message); }
return false;
}

public void MostrarLista()
{
nodo actual=cabeza;
while ((actual != null))
{
Console.WriteLine(actual.VerDato());
actual = actual.VerSiguiente();
}
}
}
class Program
{
static void Main(string[] args)
{
int dato=1;
lista lista = new lista();
Console.WriteLine("Ingrese Dato. Cero para finalizar");
dato = Int32.Parse(Console.ReadLine());
while (dato != 0)
{

nodo nuevo = new nodo(dato, null);
lista.lnsertarOrdenado(nuevo);
Console.WriteLine("Ingrese Dato. Cero para finalizar");
dato = Int32.Parse(Console.ReadLine());
}
Console.WriteLine("Lista de datos");
lista.MostrarLista();
Console.ReadKey();
}
}
}
  #2 (permalink)  
Antiguo 01/08/2011, 18:23
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Mira para empezar es fundamental que empieces a entender los errores que te arroja el compilador.
Los primeros que observe son de la clase

nodo.cpp:1:22: fatal error: iostream.h: No existe el fichero o el directorio


Fijate que te marca el archivo y la linea dondes esta el error. Y despues te da una descripcion. Te dice que iostream.h no existe. Esto se debe a que en C++ esa libreria no lleva el ".h"

Tambien da error la conio.h. Esa librearia es para borland. Con dev-c++ seguramente no estas usando compiladores de borland.

Por otro lado tienes este error:
nodo.cpp:46:7: error: cannot convert ‘nodo’ to ‘nodo*’ in assignment

fijate que ahi estas asignando una variable del tipo nodo a una variable que es un puntero a nodo. Son dos cosas distinta. En ese caso deberias asinar la referencia del objeto y no el objeto en si.

Espero que resuelva estos problemas y te ayude a resolver los demas.

Saludos
  #3 (permalink)  
Antiguo 01/08/2011, 23:48
 
Fecha de Ingreso: agosto-2011
Ubicación: Rivadavia
Mensajes: 4
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Por otro lado tienes este error:
nodo.cpp:46:7: error: cannot convert ‘nodo’ to ‘nodo*’ in assignment

fijate que ahi estas asignando una variable del tipo nodo a una variable que es un puntero a nodo. Son dos cosas distinta. En ese caso deberias asinar la referencia del objeto y no el objeto en si.




hola sam90 , ya corregi los errores que me dijiste,pero en el error "nodo.cpp:46:7: error: cannot convert ‘nodo’ to ‘nodo*’ in assignment", no se como hacer lo que me sugeris, como hago para asignar la referencia del objeto..

gracias por hacerme ver los demas errores, siendote muy sincero cuando lo estaba haciendo ni me di cuenta ..
  #4 (permalink)  
Antiguo 02/08/2011, 10:09
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Asi creas un objeto:
nodo p;
Asi creas un puntero a un objeto:
nodo * p;
Asi crearias un onjeto y guardas la referencia en el puntero:
p = new nodo();
Asi llamas a un metodo del nodo:
p->MiMetodo();


En C# no se manejan con punteros y referencia por eso podes hacer algo asi:
nodo p = new nodo;
En C++ eso esta mal. Porque al ser de mas bajo nivel vos "manejas la memoria".
nodo * p = new nodo;

Puede parecer un poco complicado pero esto hace programas mas transparentes y rapidosl. Saludos
  #5 (permalink)  
Antiguo 18/08/2011, 17:08
 
Fecha de Ingreso: agosto-2011
Ubicación: Rivadavia
Mensajes: 4
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

muchas gracias por haberme ayudado , me sirvieron muchisimo los consejos que me dise.. gracias de nuevo un abrazo !!!

Etiquetas: clases, enlazada, funcion, ingreso, lista, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:15.