Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Raxis

#1
CitarEste es parte del código que he desarrollado. No he cargado las otras clases, pero en esta parte me está generando error. Vehiculos es la superclase, al programa se le ingresan varios tipos de vehículos. Luego, cuando se ejecuta el método sacar -(eliminarElementoPorDato) en Lista.cpp - saca bien todos los vehículos pero el primero no lo sacaGracias por la ayuda.

NOTA: ALGUNOS CÓDIGOS SE DESCONFIGURABAN AL USAR code=cpp por eso me tocó quitarlo de algunos de estos archivos cargados.

Acermax, no te entendí lo de leer los apuntes para saber el funcionamiento de la pila. ¿Dónde encuentro los apuntes?


Nodo.h
Código (cpp) [Seleccionar]



#ifndef NODO_H
#define NODO_H

#include "Vehiculos.h"

class Nodo
{
private:
Nodo *siguiente;
Vehiculos *dato;
public:
Nodo(Vehiculos*,Nodo* =0);
~Nodo();
Vehiculos * verDato();
Nodo * verSiguiente();
void modificarSiguiente(Nodo *);

};
#endif




Nodo.cpp

Código (cpp) [Seleccionar]

#include "Nodo.h"
Nodo::Nodo(Vehiculos* dato,Nodo* siguiente)
{
this->siguiente=siguiente;
this->dato=dato;
}

Nodo::~Nodo()
{
if(siguiente!=0)
delete siguiente;

if(dato!=0)
delete dato;
}

Vehiculos *Nodo::verDato()
{
return dato;
}

Nodo * Nodo::verSiguiente()
{
return siguiente;
}

void Nodo::modificarSiguiente(Nodo * siguiente)
{
this->siguiente = siguiente;
}



Lista.h



#ifndef __CLASSLista
#define __CLASSLista

#include "Nodo.h"
#include <string.h>

using namespace std;

class Lista
{
   protected:
       Nodo* cabeza;
       int tama;
       
   public:
       Lista();
       bool existeElemento(string elemento);
       virtual void agregarNodo();
       virtual void agregarNodo(Nodo*);
       void imprimirLista();
       int numeroNodos();
       void eliminarElementoPorPosicion(int posicion);
void eliminarElementoPorDato(const string&);
       bool listaVacia();
Lista& operator<<(Nodo*);
Nodo * operator[](int);
       
   };

#endif




Lista.cpp

Código (cpp) [Seleccionar]


#include "Lista.h"
#include "Carro.h"
#include "Furgoneta.h"
#include "Camion.h"
#include "Moto.h"
using namespace std;

Lista::Lista()
{
//aqui es cabeza = 0 y tama = o
       cabeza = 0;
       tama = 0;
}

bool Lista::existeElemento(string dato)
{
Nodo *actual = cabeza;

while(actual!=0)
if(actual->verDato()->verPlaca()==dato)
return true;
else
actual = actual->verSiguiente();

return false;
}
int tipos()
{
int tipo;
cout<<"Seleccione el tipo de vehiculo"<<endl;
cout<<"1 Carro"<<endl;
cout<<"2 Moto"<<endl;
cout<<"3 Furgoneta"<<endl;
cout<<"4 Camion"<<endl;
cin>>tipo;
return tipo;
}
void Lista::agregarNodo()
{
string placa,color,marca,modelo;
cout<<"Ingresar placa del auto"<<endl;
cin>> placa;
cout<<"Ingresar color del auto"<<endl;
cin>> color;
cout<<"Ingresar marca del auto"<<endl;
cin>> marca;
cout<<"Ingresar modelo del auto"<<endl;
cin>> modelo;
Vehiculos * vehiculo;
switch(tipos())
{
case 1: vehiculo = new Carro(placa,color,marca,modelo);break;
case 2: vehiculo = new Moto(placa,color,marca,modelo);break;
case 3: vehiculo = new Furgoneta(placa,color,marca,modelo);break;
case 4: vehiculo = new Camion(placa,color,marca,modelo);break;
default:
cout<<"Tipo de vehiculo desconocido.\nVehiculo no agregado!"<<endl;
return;
}
agregarNodo(new Nodo(vehiculo));
}

Lista& Lista::operator<<(Nodo* dato)
{
if(cabeza==0) cabeza = dato;

Nodo *actual = cabeza;

for(int i=1; i<tama;i++)
actual = actual->verSiguiente();

actual->modificarSiguiente(dato);

tama++;

return *(this);
}

Nodo * Lista::operator[](int posicion)
{
Nodo *actual = cabeza;

for(int i=0; i>posicion-1; i++)
actual=actual->verSiguiente();

actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());

return actual;

}

void Lista::agregarNodo(Nodo*dato)
{
if(cabeza==0) cabeza = dato;

Nodo *actual = cabeza;

for(int i=1; i<tama;i++)
actual = actual->verSiguiente();

actual->modificarSiguiente(dato);

tama++;
}
void Lista::imprimirLista()
{
Nodo *actual = cabeza;
Vehiculos * vehiculoActual;

while(actual!=0)
{
vehiculoActual = actual->verDato();
cout<<vehiculoActual->verPlaca()<<'\t';
cout<<vehiculoActual->verTipo()<<'\t';
cout<<vehiculoActual->verColor()<<'\t';
cout<<vehiculoActual->verMarca()<<'\t';
cout<<vehiculoActual->verModelo()<<'\t';
cout<<endl;
actual = actual->verSiguiente();
}
}

int Lista::numeroNodos()
{       
return  tama; //solo dice return tama;
}

void Lista::eliminarElementoPorDato(const string& dato)
{
Nodo *anterior=0,*actual = cabeza;

while(actual!=0)
{
if( (actual->verDato()->verPlaca()==dato) && (anterior!=0) )
{
anterior->modificarSiguiente(actual->verSiguiente());

tama--;
return;
}

anterior = actual;
actual=actual->verSiguiente();

}
}

void Lista::eliminarElementoPorPosicion(int posicion)
{
Nodo *actual = cabeza;

for(int i=0; i>posicion-1; i++)
actual=actual->verSiguiente();

actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());

tama--;
}

bool Lista::listaVacia()
{
if(tama==0)
return true;

return false;
}




Pila.h



#ifndef __CLASSPila
#define __CLASSPila

#include "Lista.h"
#include "Nodo.h"
#include "Vehiculos.h"


using namespace std;

class Pila:public Lista
{
   public:
       Pila();
       bool pilaVacia();
       Vehiculos* obtenerTope();  
       void desapilar(int);
       void imprimirPila();

};

#endif



Pila.cpp

Código (cpp) [Seleccionar]


#include "Pila.h"
using namespace std;

Pila::Pila():Lista()
{

}

bool Pila::pilaVacia()
{
return listaVacia();
}

Vehiculos* Pila::obtenerTope()
{
Nodo * actual = cabeza;

while(actual->verSiguiente()!=0)
actual=actual->verSiguiente();

return actual->verDato();
}

void Pila::imprimirPila()
{
imprimirLista();
}  

void Pila::desapilar(int posicion)
{
eliminarElementoPorPosicion(posicion);
}

#2
Un saludo para todos.

Soy estudiante de primer año en Ingenieria de Sistemas y debo desarrollar en programación orientada a objetos un ejercicio en C++ que consiste en crear una clase Lista, una clase Nodo y una clase Pila.

Se debe hacer con asignación dinámica de memoria y estas clases las debo utilizar en la implementación de otro programa; pero no se como funciona realmente la Pila, como se crean Listas enlazadas y como se crea un nodo.

Que atributos y métodos deberían tener cada una de estas clases.

Agradezco la ayuda que me puedan brindar.