• Martes 12 de Noviembre de 2024, 21:33

Autor Tema:  Nueva duda programa Pila  (Leído 1839 veces)

Jesus21

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Nueva duda programa Pila
« en: Viernes 18 de Marzo de 2011, 18:12 »
0
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
  1. #include <iostream.h>
  2. int x=0,val=0,num=0,base=0;
  3. typedef struct datos{
  4.         int dato;
  5.         struct datos *siguiente;
  6.         }tipoNodo;
  7.  
  8. typedef tipoNodo *pNodo;
  9. typedef tipoNodo *Pila;
  10. typedef Pila *pila;
  11.  
  12. void push (Pila *l,int val);
  13. int pop (Pila *l);
  14. void push(Pila *pila,int val){
  15.      pNodo nuevo;
  16.      nuevo = (pNodo) malloc (sizeof(tipoNodo));
  17.      nuevo->dato = val;
  18.      nuevo->siguiente =*pila;
  19.      *pila = nuevo;
  20.      }
  21.  
  22. int pop(Pila *pila){
  23.      pNodo aux;
  24.      int v;
  25.      aux = *pila;
  26.      if (!aux) cout<<"npila vacian";
  27.      *pila = aux->siguiente;
  28.      v = aux->dato;
  29.      free (aux);
  30.      return v;
  31.      system ("pause");
  32.      }
  33.  
  34. void convertir(int num,int base){
  35.                   int aux=0;
  36.                   aux=num;
  37.                   do{
  38.                   val=num%base;
  39.                   push(&pila,val);
  40.                   num=num/base;
  41.                   cout<<"el elemento insertado es:"<<val;
  42.                   x=pop(&pila);
  43.                   cout<<x;
  44.                   aux=aux/base;
  45.                   system("pause");
  46.                   }while(aux>base);
  47.  
  48. }
  49.  
  50. main (){
  51.      Pila pila = NULL;
  52.      cout << "Codigo binario de un numeronDigita el numeron";
  53.      cin>>num;
  54.      cout << "Digita la base que deseas(2-5)n";
  55.      cin >>base;
  56.      convertir (num,base);}
  57.  


Saludos y de antemano gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Nueva duda programa Pila
« Respuesta #1 en: Viernes 18 de Marzo de 2011, 20:01 »
0
Hola de nuevo Jesus21

Primero, no debes usar variables globales.

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

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Nueva duda programa Pila
« Respuesta #2 en: Viernes 18 de Marzo de 2011, 20:11 »
0
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++
  1. typedef Pila *pila;
  2.  

es como si escribieras:

Código: C++
  1. typedef tipoNodo **pila; // Doble apuntador a tipoNodo
  2.  

Ya que arriba estas poniendo:

Código: C++
  1. typedef tipoNodo *Pila; //Pila es alias de apuntador a tipoNodo
  2.  

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 :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Jesus21

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Nueva duda programa Pila
« Respuesta #3 en: Viernes 18 de Marzo de 2011, 20:13 »
0
ahora tengo este codigo:
Código: C
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <cstdlib>
  4. int x=0,val=0,num=0,base=0;
  5. typedef struct datos{
  6.         int dato;
  7.         struct datos *siguiente;
  8.         }tipoNodo;
  9.  
  10. typedef tipoNodo *pNodo;
  11. typedef tipoNodo *Pila;
  12. Pila *pila;
  13.  
  14. void push (Pila *l,int val);
  15. int pop (Pila *l);
  16. void convertir (int num,int base);
  17.  
  18. main (){
  19.      Pila pila = NULL;
  20.      cout << "Codigo binario de un numeronDigita el numeron";
  21.      cin>>num;
  22.      cout << "Digita la base que deseas(2-5)n";
  23.      cin >>base;
  24.      convertir (num,base);}
  25.      
  26. void push(Pila *pila,int val){
  27.      pNodo nuevo;
  28.      nuevo = (pNodo) malloc (sizeof(tipoNodo));
  29.      nuevo->dato = val;
  30.      nuevo->siguiente =*pila;
  31.      *pila = nuevo;
  32.      }
  33.  
  34. int pop(Pila *pila){
  35.      pNodo aux;
  36.      int v;
  37.      aux = *pila;
  38.      if (!aux) cout<<"npila vacian";
  39.      *pila = aux->siguiente;
  40.      v = aux->dato;
  41.      free (aux);
  42.      return v;
  43.      system ("pause");
  44.      }
  45.  
  46. void convertir(int num,int base){
  47.                   int aux=0;
  48.                   aux=num;
  49.                   do{
  50.                   val=num%base;
  51.                   num=num/base;
  52.                   push(&pila,val);
  53.                   }while (num>base);
  54.                   cout<<"el numero es:" <<num;
  55.                   do{
  56.                   x=pop(&pila);
  57.                   cout<<x;
  58.                   }while (*pila!=NULL);
  59.                   system("pause");
  60. }
  61.  


y me salen estos errores al compilar
Código: Text
  1. 52 E:EstructurasincompletosPila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `void push(tipoNodo**, int)'  
  2. 56 E:EstructurasincompletosPila_binario.cpp cannot convert `tipoNodo***' to `tipoNodo**' for argument `1' to `int pop(tipoNodo**)'
  3.  

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Nueva duda programa Pila
« Respuesta #4 en: Viernes 18 de Marzo de 2011, 20:21 »
0
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 :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================