nueva duda pila en C

Iniciado por pakleisito, 18 Marzo 2011, 07:25 AM

0 Miembros y 4 Visitantes están viendo este tema.

pakleisito

Esta es mi nueva duda ... al compilar me sale error en la funcion convertir cuando llamo a las funciones push y pop.

#include <iostream.h>
int num=0,base=0,val=0,x=0;
typedef struct datos{
        int dato;
        struct datos *siguiente;
        }tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Pila;
typedef Pila *pila;

void push (Pila *l,int val);
int pop (Pila *l);

void push(Pila *pila,int val){
     pNodo nuevo;
     nuevo = (pNodo) malloc (sizeof(tipoNodo));
     nuevo->dato = val;
     nuevo->siguiente =*pila;
     *pila = nuevo;
     }
     
int pop(Pila *pila){
     pNodo aux;
     int v;
     aux = *pila;
     if (!aux) cout<<"\npila vacia\n";
     *pila = aux->siguiente;
     v = aux->dato;
     free (aux);
     return v;
     system ("pause");
     }

void convertir(int num,int base){
            int x=0,val=0,aux=0;
                  aux=num;
                  do{
                  val=num%base;
                  aux=aux/base;
                  void push(&pila,val);
                  cout<<"el elemento insertado es:"<<val;
                  x=pop(&pila);
                  cout<<x;
                  system("pause");
                  }while(aux>base);
                 
            }     
                 


int main (){
     Pila pila = NULL;
     cout << "Codigo binario de un numero\nDigita el numero\n";
     cin>>num;
     cout << "Digita la base que deseas\n";
     cin >>base;
     void convertir (int num,int base);
     
}


Saludos

Akai

Cuando dices "error al compilar" podrías al menos poner el error. Pero bueno, me siento generoso y voy a intentar compilar tu código ¬¬

1) Iostream se incluye sin el .h

2) usas malloc y free sin incluir cstdlib

3) La implementación de tus funciones, debería ir debajo del main, o no poner las declaraciones.

4) en convertir haces esto:
Código (cpp) [Seleccionar]
void push(&pila,val); y eso, NO se hace.

pakleisito

si mis problemas son exactamente con esas lineas.
pero me podrias decir entonces como SI se hace porfavor
Gracias :)

Akai

sin el void

Código (cpp) [Seleccionar]
push(&pila,val);

El void lo utilizas cuando declaras una función, cuando la invocas no lo necesitas.

pakleisito

pero por que me sale este error en la funcion convertir exactamente al llamar a push y pop
42 expected primary-expression before ',' token
44 expected primary-expression before ')' token

Gracias =)

Akai

Básicamente porque tu código está mal. Usas typedef como quien no quiere la cosa y sin saber lo que hace, tengo la impresión.

Código (cpp) [Seleccionar]
typedef tipoNodo *Pila;
typedef Pila *pila;


NO TIENES DEFINIDO PILA!!!

pakleisito

ahora tengo este
#include <iostream.h>
#include <stdlib.h>
#include <cstdlib>
int x=0,val=0,num=0,base=0;
typedef struct datos{
        int dato;
        struct datos *siguiente;
        }tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Pila;
Pila *pila;

void push (Pila *l,int val);
int pop (Pila *l);
void convertir (int num,int base);

main (){
     Pila pila = NULL;
     cout << "Codigo binario de un numero\nDigita el numero\n";
     cin>>num;
     cout << "Digita la base que deseas(2-5)\n";
     cin >>base;
     convertir (num,base);}
     
void push(Pila *pila,int val){
     pNodo nuevo;
     nuevo = (pNodo) malloc (sizeof(tipoNodo));
     nuevo->dato = val;
     nuevo->siguiente =*pila;
     *pila = nuevo;
     }

int pop(Pila *pila){
     pNodo aux;
     int v;
     aux = *pila;
     if (!aux) cout<<"\npila vacia\n";
     *pila = aux->siguiente;
     v = aux->dato;
     free (aux);
     return v;
     system ("pause");
     }

void convertir(int num,int base){
                  int aux=0;
                  aux=num;
                  do{
                  val=num%base;
                  num=num/base;
                  push(&pila,val);
                  }while (num>base);
                  cout<<"el numero es:" <<num;
                  do{
                  x=pop(&pila);
                  cout<<x;
                  }while (*pila!=NULL);
                  system("pause");
}



Pero tengo errores en las lineas:
Código (oobas) [Seleccionar]
52 E:\Estructuras\incompletos\Pila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `void push(tipoNodo**, int)'

56 E:\Estructuras\incompletos\Pila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `int pop(tipoNodo**)'

Akai

te sobra el &.

Aun así, te sigo diciendo, no sabes como funciona el typedef, y lo usas sin ton ni son.

pakleisito

ya se que no se usarlos correctamente ... pero me podrías explicar entonces que es lo que tengo que hacer para solucionarlo??

y si le quito los & entonces seria como si los apuntadores estuvieran de mas y el programa se truncaría.

Akai

#9
Typedef: define un tipo. Simple y llanamente. le dice al compilador que un tipo se refiere a otro.
Código (cpp) [Seleccionar]
typedef int mis_enteros
mis_enteros a;
//equivalente a
int a;


Tu problema?:

Código (cpp) [Seleccionar]

typedef struct datos{
       int dato;
       struct datos *siguiente;
       }tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Pila;
Pila *pila;


tiponodo lo defines como un struct de nombre dato.

defines el tipo pNodo como tiponodo* y lo mismo con Pila

Y luego, defines una Pila* (tipo no definido) como pila.

Resultado? tu pila es un tiponodo**

Posible solución?

Código (cpp) [Seleccionar]
typedef struct datos{
       int dato;
       struct datos *siguiente;
       }tipoNodo;

sin ninguna definición mas.

y luego, en el main o donde necesites usar un puntero a dicha estructura:
Código (cpp) [Seleccionar]
tipoNodo *nombre_que_quieras;