Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. /*
  7. Quando fazermos alguma estrutura dinâmica, isso quer dizer que você tera que utilizar apenas ponteiros,
  8. e Nós, já que cada Nó guarda dados, e cada Nó tem um ponteiro apontando para o proximo Nó, pois para
  9. conseguir acessar outros elementos é necessario fazer isso para não perdermos os outros elementos independentimente
  10. da estrutura que você esteja usando.
  11. */
  12. // O pai aponta pro item topo da pilha.
  13. class No{
  14.     public:
  15.         char item;
  16.         No *proximo;
  17. };
  18.  
  19. class PilhaDinamica{
  20.     public:
  21.         No *topo;
  22.         int pilha_tamanho;
  23.        
  24.         // Construtor
  25.         PilhaDinamica(){
  26.             topo = NULL;
  27.             pilha_tamanho = 0; 
  28.         }
  29.        
  30.         // Verificando se a pilha esta vazia
  31.         bool vazia(){
  32.             if (topo == NULL){
  33.                 return true;
  34.             }
  35.             else
  36.             {
  37.                 return false;
  38.             }
  39.         }
  40.        
  41.         // Verificando o tamanho da pilha
  42.         int tamanho_pilha(){
  43.             No *aux = topo;
  44.             while(aux != NULL){
  45.                 pilha_tamanho++;
  46.                 aux = aux->proximo;
  47.             }
  48.             return pilha_tamanho;
  49.         }
  50.        
  51.         /*
  52.         Esse metodo push você insere elementos a pilha, o primero passo é alocar memoria dinamicamenta,
  53.         em um ponteiro para ter um lugar para se armazenar.
  54.         */
  55.         bool push(char elemento){
  56.             No *no_filho = new No();
  57.            
  58.             if (no_filho == NULL){ // Caso o OS não forneça memoria ele apontara para NULL e retornata false
  59.                 return false;
  60.             }
  61.             else
  62.             {  
  63.                 /*
  64.                 O no_filho tem memoria alocada dinamicamente, postanto sempre que o metodo for chamado, sera criado
  65.                 um local na memoria com esse Nó com seus dados dentro, esse Nó provem de uma class, portanto o mesmo
  66.                 funcionaria com o new já que ele sempre cria um novo endereço para tal objeto, portanto alocando
  67.                 dinamicamente.
  68.                 */
  69.                 no_filho->item = elemento;
  70.                 no_filho->proximo = topo;
  71.                
  72.                 topo = no_filho;
  73.                 return true;
  74.             }
  75.         }
  76.        
  77.         // Metodo pop para retornar e remover o ultimo elemento da pilha,
  78.         // no caso oque esta no topo.
  79.         char pop(){
  80.             No *TEMP;
  81.            
  82.             if (vazia()){
  83.                 return false;
  84.             }
  85.             else
  86.             {
  87.                 char elemento = topo->item;
  88.                 TEMP = topo;
  89.                 topo = topo->proximo;
  90.                 free(TEMP);
  91.                 pilha_tamanho--;
  92.                 return elemento;
  93.             }
  94.         }
  95.        
  96.         // Metodo para verificar o elemento que esta no top da pilha.
  97.         char espiando_topo(){
  98.             return topo->item;
  99.         }
  100.    
  101. };
  102.  
  103. int len(char *elemento){
  104.     int tamanho = 0;
  105.     while(*elemento != '\0'){
  106.         tamanho++;
  107.         elemento++;
  108.     }
  109.     return tamanho;
  110. }
  111.  
  112. bool verificando(char *elemento){
  113.     PilhaDinamica *referencia_pilhaDinamica = new PilhaDinamica();
  114.     int tamanho = len(elemento);
  115.     int aux = 0;
  116.  
  117.     while(aux < tamanho){
  118.        
  119.         if ((*elemento == '(') || (*elemento == '[') || (*elemento == '{')){
  120.             referencia_pilhaDinamica->push(*elemento);
  121.         }
  122.         else
  123.         {
  124.             if (*elemento == ')'){
  125.                 if (referencia_pilhaDinamica->pop() != '('){
  126.                     return false;  
  127.                 }
  128.             }
  129.             else if(*elemento == '}'){
  130.                 if (referencia_pilhaDinamica->pop() != '{'){
  131.                     return false;
  132.                 }  
  133.             }
  134.             else if(*elemento == ']'){
  135.                 if (referencia_pilhaDinamica->pop() != '['){
  136.                     return false;
  137.                 }  
  138.             }  
  139.         }
  140.     aux++;
  141.     elemento++;
  142.     }
  143.     return referencia_pilhaDinamica->vazia();
  144. }
  145.  
  146. void resultado(char *elemento){
  147.     if (verificando(elemento) == true){
  148.         cout << "\n" << elemento << " <- CORRETO!" <<"\n";
  149.     }
  150.     else
  151.     {
  152.         cout << "\n" << elemento << " <- ERRADO!" <<"\n";
  153.     }
  154. }
  155.  
  156.  
  157. int main()
  158. {
  159.    
  160.     char *a = "{g}[(hj)]k";    
  161.     resultado(a);
  162.    
  163.     char *b = "a + [b + (2*c*d + 2)]";  
  164.     resultado(b);
  165.    
  166.     char *c = "a + b + (2*c*d + 2)]";
  167.     resultado(c);
  168.    
  169.     char *d = "a +( b + 2*c*d + 2)]";
  170.     resultado(d);
  171.    
  172.     char *f = "a +( b + 2*c*d + 2))";
  173.     resultado(f);
  174.    
  175.     char *g = "a + [b + (2*c*d + 2])";
  176.     resultado(g);
  177.    
  178.     char *h = "a + [b + (2*c*d + 2";
  179.     resultado(h);
  180.    
  181.     char *i = "a + b + 2*c*d + 2])";
  182.     resultado(i);
  183.    
  184.     char *j = "a + [b + [2*c*d + 2]]";
  185.     resultado(j);
  186.    
  187.     char *l = "{[a + b] + ({2*c*d} + 2)}";
  188.     resultado(l);
  189.    
  190.    
  191.    
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement