hpt 0 Denunciar post Postado Maio 8, 2011 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
guidjos 65 Denunciar post Postado Maio 8, 2011 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
hpt 0 Denunciar post Postado Maio 9, 2011 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