[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