Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Ajuda com pilha

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Ajuda com pilha

    Pessoal to precisando de uma ajuda, to com duvidas num programa que utiliza pilhas, ela ta compilando, mas na hora que eu digito a palavra apareceu que foi detectado um erro e o programa precisa ser fechado, alguem sabe o que pode ser isso, o programa serve para verificar se o numero de parenteses da string estao iguais, vo posta o codigo aqui embaixo e agradeço se alguem puder me ajudar.

    Código:
    #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;
    }
    Last edited by WarlockOwned; 17-05-2011, 03:29. Motivo: Sem prefixo.

  • Font Size
    #2
    A tag IMPORTANTE é de uso exclusivo da staff.

    Comment


    • Font Size
      #3
      pow desculpa mesmo ai cara, nao sabia, eh que so novo por aqui

      Comment


      • Font Size
        #4
        Oi jct, tudo bom?
        O problema é tão simples que chega a ser engraçado. O teu problema é isso
        Código:
        char *string;
        Mude para
        Código:
        char string[100];
        printf("Digite a expressao!\n");
        scanf("%s", string);
        e o seu programa vai funcionar. Já agora depois dos include coloque isso
        Código:
        #ifndef bool
        #define bool int
        #endif
        
        #ifndef false
        #define false 0
        #endif
        
        #ifndef true
        #define true 1
        #endif
        A primeira tentativa de compilar o seu código recebi erros porque bool, true e false não estavam definidos. C não tem essas coisas. Então coloca assim para que qualquer pessoa possa compilar o seu código sem problema.
        Espero ter ajudado
        “Finalmente encontrei um inimigo digno de mim e uma jornada em que preciso desenvolver toda a minha coragem, pois temos de combater homens bravos e monstruosas feras.”, Alexandre, o Grande.

        Comment


        • Font Size
          #5
          valeu cara, ja ajudo bastante agora pelo menos ele nao ta fechando do nada, mas na hora de dizer se os parenteses estao certos ou errado nao ta dando certo, qualquer que seja a palavra que eu digite, nao importa se eh com parenteses ou sem, sempre aparece parenteses errados, sera que deve ser alguma coisa na função?

          Comment


          • Font Size
            #6
            Muito provavelmente. Estou no trabalho mas vou levar o código e eu digo qualquer coisa amanhã. Algo no teu código não esta batendo certo. Até.
            “Finalmente encontrei um inimigo digno de mim e uma jornada em que preciso desenvolver toda a minha coragem, pois temos de combater homens bravos e monstruosas feras.”, Alexandre, o Grande.

            Comment


            • Font Size
              #7
              olha ja faz tempo q não mexo com C, mas acho que o if da função balanced_parentheses deve estar dento do laço fo. Vai mexendo aí pra ver se da certo, o problema me parece estar em alguns daqueles ifs desta função mesmo.
              Depois posta a forma correta pra gente ve quando vc conseguir.
              flww

              Comment


              • Font Size
                #8
                Resolução

                Boa tarde.
                Desculpa pela demora, ontem não entrei na Internet. Quando ao problema consigui resolver. Aqui vai a resolução:
                Código:
                /*** Inclusão de bibliotecas ***/
                #include <stdio.h>
                #include <stdlib.h>
                
                /*** Constante ***/
                #define TAM  100
                #define TAM_STRING 50
                
                #ifndef bool
                	#define bool int
                #endif
                
                #ifndef false
                	#define false 0
                #endif
                
                #ifndef true
                	#define true 1
                #endif 
                
                /*** Definição de tipos ***/
                typedef struct {
                int topo;
                char dado[TAM];
                }pilha_t;
                
                /*** Funções ***/
                
                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");
                	}
                }
                
                bool empty(pilha_t *pilha){
                	if(pilha -> topo == -1){
                		return true;
                	}else{
                		return false;
                	}
                }
                
                bool balanced_parentheses(char * string){
                	int contador = 0;
                	char * aux = string;
                	
                	while(*aux){		// Enquanto não for o fim da string...
                		if(*aux == '(')
                			contador++;
                		else if(*aux == ')')
                			contador--;
                		aux++;		// Avança para o próximo caracter 
                	}
                	if(contador == 0)
                		return true;
                	else
                		return false;
                }
                
                /*** Main ***/
                int main(){
                	char string[TAM_STRING];
                
                	printf("\nDigite a expressao: ");
                	scanf("%s", string);
                	if(balanced_parentheses(string)){
                		printf("Parenteses corretos");
                	}else{
                		printf("parenteses errados");
                	}
                	// system ("pause");
                	return 0;
                }
                Eu reescrevi a função balanced_parentheses. Quando o assunto é manipular string eu gosto de usar apontadores. Se você não sabe ou não gosta de trabalhar com apontadores aqui vai a função balanced_parentheses sem apontadores:
                Código:
                bool balanced_parentheses(char * string){
                	int contador, i;
                	
                	for(i = contador = 0; string[i] != '\0'; i++){
                		if(string[i] == '(')
                			contador++;
                		else if(string[i] == ')')
                			contador--;
                	}
                	if(contador == 0)
                		return true;
                	else
                		return false;
                }
                Qualquer dúvida é só postar. Abraços.
                “Finalmente encontrei um inimigo digno de mim e uma jornada em que preciso desenvolver toda a minha coragem, pois temos de combater homens bravos e monstruosas feras.”, Alexandre, o Grande.

                Comment

                X
                Working...
                X