[C con Clase] Problemas con nodos+datos

Luciano lrodriguez_iua en yahoo.com.ar
Mar Jun 5 05:33:42 CEST 2007


Buenas noches a todos,

    Les comento que estoy dando mis primeros pasos en C++, el tema es que no consigo armar un nodo con una estructura de datos....lo plantíe de esta manera (En turbo C++ 3.0, ya que en ese compilador lo pide la facu).

Bueno, marque en azul la parte del código que tengo dudas.

Gracias por vuestros comentarios y/o sugerencia.

Luciano


Nodo *************************************************************************************************************************************************************************

class nodo {
 private:
 tipodato valor;                                            //Nodo Simple
 int m_iNumFactura;                                   //Nodo Factura
 char m_cPendiente;
 nodo *pnProximo;
 nodo *pnAnterior;
 public:
 nodo(tipodato valor) {valor=0; pnProximo=NULL; pnAnterior=NULL;}
 nodo(int m_iNumFactura,char m_cPendiente) {m_iNumFactura=0;m_cPendiente='n'; pnProximo=NULL; pnAnterior=NULL;}
 void set_prox(nodo *prox);
 void set_ant (nodo *ant);
 void set_val (tipodato val);
 void set_val (int Factura, char Tipo);
 nodo * es_ant();
 nodo * es_prox();
 tipodato es_val();
 int es_factura();
 char es_pendiente();
 };
void nodo::set_prox (nodo *prox)
 {pnProximo=prox;}
void nodo::set_ant (nodo *ant)
 {pnAnterior=ant;}
void nodo::set_val (tipodato val)
 {valor=val;}
void nodo::set_val (int Factura, char Tipo)
 {m_iNumFactura=Factura;m_cPendiente=Tipo;}
nodo* nodo::es_ant()
 {return pnAnterior;}
nodo* nodo::es_prox()
 {return pnProximo;}
tipodato nodo::es_val()
 {return valor;}
int nodo::es_factura()
 {return m_iNumFactura;}
char nodo::es_pendiente()
 {return m_cPendiente;}
Pila ******************************************************************************************************************************************************************************************
class pila
{
 private:
 int tope;
 nodo *actual;
 public:
 pila() {tope=0;actual=NULL;}
 int meter (tipodato a);
 int meter (int Factura, char Tipo);
 tipodato sacar ();
 void sacarFactura (int *iFactura,char *cTipo );
 int esvacia ();
 int cantelem();
    void vaciar();
 };

int pila::meter (tipodato a)                 //devuelve 0 si no pudo, 1 si pudo
 {nodo *p,*q;
 p=new nodo(a);
 if (!p) {cout<<"Error nodo";
    return 0;
    } //controlar punt nulo
 if (actual==NULL)
  {actual=p;
   actual->set_ant(NULL);
   actual->set_val (a);}
 else
  {q=actual;
   actual=p;
   actual->set_ant(q);
   actual->set_val (a);}
 tope++;
 return 1;
 } //fin meter
int pila::meter (int iFactura, char cTipo)              //devuelve 0 si no pudo, 1 si pudo
 {nodo *p,*q;
 p=new nodo(iFactura, cTipo);
 if (!p) {cout<<"Error  Nodo";    Aca se pincha
 return 0;
 }                                                                                     //controlar punt nulo
 if (actual==NULL)
  {actual=p;
   actual->set_ant(NULL);
   actual->set_val (iFactura,cTipo);}
 else
  {q=actual;
   actual=p;
   actual->set_ant(q);
   actual->set_val (iFactura, cTipo);}
 tope++;
 return 1;
 } //fin meter
void pila::sacarFactura (int *iFactura,char *cTipo )              //devuelve tipodato
 {nodo *p,*q;                                                                   //Puntero p=actual - q=anterior
 if (actual==NULL)
  {cout<<"Pila vacia";}
 else
  {q=actual->es_ant();
   *iFactura=actual->es_factura();
   *cTipo=actual->es_pendiente();
   p=actual;
   delete p;
   actual=q;
   tope --;}
 }
Codigo**********************************************************************************************************************************************************************************************

int m,n,iValor,iElem;
void membrete ()
{  clrscr();
   gotoxy (10, 6); printf ("3-Dada una pila de facturas ordenadas en forma creciente por nro");
   gotoxy (10, 8); printf ("de factura,pasar a una cola las j primeras facturas a pagar.");
   gotoxy (10,10); printf("Imprimir la Pila y la Cola resultante.");
   gotoxy (5, 12); printf ("*********************** MENU DE OPCIONES **************************");
   for(int i=12;i<28;i++)
   {gotoxy (5, i); printf ("*"); gotoxy (71, i); printf ("*");}
   gotoxy (6, 14); printf ("  1-Cargar Facturas  - Tipo Pila       ");
   gotoxy (6, 16); printf ("  2-Ordenar Facturas                   ");
   gotoxy (6, 18); printf ("  3-Visualizar Facturas                ");
   gotoxy (6, 20); printf ("  4-Visualizar Facturas Pendientes     ");
   gotoxy (6, 22); printf ("  5-Visualizar Cola de Pagos           ");
   gotoxy (6, 24); printf ("  6-Transferir Pila a Cola de Pagos    ");
   gotoxy (6, 26); printf ("  0-Salir                              ");
   gotoxy (5, 28); printf ("*******************************************************************");
   gotoxy (10, 30);printf ("Opci¢n : ");
   cin>>m;
}
void cargapila (pila *p)                                         //Cargar pila
{
  int iFactura;
  char cTipo, q='n';
  clrscr();
  while (q!='s'){
  cout<<"\n Ingrese la Factura : ";
  cin>>iFactura;
  cout<<"\n Se encuentra pendiente de Pago (s/n) ? ";
  cin>>cTipo;
  p->meter(iFactura,cTipo);
  cout<<"\nDesea salir (s/n) ?";
  cin>>q;
  }
}
void mostrarpila (pila *p)
 {pila *w;
  w=new pila;
  int iFactura,c=0;
  char cTipo;
  clrscr();
  gotoxy (10, 4); printf("*********Pila de Facturas********");
  gotoxy (10, 6); printf("---------------------------------");
  gotoxy (10, 8); printf("    Factura    |   Pendiente     ");
     if (p->esvacia())
     {cout<<"La pila no tiene facturas \n";}
     while (!p->esvacia()) //
  { p->sacarFactura(&iFactura,&cTipo);
   w->meter(iFactura, cTipo);
   gotoxy (12+c, 10); printf("",iFactura);
   gotoxy (12+c, 16); printf("",cTipo);
   c=c+2;
  }
  while (!w->esvacia())
   {p->meter(iFactura,cTipo);

   }   //Se carga la pila
  getch();
  delete w;
}
void mostrarcola (cola *c)
 {cola *w;
  w=new cola;
  tipodato a;
  clrscr();
  if (c->esvacia())
  cout<<"La cola no tiene elementos \n";
  while (!c->esvacia())
  {a=c->sacar();
   w->meter(a);
   cout<<"Elemento "<<(c->cantelem()+1)<<": "<<a<<"\n";
  }
  while (!w->esvacia()) {c->meter(w->sacar());}   //Se carga la pila
  getch();
  delete w;
}
void transferir (pila *p,cola *c){
 tipodato a;
 clrscr();
  while (!p->esvacia()) //
  {a=p->sacar();
   c->meter(a);
  }
  cout<<"\n Pila transferida a Cola...";
  getch();
 }
/************************************************************************************/

int main()
{
 pila *p;
 cola *c;
 tipodato a,b;
 p=new pila;
 c=new cola;
while (1){
clrscr();
membrete();
  switch (m)
    {
   case 1: {cargapila(p);break;}
   case 2: {mostrarpila(p);break;}

    }
//fin switch
if (m==0)break;
}//fin while
gotoxy (35, 45);printf("\Fin");
getch();
return 0;
};
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070605/435961bb/attachment.html>


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