Programación General > C/C++

 Nueva duda programa Pila

(1/1)

Jesus21:
Este es mi programa y lo que hace es ir metiendo en la pila el residuo de la division y despues ir mostrandolo.
Mi problema esta en las lineas 39 y 42 , me dice lo siguiente
39  expected primary-expression before ',' token
42  expected primary-expression before ')' token


--- Código: C ---#include <iostream.h>int x=0,val=0,num=0,base=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 vacian";     *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;                  push(&pila,val);                  num=num/base;                  cout<<"el elemento insertado es:"<<val;                  x=pop(&pila);                  cout<<x;                  aux=aux/base;                  system("pause");                  }while(aux>base); } main (){     Pila pila = NULL;     cout << "Codigo binario de un numeronDigita el numeron";     cin>>num;     cout << "Digita la base que deseas(2-5)n";     cin >>base;     convertir (num,base);} 

Saludos y de antemano gracias

m0skit0:
Hola de nuevo Jesus21

Primero, no debes usar variables globales.


--- Código: C ---push(&pila,val);x=pop(&pila); pila no está declarada.

ProfesorX:
Desafortunadamente estas implementando mal la pila y sus funciones, me parece que necesitas leer mas sobre punteros, typedef y C++, basicamente el error de sintaxis que te marca es debido a que typedef lo que hace es crear un "alias" de una declaracion, por lo tanto cuando declaras:


--- Código: C++ ---typedef Pila *pila; 
es como si escribieras:


--- Código: C++ ---typedef tipoNodo **pila; // Doble apuntador a tipoNodo 
Ya que arriba estas poniendo:


--- Código: C++ ---typedef tipoNodo *Pila; //Pila es alias de apuntador a tipoNodo 
Lo que convierte a PIla en un alias para tipoNodo*, (apuntador a tipoNodo), no se si lo comprendas, puede ser algo confuso de entender si no comprendes que typedef contrario a lo que parece, no "crea tipos" si no en realida crea "alias" como dije arriba.

Pero aun cuando corrijas eso, tu codigo no funcionara correctamente ya que esta mal implementado, y explicarte todo y como debes hacerlo excederia el tamaño de una pequeña consulta  :lol: , es mas facil que busques en google la manera correcta de hacerlo ;)

Poniendo en google como busqueda "pila usando listas c++", encontre varios enlaces, te dejo el enlace al codigo que me parece es mas adecuado a lo que buscas, por esta vez te hice la busqueda, pero debes aprender a saber hacer busquedas inteligentes tu mismo :)

http://www.lawebdelprogramador.com/codigo/85/Implementacion_de_una_pila_mediante_lista_enlazada_en_C++.html

Esta escrito para Visual C++, y me parece por la sintaxis de tu codigo que tu usas Turbo C++, aun asi, no creo que te cueste trabajo adaptar el codigo para que funcione en Turbo o el compilador qe utilices.

Saludos y suerte :)

Jesus21:
ahora tengo este codigo:

--- Código: C ---#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 numeronDigita el numeron";     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 vacian";     *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");} 

y me salen estos errores al compilar

--- Código: Text ---52 E:EstructurasincompletosPila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `void push(tipoNodo**, int)'  56 E:EstructurasincompletosPila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `int pop(tipoNodo**)' 

ProfesorX:
El error es lo mismo que te mencone arriba, estas entendiendo mal como funciona el typedef, y lo que haces es que al crear alias, los * (operador de direccion) se acumulan, creando los errores de compilacion.

ademas como dije esta mal implementada la pila, revisa mi enlace anterior.

Saludos :)

Navegación

[0] Índice de Mensajes

Ir a la versión completa