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
Ir a la versión completa