Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hpt

pilha

Recommended Posts

pessoal, ta fazendo um programa pra trabalha com pilha, to fazendo as funções de empilha,desempilha, verificar se a pilha esta vazia e se o numero de parenteses da string esta balanceado, soh que ta dando um erro nas funções e eu nao sei qual é, vo posta o codigo aqui pra ver se alguem pode me ajudar, desde ja eu agradeço.

valeu

 

 

 

#include <stdio.h>
#include <stdlib.h>
#define TAM  100

typedef struct {
       int topo;
       char dado[TAM];
       }pilha_t;



char pop(pilha_t *pilha){
    if(*pilha.topo == -1){
         printf("pilha vazia");
         return;
         }else{
               pilha.topo--;
               return pilha.dado[pilha.topo + 1];
               }
    }

void push( pilha_t *pilha, char novo_elemento){
    if (*pilha.topo < TAM){
          pilha.topo++;
          pilha.dado[ilha.topo] = novo_elemento;
          }else{
                printf("pilha cheia");
                }
    return;
    }
boolean empty(pilha_t *pilha){
       if(*pilha.topo == -1){
                 return true;
                 }else{
                       return false;
                       }
       }

boolean balanced_parentheses(char *string){
       pilha_t pilha;
       int i;
       int cont = 0;
       while (*string != '\0'){
             for(i = 0; i < TAM; i++){
                   if(s[i] == '('){
                           cont ++;
                        }elseif(s[i] == ')'){
                                     cont--;
                                  }
                   if (cont < 0){
                            return false;
                            }
             }//for
             if(cont != 0){
                     return false;
                  }else{
                        return true;
                        }
       }//while
}


int main(){
   char *s;
   printf("Digite a expressao.\n");
   scanf("%s", &*s);
   if(balanced_parentheses(*s)){
        printf("Parenteses corretos");
        }else{
              printf("parenteses errados");
              }
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para usar membros de structs a partir de ponteiros para structs, você deve usar o operador '->' ao invés do '.', ou levar em consideração a precedência mais alta que a do '*'. Portanto:

 

struct foo
{
 int a;
};

struct foo *p = {...};

// errado: (p.a) não é um endereço válido
printf("%d", *p.a);

// correto:
printf("%d", p->a);

// também correto:
printf("%d", (*p).a);

 

Nem olhei o resto do código. Veja se consegue a partir daí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

andei dando uma revizada no programa e vi varios erros, agora ele ja ta compilando, soh que nao ta fazendo o que era pra faze, era pra ele ver se o numero de parenteses da expressao esta certo, soh que na hora que eu digito a palavra no programa aparece que deu um erro e o programa precisa ser fechado.

alguem sabe o que pode ser isso?

vo posta o codigo aqui pra verem.

 

 

#include <stdio.h>
#include <stdlib.h>
#define TAM  100

typedef struct {
       int topo;
       char dado[TAM];
       }pilha_t;



char pop(pilha_t *pilha){
    if(pilha -> topo == -1){
         printf("pilha vazia");
         return 1 ;
         }else{
               pilha -> topo--;
               return pilha -> dado[pilha -> topo + 1];
               }
    }

void push( pilha_t *pilha, char novo_elemento){
    if (pilha -> topo < TAM){
          pilha -> topo++;
          pilha -> dado[pilha -> topo] = novo_elemento;
          }else{
                printf("pilha cheia");
                }
    return;
    }
bool empty(pilha_t *pilha){
       if(pilha -> topo == -1){
                 return true;
                 }else{
                       return false;
                       }
       }

bool balanced_parentheses(char *string){
       pilha_t pilha;
       int i;
       int cont = 0;
       while (string != '\0'){
             for(i = 0; i < TAM; i++){
                   if(string[i] == '('){
                           cont ++;
                        }else if(string[i] == ')'){
                                     cont--;
                                  }
                   if (cont < 0){
                            return false;
                            }
             }
             if(cont != 0){
                     return false;
                  }else{
                        return true;
                        }
       }
}

int main(){
   char *string;
   printf("Digite a expressao!\n");
   scanf("%s", &string);
   if(balanced_parentheses(string)){
        printf("Parenteses corretos");
        }else{
              printf("parenteses errados");
              }
   system ("pause");
   return 0;
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.