elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Proyecto Analizador de Parentesis implementado con Puntero de Clase Pila
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Proyecto Analizador de Parentesis implementado con Puntero de Clase Pila  (Leído 3,249 veces)
Elias Flores

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Proyecto Analizador de Parentesis implementado con Puntero de Clase Pila
« en: 8 Julio 2019, 18:02 pm »

Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5. struct Nodo{
  6. int Elemento;
  7. Nodo *Sig;
  8. };
  9. class Pila{
  10. private:
  11. Nodo *Tope;
  12. public:
  13. void Crear();
  14. bool Vacia();
  15. void Meter(int);
  16. void Sacar(int &);
  17. //int Cima();
  18. void Mostrar();
  19. void Analizar();
  20. };
  21. void Pila::Crear(){
  22.   Tope=NULL;
  23. }
  24. bool Pila::Vacia(){
  25.  return Tope==NULL;
  26. }
  27. //int Pila::Cima(){
  28.  //if(!Vacia()){
  29.  //return Tope->Elemento;
  30.  //}
  31. //}
  32. void Pila::Meter(int E){
  33.  Nodo *aux=new Nodo();
  34.  if(aux!=NULL){
  35. aux->Elemento=E;
  36. aux->Sig=Tope;
  37. Tope=aux;
  38.  }
  39. }
  40. void Pila::Sacar(int &E){
  41.  if(!Vacia()){
  42. Nodo *aux=Tope;
  43. E=Tope->Elemento;
  44. Tope=Tope->Sig;
  45. delete(aux);
  46.  }
  47. }
  48. void Pila::Analizar(){
  49.    Pila p;
  50. char frase [30];
  51. int x,c,d;
  52. p.Crear();
  53. c=0;
  54. d=0;
  55. cout<<"Escriba un texto: "<<endl;
  56. cin>>frase;
  57. int i=0;
  58. while(frase[i]!='\0'){
  59.   if(frase[i]=='('){
  60.   p.Meter(frase[i]);
  61.   c++;
  62.   }
  63.   if(frase[i]==')'){
  64.   p.Sacar(x);
  65.   d++;
  66.   }
  67.   i++;
  68. }
  69. if(c==d)
  70. cout<<"Los parentesis estan correctos"<<endl;
  71. else
  72. cout<<"Los parentesis estan incorrectos"<<endl;
  73. }
  74. void Pila::Mostrar(){
  75. Nodo *aux=Tope;
  76. if (!Vacia()) {
  77.   while (aux!=NULL){
  78. cout<<"||\t";
  79. cout<<aux->Elemento;
  80. cout<<"\t ||\n";
  81. aux=aux->Sig;
  82. }
  83. }else{
  84. cout<<" ||\t \t||\n";
  85. }
  86. }
  87. int main(){
  88. bool menu=true;int i;Pila P;
  89.    while(menu){
  90. cout<<"\t\t*********************************"<<endl;
  91. cout<<"\t\t*\tMENU\t\t\t*"<<endl;
  92. cout<<"\t\t*********************************"<<endl;
  93. cout<<"\t\t*\t1.-Analizar Frase: \t*"<<endl;
  94. cout<<"\t\t*\t2.-Mostrar Pila\t\t*"<<endl;
  95. cout<<"\t\t*\t3.-Salir\t\t*"<<endl;
  96. cout<<"\t\t*********************************"<<endl;
  97. cin>>i;
  98.        if(i==1){
  99.            P.Analizar();
  100.        }else{
  101.            if(i==2){
  102.                P.Mostrar();
  103.            }else{
  104.                if(i==3){
  105.                    exit(0);
  106.                }
  107.            }
  108.        }
  109. }
  110.    return 0;
  111. }
  112.  


« Última modificación: 8 Julio 2019, 18:39 pm por Elias Flores » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Proyecto Analizador de Parentesis implementado con Puntero de Clase Pila
« Respuesta #1 en: 10 Julio 2019, 21:48 pm »

Algunas funciones son mejorables...
  • La función <Crear()> se podría implementar como el constructor por defecto para no tener que llamarlo cuando creas una <Pila>.
  • La función <Sacar()> podría devolver el valor en vez de meterlo en una variable por referencia (como el clásico <top()> de la <stack> de STL aunque en este caso <Sacar()> hace el trabajo de <top()> y <pop()> juntos).
  • La función <Analizar()> debería ser de tipo <bool> para evitar un <cout> dentro de la función.
  • Si usas un <string> en lugar de un <char[]> no tendrás el problema de sobrepasar los 30 caracteres (ventajas de C++).
  • El menu podrías poner <while(true)> y evitar una variable más o hacer un <do while> para salir cuando la opción sea 3 y evitar el uso de <exit()>

Estos son únicamente consejos por si quieres mejorar la implementación. Y ya para hacerlo más completo te recomendaría usar un <template> para poder usarla con distintos tipos de datos. Suerte si te animas a implementar alguna de las ideas. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Elias Flores

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: Proyecto Analizador de Parentesis implementado con Puntero de Clase Pila
« Respuesta #2 en: 14 Julio 2019, 00:48 am »

El codigo en si puede ser mucho mas corto con recurison y añadiendo los consejos que me diste pero el docente con el que estoy me pide hacerlo de esta forma para aprender a estructurar codigos ya que la materia en la que estoy se llama ESTRUCTURA DE DATOS 1 lo subi por si alguien necesita una orientacion en este tema de la carrera de programacion yo mismo lo arreglaria el codigo pero estoy en examenes FINALES T_T pero si gusta modificarlo hazlo 8D solo recuerda compartir al final tu codigo MODIFICADO para ayudar a la comunidad y recuerda EL QUE NO COMPARTE NO ENTRA AL CIELO  ;-) :D :D ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como apuntar a una struc de otra clase con un puntero de otra clase?. xD
Programación C/C++
anonimo12121 3 3,355 Último mensaje 21 Junio 2012, 09:58 am
por anonimo12121
Duda puntero a pila.
Programación General
lanun 0 1,472 Último mensaje 27 Marzo 2014, 20:05 pm
por lanun
Crear puntero a clase abstracta y problema usando vector
Programación C/C++
cNoob 6 2,818 Último mensaje 9 Enero 2018, 20:39 pm
por ThunderCls
Clase pila estática « 1 2 »
Programación C/C++
GominaTilted 15 5,004 Último mensaje 31 Octubre 2019, 14:50 pm
por GominaTilted
puntero a clase con propiedades alojadas en la pila
Programación C/C++
digimikeh 2 2,895 Último mensaje 4 Marzo 2021, 04:02 am
por digimikeh
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines