[C con Clase] Constructores Copia (David Fire)

David Fire ddfire en gmail.com
Jue Oct 22 18:58:57 CEST 2009


En rojo esta marcado el problema.
mi comentario en amarillo....
David

El 22 de octubre de 2009 11:51, John <tanyin21 en hotmail.com> escribió:

> Hola David, muchas gracias por la ayuda, todo esto es un trabajo que tengo
> que presentar en la universidad y el profesor quiere que se haga un
> constructor que reciba dos instancias de lista para concatenar los
> contenidos de las dos listas, ahora yo perfectamente pudiese hacer un
> método
> para ello y se que funcionaria, pero según el profesor tengo que hacerlo
> así
> como él lo especifica, yo ya tengo en mi mente el algoritmo para concatenar
> las listas pero lo que me impide a seguir es el error que me da.
> Con respecto al error, bueno yo uso el IDE Codeblocks, y bueno a como
> mostrare a continuación en el siguiente código no me da error al
> compilarlo,
> lo que sucede es que la aplicación se queda ahí y no hace nada.
>
> #include <iostream>
> using namespace std;
>
> class nodo {
>   public:
>    nodo(int v, nodo *sig = NULL)
>    {
>       valor = v;
>       siguiente = sig;
>    }
>
>   private:
>    int valor;
>    nodo *siguiente;
>
>   friend class lista;
> };
>
> typedef nodo *pnodo;
>
>
> class lista {
>   public:
>    lista() { primero = actual = NULL; }
>    lista(lista luno, lista ldos){}
>
estas definiendo  a la funcion como vacia....
no hace nada... por eso no hace nada....


>    ~lista();
>
>    void Insertar(int v);
>    void Borrar(int v);
>    bool ListaVacia() { return primero == NULL; }
>    int encuentraMenor();
>    int encuentraMayor();
>    void Mostrar();
>    void Siguiente();
>    void Primero();
>    void Ultimo();
>    bool Actual() { return actual != NULL; }
>    int ValorActual() { return actual->valor; }
>
>   private:
>    pnodo primero;
>    pnodo actual;
> };
>
> lista::~lista()
> {
>   pnodo aux;
>
>   while(primero) {
>      aux = primero;
>      primero = primero->siguiente;
>      delete aux;
>   }
>   actual = NULL;
> }
>
> void lista::Insertar(int v)
> {
>   pnodo anterior;
>
>   // Si la lista está vacía
>   if(ListaVacia()) {
>      // Asignamos a lista un nievo nodo de valor v y
>      // cuyo siguiente elemento es la lista actual
>      primero = new nodo(v, primero);
>   }
>   else {
>      // Buscar el nodo de valor menor a v
>      anterior = primero;
>      // Avanzamos hasta el último elemento o hasta que el siguiente tenga
>      // un valor mayor que v
>      while(anterior->siguiente)
>         anterior = anterior->siguiente;
>      // Creamos un nuevo nodo después del nodo anterior, y cuyo siguiente
>      // es el siguiente del anterior
>      anterior->siguiente = new nodo(v, anterior->siguiente);
>   }
> }
>
> int lista::encuentraMenor(){
>    nodo *aux;
>    int menor,contador=0,posicion=0;
>    aux = primero;
>    menor = -1;
>    if(ListaVacia()){
>        return menor;
>        } else {
>            menor = aux->valor;
>            while(aux){
>                if(menor<=aux->valor){
>                    aux=aux->siguiente;
>                    contador++;
>                    } else {
>                        menor=aux->valor;
>                        posicion=contador;
>                        contador++;
>                        aux=aux->siguiente;
>                        }
>                }
>        }
>    return posicion;
>    }
>
> int lista::encuentraMayor(){
>    nodo *aux;
>    int mayor,contador=0,posicion=0;;
>    aux=primero;
>    mayor= -1;
>    if(ListaVacia()){
>        return mayor;
>        } else {
>            mayor=aux->valor;
>            while(aux){
>                if(mayor>=aux->valor){
>                    aux=aux->siguiente;
>                    contador++;
>                    } else {
>                        mayor=aux->valor;
>                        posicion=contador;
>                        contador++;
>                        aux=aux->siguiente;
>                        }
>                }
>            }
>    return posicion;
>    }
>
> void lista::Borrar(int v)
> {
>   pnodo anterior, nodo;
>
>   nodo = primero;
>   anterior = NULL;
>   while(nodo && nodo->valor < v) {
>      anterior = nodo;
>      nodo = nodo->siguiente;
>   }
>   if(!nodo || nodo->valor != v) return;
>   else { // Borrar el nodo
>      if(!anterior) // Primer elemento
>         primero = nodo->siguiente;
>      else  // un elemento cualquiera
>         anterior->siguiente = nodo->siguiente;
>      delete nodo;
>   }
> }
>
> void lista::Mostrar()
> {
>   nodo *aux;
>
>   aux = primero;
>   while(aux) {
>      cout << aux->valor << "-> ";
>      aux = aux->siguiente;
>   }
>   cout << endl;
> }
>
> void lista::Siguiente()
> {
>   if(actual) actual = actual->siguiente;
> }
>
> void lista::Primero()
> {
>   actual = primero;
> }
>
> void lista::Ultimo()
> {
>   actual = primero;
>   if(!ListaVacia())
>      while(actual->siguiente) Siguiente();
> }
>
> int main()
> {
>    lista Lista;
>    lista Listados;
>
>
>    Lista.Insertar(209);
>    Lista.Insertar(19);
>    Lista.Insertar(30);
>
>    Listados.Insertar(100);
>    Listados.Insertar(178);
>    Listados.Insertar(10);
>    Listados.Insertar(77);
>
>    lista lis(Lista,Listados);
>
>
>    cout <<"Esta es la posicion del dato menor:
> "<<Lista.encuentraMenor()<<endl;
>    cout <<"Este es la posicion del dato mayor:
> "<<Lista.encuentraMayor()<<endl;
>
>
>
>
> }
>
>
> John
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091022/4506b1cc/attachment.html>


Más información sobre la lista de distribución Cconclase