Hola...
Mi problema es este..
Alguien me puede decir que tiene mi codec...
No hace lo ke tiene ke hacer,,,,ya lo revise varias veces
y no encuentro mi error...
hai les dejo el codec...
#include<iostream.h>
void MsgErr(void);
struct Envio{
char remite;
char destino;
int estado;//0=entregado a sede,1=recogido por camion, 2=recibido por sede
};
class Enviar{//Clase padre para mensajeria de sobres y paquetes
public:
Envio *dato;
};
/*CLASE SOBRE*/
class Sobre:public Enviar{
public:
Sobre(char rem,char des){dato->remite=rem;dato->destino=des;}
Sobre(){dato->estado=-1;}
Envio *VerDatos(){return dato;}
int Estado(){return dato->estado;}
void EntregarSede(){dato->estado=0;}
void RecogidoCamion(){dato->estado=1;}
void RecibidoSede(){dato->estado=2;}
};
/*TERMINA LA CLASE SOBRE*/
/*CLASE PAQUETES*/
class Paquete:public Enviar{
private: float peso;
public:
Paquete(char rem,char des,float kg){dato->remite=rem;dato->destino=des;peso=kg;}
Paquete(){dato->estado=-1;}
Envio *VerDatos(){return dato;}
int Estado(){return dato->estado;}
void EntregarSede(){dato->estado=0;}
void RecogidoCamion(){dato->estado=1;}
void RecibidoSede(){dato->estado=2;}
};
/*TERMINA LA CLASE PAQUETES*/
/*CLASE PARA NODOS DE TIPO SOBRE*/
class NodoSobre{
public:
Sobre dato;
NodoSobre *sig;
};
/*TERMINA LA CLASE NODOS DE TIPO SOBRE*/
/*CLASE PARA NODOS DE TIPO PAQUETE*/
class NodoPaquete{
public:
Paquete dato;
NodoPaquete *sig;
};
/*TERMINA LA CLASE NODOS DE TIPO PAQUETE*/
struct DatosSede{
char Nombre;
char *ubicacion;};
/*CLASE SEDE*/
class Sede{
private:
DatosSede *dato;
int enviosS;//Para ver el numero de sobres para enviar en cada Sede
NodoSobre *punta,*cola;//Para la cola de sobres recibidos
NodoSobre *primero,*ultimo;//Para la cola de sobres recibidos por camion
NodoSobre *inicio,*final;//Para la cola de entregados a camion
int enviosP;//Para ver el numero de paquetes para enviar en cada Sede
NodoPaquete *pun,*col;//Para la cola de paquetes recibidos
NodoPaquete *pri,*ult;//Para la cola de paquetes recibidos por camion
NodoPaquete *ini,*fin;//Para la cola de entregados a camion
public:
Sede(char nom,char *ubi){dato->Nombre=nom;dato->ubicacion=ubi;}
Sede(void)
{enviosS=0;punta=NULL;cola=NULL;primero=NULL;ultimo=NULL;inicio=NULL;final=NULL;
enviosP=0;pun=NULL;col=NULL;pri=NULL;ult=NULL;ini=NULL;fin=NULL;}
~Sede(void);
DatosSede *VerDatos(){return dato;}
int EnviosS(){return enviosS;}
void RecibirSobre(Sobre &);//Agrega a cola de sobres recibidos
void RecibirSobreCamion(Sobre &);//Agrega a cola de sobres recibidos por camion
Sobre EntregarSobreCamion();//Vacia cola de sobres recibidos y agrega a cola de sobres entregados a camion
int EnviosP(){return enviosP;}
void RecibirPaquete(Paquete &);//Agrega a cola de paquetes recibidos
void RecibirPaqueteCamion(Paquete &);//Agrega a cola de paquetes recibidos por camion
Paquete EntregarPaqueteCamion();//Vacia cola paquetes recibidos y agrega a cola de paquetes entregados a camion
};
void Sede::~Sede(void)
{NodoSobre *temp;
while(punta!=NULL){
temp=punta;
punta=punta->sig;
delete temp;}
while(primero!=NULL){
temp=primero;
primero=primero->sig;
delete temp;}
while(inicio!=NULL){
temp=inicio;
inicio=inicio->sig;
delete temp;}
NodoPaquete *temp1;
while(pun!=NULL){
temp1=pun;
pun=pun->sig;
delete temp1;}
while(pri!=NULL){
temp1=pri;
pri=pri->sig;
delete temp1;}
while(ini!=NULL){
temp1=ini;
ini=ini->sig;
delete temp1;}
}
void Sede::RecibirSobre(Sobre &S)
{
NodoSobre *temp=new NodoSobre;
if(!temp){MsgErr();}
else{
++enviosS;
S.EntregarSede();
temp->dato=S;
temp->sig=NULL;
if(cola!=NULL){cola->sig=temp;}
cola=temp;
if(punta==NULL){punta=temp;}
}
}
void Sede::RecibirSobreCamion(Sobre &S)
{
NodoSobre *temp=new NodoSobre;
if(!temp){MsgErr();}
else{
S.RecibidoSede();
temp->dato=S;
temp->sig=NULL;
if(ultimo!=NULL){ultimo->sig=temp;}
ultimo=temp;
if(primero==NULL){primero=temp;}
}
}
Sobre Sede::EntregarSobreCamion()
{ Sobre Sob;//Variable para retorno
if(punta!=NULL)
{
NodoSobre *temp=punta;
cout<<"\nDe:"<<temp->dato.VerDatos()->remite;
cout<<" Para:"<<temp->dato.VerDatos()->destino;
//Agregamos a cola de sobres entregados a camion
NodoSobre *temp1=new NodoSobre;
if(!temp1){MsgErr();}
else{
temp->dato.RecogidoCamion();
Sob=temp->dato;
temp1->dato=temp->dato;
temp1->sig=NULL;
if(final!=NULL){final->sig=temp1;}
final=temp1;
if(inicio==NULL){inicio=temp1;}
}
punta=punta->sig;
--enviosS;
delete temp;
}
else{cout<<"\nNo hay sobres para enviar";}
return Sob;
}
void Sede::RecibirPaquete(Paquete &P)
{
NodoPaquete *temp=new NodoPaquete;
if(!temp){MsgErr();}
else{
++enviosP;
P.EntregarSede();
temp->dato=P;
temp->sig=NULL;
if(col!=NULL){col->sig=temp;}
col=temp;
if(pun==NULL){pun=temp;}
}
}
void Sede::RecibirPaqueteCamion(Paquete &P)
{
NodoPaquete *temp=new NodoPaquete;
if(!temp){MsgErr();}
else{
P.RecibidoSede();
temp->dato=P;
temp->sig=NULL;
if(ult!=NULL){ult->sig=temp;}
ult=temp;
if(pri==NULL){pri=temp;}
}
}
Paquete Sede::EntregarPaqueteCamion()
{ Paquete Paq;//Variable para retorno
if(pun!=NULL)
{
NodoPaquete *temp=pun;
cout<<"\nDe:"<<temp->dato.VerDatos()->remite;
cout<<" Para:"<<temp->dato.VerDatos()->destino;
//Agregamos a cola de paquetes entregados a camion
NodoPaquete *temp1=new NodoPaquete;
if(!temp1){MsgErr();}
else{
temp->dato.RecogidoCamion();
Paq=temp->dato;
temp1->dato=temp->dato;
temp1->sig=NULL;
if(fin!=NULL){fin->sig=temp1;}
fin=temp1;
if(ini==NULL){ini=temp1;}
}
pun=pun->sig;
--enviosP;
delete temp;
}
else{cout<<"\nNo hay paquetes para enviar";}
return Paq;
}
/*TERMINA LA CLASE SEDE*/
struct DatosCamion{
int numero;
char *marca,*color,*placas;};
/*CLASE CAMION*/
class Camion{
private:
DatosCamion *dato;
NodoSobre *pila;//Para la pila de sobres en el camion
NodoSobre *arriba;//Para la pila de sobres temporal a la hora de vaciar
NodoPaquete *pil;//Para la pila de paquetes en el camion
NodoPaquete *arr;//Para la pila de paquetes temporal a la hora de vaciar
Sede Actual;//Para saber en que sede estamos
public:
Camion(int num,char *mar,char *col,char *pla)
{dato->numero=num;dato->marca=mar;dato->color=col;dato->placas=pla;}
Camion(void){pila=NULL;arriba=NULL;pil=NULL;arr=NULL;}
~Camion(void);
void IrSede(Sede &SD){Actual=SD;};//Sirve para colocarnos en una Sede
Sede SedeActual(){return Actual;}//Devolvemos la Sede actual
void EntregarSobres();//Se busca sobres en la pila para la sede actual y se le entregan
void RecibirSobres();//Recibe sobres dependiendo de la Sede actual
void EntregarPaquetes();//Se busca paquetes en la pila para la sede actual y se le entregan
void RecibirPaquetes();//Recibe paquetes dependiendo de la Sede actual
};
void Camion::~Camion(void)
{NodoSobre *temp;
while(pila!=NULL){
temp=pila;
pila=pila->sig;
delete temp;}
while(arriba!=NULL){
temp=arriba;
arriba=arriba->sig;
delete temp;}
NodoPaquete *temp1;
while(pila!=NULL){
temp1=pil;
pil=pil->sig;
delete temp1;}
while(arr!=NULL){
temp1=arr;
arr=arr->sig;
delete temp1;}
}
void Camion::RecibirSobres()
{//Agregamos a la pila de sobres en el camion
while(SedeActual().EnviosS()!=0)
{
NodoSobre *temp=new NodoSobre;
if(!temp){MsgErr();}
else{
temp->dato=SedeActual().EntregarSobreCamion();
temp->sig=pila;
pila=temp;
}
}
}
void Camion::EntregarSobres()
{
while(pila!=NULL)
{
NodoSobre *temp=pila;
if(temp->dato.VerDatos()->destino==SedeActual().VerDatos()->Nombre)
{
cout<<"\nEste sobre es para ti..";
SedeActual().RecibirSobreCamion(temp->dato);
}
else{//Se Agrega en una pila temporal los sobres que no son para esta Sede
NodoSobre *temp1=new NodoSobre;
if(!temp1){MsgErr();}
else{
temp1->dato=temp->dato;
temp1->sig=arriba;
arriba=temp1;
}
}
cout<<"\nDe:"<<temp->dato.VerDatos()->remite;
cout<<" Para:"<<temp->dato.VerDatos()->destino;
delete temp;
pila=pila->sig;
}
//Despues se regresan los sobres a la pila original y se vacia la pila temporal
NodoSobre *temp1,*temp;
while(arriba!=NULL)
{
temp1=arriba;
temp=new NodoSobre;
if(!temp){MsgErr();}
else{//Se agrega a la pila de sobres original
temp->dato=arriba->dato;
temp->sig=pila;
pila=temp;
}
arriba=arriba->sig;
delete temp1;
}
}
void Camion::RecibirPaquetes()
{//Agregamos a la pila de paquetes en el camion
while(SedeActual().EnviosP()!=0)
{
NodoPaquete *temp=new NodoPaquete;
if(!temp){MsgErr();}
else{
temp->dato=SedeActual().EntregarPaqueteCamion();
temp->sig=pil;
pil=temp;
}
}
}
void Camion::EntregarPaquetes()
{
while(pil!=NULL)
{
NodoPaquete *temp=pil;
if(temp->dato.VerDatos()->destino==SedeActual().VerDatos()->Nombre)
{
cout<<"\nEste sobre es para ti..";
SedeActual().RecibirPaqueteCamion(temp->dato);
}
else{//Se Agrega en una pila temporal los paquetes que no son para esta Sede
NodoPaquete *temp1=new NodoPaquete;
if(!temp1){MsgErr();}
else{
temp1->dato=temp->dato;
temp1->sig=arr;
arr=temp1;
}
}
cout<<"\nDe:"<<temp->dato.VerDatos()->remite;
cout<<" Para:"<<temp->dato.VerDatos()->destino;
delete temp;
pil=pil->sig;
}
//Despues se regresan los paquetes a la pila original y se vacia la pila temporal
NodoPaquete *temp1,*temp;
while(arriba!=NULL)
{
temp1=arr;
temp=new NodoPaquete;
if(!temp){MsgErr();}
else{//Se agrega a la pila de paquetes original
temp->dato=arr->dato;
temp->sig=pil;
pil=temp;
}
arr=arr->sig;
delete temp1;
}
}
/*TERMINA LA CLASE CAMION*/
int main()
{
Sobre S1('A','B'),S2('B','C'),S3('C','A'),S4('A','C');//Crean los sobres
Paquete P1('A','B',18.02),P2('B','C',30.5),P3('C','A',50.

,P4('A','C',40.5);//Crean lo paquetes
Sede Sede1('A',"Pueblo nuevo"),Sede2('B',"San Jacinto"),Sede3('C',"Centro");//Crean las sedes
/*Se entregan los sobres a las sedes*/
Sede1.RecibirSobre(S1);
Sede1.RecibirSobre(S4);
Sede1.RecibirPaquete(P1);
Sede1.RecibirPaquete(P4);
Sede2.RecibirSobre(S2);
Sede2.RecibirPaquete(P2);
Sede3.RecibirSobre(S3);
Sede3.RecibirPaquete(P3);
Camion C1(1,"Ford","Negro","THJ523");//Se crea el camion
C1.IrSede(Sede1);//Dirijimos camion a sede1
C1.RecibirSobres();
C1.RecibirPaquetes();
C1.EntregarSobres();
C1.EntregarPaquetes();
C1.IrSede(Sede2);//Dirijimos camion a sede2
C1.RecibirSobres();
C1.RecibirPaquetes();
C1.EntregarSobres();
C1.EntregarPaquetes();
C1.IrSede(Sede3);//Dirijimos camion a sede3
C1.RecibirSobres();
C1.RecibirPaquetes();
C1.EntregarSobres();
C1.EntregarPaquetes();
return(0);
}
void MsgErr(void)
{cout<<"\nError:Memoria insuficiente...";}