AGRADECIMENTO...

Pessoal, Gostaria de pedir desculpas aqueles que deixam perguntas/comentários/elogios/críticas e ainda não foram respondidos.

Aproveito a oportunidade para informar a todos que devido a correria do dia a dia não conclui o curso de BSI, por isso meus conhecimentos são limitados rsrsrs...

Ainda não retirei o blog do ar porque tem ajudado a diversos estudantes, principalmente os iniciantes.

As vezes, quando o trabalho me permite, ainda arrisco tentar resolver algumas questões rs... mas para não deixar esse blog parar no tempo, o ESTUDANTE que quiser enviar a resolução de alguma questão (código próprio) para o meu e-mail, terei o prazer de posta-la neste blog e será mantido a autoria.

Desde já agradeço a todos pelas visitas e desejo bons estudos.

Thiago Campos
(srthiago@hotmail.com)

terça-feira, 23 de outubro de 2012

O Código Java verifica se a pilha está Balanceada ou não analisando os caracteres caracteres (, ), [, ], {e }.


Considere uma cadeia de caracteres S composta somente dos caracteres (, ), [, ], {e }. Diz-se que S é balanceada se ela possui uma das seguintes formas:

  • S = "", isto é, S é uma cadeia de comprimento zero
  • S = "(T)"
  • S = "[T]"
  • S = "{T}"
  • S = "TU"

Onde Ue T são cadeias balanceadas.
Em outras palavras, para todo parênteses, colchete e chave esquerdos existe um parênteses, colchete e chave direitos. Por exemplo, {()[()]}é balanceada, mas ([)] não é. Escreva um algoritmo que utilize uma pilha de caracteres para testar quando uma dada cadeia é balanceada.


Código Java

//Autor: Thiago Campos
//Data: 24.10.2012

/**
 *
 * @author Thiago
 */
import java.util.*;
import javax.swing.JOptionPane;


public class Q1 {
    public static void main(String args[]) {
        String entrada = JOptionPane.showInputDialog("Informe os caracteres a serem analisados: ");

        if (verifica(entrada) == true)
            JOptionPane.showMessageDialog(null, "A PILHA ESTÁ BALANCEADA.");

        if (verifica(entrada) == false)
            JOptionPane.showMessageDialog(null, "A PILHA NÃO ESTÁ BALANCEADA.");
    } //fim do main
   
/*---------------------------------------------------------------------------------
 *               FUNÇÃO QUE VERIFICA SE A PILHA ESTÁ BALANCEADA OU NÃO
 ---------------------------------------------------------------------------------*/
    public static boolean verifica(String str) {
        Stack<Character> pilha = new Stack<Character>();  //refere-se ao topo de uma pilha

        //variaveis da classe
        char p1 = '(';
        char p2 = ')';
        char br1 = '{';
        char br2 = '}';
        char bk1 = '[';
        char bk2 = ']';

        for (int i = 0; i < str.length(); i++) { //percorre toda a String
            //verificação inicial - verifica caracter por caracter
            if (str.charAt(i) == p1)
                pilha.push(p1);
            else if (str.charAt(i) == br1)
                pilha.push(br1);
            else if (str.charAt(i) == bk1)
                pilha.push(bk1);
           
            else if (str.charAt(i) == p2){
                if (pilha.isEmpty())
                    return false;
                if (pilha.pop() != p1)
                    return false;
            } //fim do if p2
           
            else if (str.charAt(i) == br2) {
                if (pilha.isEmpty())
                    return false;
                if (pilha.pop() != br1)
                    return false;
            } //fim do if br2
           
            else if (str.charAt(i) == bk2) {
                if (pilha.isEmpty())
                    return false;
                if (pilha.pop() != bk1)
                    return false;
            } //fim do if bk2
        }
        return pilha.isEmpty();
    } //fim da função verifica
   
} //fim da Classe Q1

4 comentários:

  1. Muito bom cara.
    Tava com uma baita dor de cabeça e essa foi a solução perfeita para o meu problema, que embora não fosse o mesmo, a sua solução me deu a luz de solução. Usei recursividade.

    ResponderExcluir
    Respostas
    1. Que bom! Fico satisfeito em saber que mesmo afastado da área esse meu blog continua ajudando pessoas que assim como você, o utiliza como um banco de idéias e não simplesmente para copiarem colar.

      Excluir
  2. cara, Obrigadao!
    De alguma forma teu exemplo me ajudou na solução do msm exercício mas usando duas Strings para armazenar as variáveis de abertura e fechamento.
    Valeuzao.
    Por curiosidade, voltou pra área? e se não, por qual motivo?(se for de boa pra vc falar sobre).
    Abc

    ResponderExcluir
    Respostas
    1. Fico contente em saber que ajudei de alguma forma pessoas como você.

      Sobre a sua curiosidade... infelizmente não voltei. Precisei me mudar para o interior por causa do trabalho e não tem faculdades próximas... mas sempre que posso, tento conciliar trabalho, a família e os estudos. Tenho feito alguns cursos na área... hoje tenho como hobby a programação... e continuo praticando para não esquecer.

      Mais uma vez, agradeço a atenção... desculpa não ter respondido antes.

      Um grande abraço e bons estudos.

      Excluir