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)

sábado, 2 de junho de 2012

Converter Binário em Decimal e Decimal em Binário

Faça um programa em Java no qual o usuário possa escolher a opção desejada; Converter Binário em Decimal, Decimal em Binário ou sair. Que o usuario possa repetir ate desejar sair. (trabalhe com numeros binários e decimais).

Código Java

//Autor: Thiago Campos
//Data: 02.05.2012
//Programa que converte um numero decimal/binário ou binário/decimal

import javax.swing.JOptionPane;

/**
 *
 * @author Thiago
 */
public class Converte {
     public static void main(String[] args) {  //inicio do método main
        //declaração de variaveis
        int num[] = new int[100];  //BD criação do vetor tipo inteiro
        int resultado = 0, bin = 0, ver = 0; //BD variaveis inteiro
        String binario;  //BD variavel String
       
        float numero; //DB var do tipo real
        int resto; //DB var do tipo inteira
        int q[] = new int[100]; //DB vetor quociente
        String sequencia = "", seqBinaria = ""; //DB Strings inicializadas
            
        int menu; //variavel do menu
       
        do{       
       
        menu = Integer.parseInt(JOptionPane.showInputDialog("    Trabalho de Thiago Campos\n\nMENU DE OPÇÕES\n1 - Converte de Binário para Decimal"
                + "\n2 - Converte de Decimal para Binário\n3 - Sair"));
       
        //Escolha do menu
        switch(menu){
            case 1:          
        //INICIO - CONVERTE DE BINÁRIOS PARA DECIMAL
        //entrada de dados - saida dos dados - Usando uma Janela grafica JOptionPane
        binario = JOptionPane.showInputDialog("Informe o numero binário:");

        //Validação
        for (int i = 0; i < binario.length(); i++) {
            //verifica se o numero é binario
            if (binario.charAt(i) < 48 || binario.charAt(i) > 49) {
                //saida dos dados - Usando uma Janela grafica JOptionPane
                JOptionPane.showMessageDialog(null, "Operação Inválida!");
                ver = 1; // variavel verificadora
                break;
            }
        } //fim da validação
        if (ver == 0) {
            for (int i = 0; i < binario.length(); i++) {
                //recebe o caracter 0 ou 1, mas entende que o correspondente inteiro é 48 ou 49
                bin = binario.charAt(i);

                //se o valor for 48 atribui ao vetor 0
                if (bin == 48) {
                    num[i] = 0;
                }

                //se o valor for 48 atribui ao vetor 1
                if (bin == 49) {
                    num[i] = 1;
                }

                //formula que
                resultado = num[i] + 2 * resultado;
               
            } //fim do for
            //saida dos dados - Usando uma Janela grafica JOptionPane
            JOptionPane.showMessageDialog(null, "O número decimal correspondente é: " + resultado);
             resultado =0; // Zera a variavel para o proximo uso
        } //fim do If
        //FIM - CONVERTE DE BINÁRIOS PARA DECIMAL
        break;
            case 2:          
        //INICIO - CONVERTE DE DECIMAL PARA BINÁRIOS
        //Entrada de dados - var recebento a String convertida em Float
        numero = Float.parseFloat(JOptionPane.showInputDialog("Informe o numero decimal:"));
        
        //processamento: convertendo decimal
        while (numero > 0) {  //faça enquanto o numero for maior que zero
            int i = 0;  //inicializando a var local
            resto = (int) numero % 2;  //var assumindo o resto da divisão
            q[i] = (int) (numero / 2);  //O vetor recebe a parte inteira da divisão
            numero = q[i];  //a var assumindo novo numero = quociente da divisão
            sequencia += resto;  //var sequencia concatenando o resto das divisões
            i++;  //incrementando a var local
        }
        //Loop para inverter os caracteres da String sequencia
        for (int j = sequencia.length() - 1; j >= 0; j--) {
            seqBinaria = seqBinaria + sequencia.charAt(j); //var que concatena o resultado
        } // fim do FOR
        //janela que mostra a sequencia binaria correspondente
        JOptionPane.showMessageDialog(null,"O correspondente binário é "+seqBinaria);
       

        //Esses 2 comandos abaixos vão zerar as variaveis e deixa-los prontos para novo uso
        seqBinaria = "";
        sequencia = "";

        //FIM - CONVERTE DE DECIMAL PARA BINÁRIOS
                break;
            case 3:
                JOptionPane.showMessageDialog(null, "Saindo do programa.");
                break;
            default: //Retorno da opção invalida
                JOptionPane.showMessageDialog(null, "Opção Inválida!");
        } //fim do Switch
        }while(menu != 3); //Condição para sair do programa
    } //fim da Main
}  //fim da Classe

12 comentários:

  1. quando eu faço o calculo a 1° vez ele retorna o valor correto da conversão mais quando eu faço a segunda ele começa a da valor errado tipo de binário pra dec 10 = 2 depois se eu faço de novo 10 vai da = 10 por que ?

    ResponderExcluir
    Respostas
    1. Olá amigo, obrigado pela observação. O erro ocorre porque a variável "resultado" precisa ser zerada pois, após o primeiro uso, passa a guardar valores.

      Portanto experimenta por "resultado = 0;" após "JOptionPane.showMessageDialog(null, "O número decimal correspondente é: " + resultado);" no final da conversão de binario para decimal.

      Não tive tempo de efetuar os testes, mas creio que funcione. Um abço.

      Excluir
  2. ok esse problema foi resolvido, mais o de decimal pra binaria esta da mesma forma como devo corrigir esse erro, desde já agradeço pela sua atenção; e pesquisando sobre o assunto o seu blog é o único canto que fala sobre o mesmo, obrigado

    ResponderExcluir
    Respostas
    1. Olá, acredito que o problema seja resolvido da mesma forma que o anterior, basta zerar a variavel "seqBinaria", uma vez que ao utiliza-la pela segunda vez, os novos valores somam aos ja existentes. Experimenta por "seqBinário = 0;" após "JOptionPane.showMessageDialog(null,"O correspondente binário é "+seqBinaria);".

      Pode continuar acessando e tirando dúvidas, ou até mesmo corrigindo algumas falha...rs!
      Agradeço mais uma vez e boa sorte nos estudos!

      Excluir
  3. Infelizmente não deu certo esse método,
    ele não recebe "0" pois é uma String segundo o ero do código

    ResponderExcluir
  4. outra pergunta tem como eu fazer essas conversões sem utilizar vetores ?

    ResponderExcluir
    Respostas
    1. Amigo, infelizmente não sei te responder, pois nunca tentei.
      Acredito que sim, mas utilizando um código mais avançado. Estes são bem básicos.

      Excluir
  5. seqBinaria = ""; Não deu certo coloquei esse comando JOptionPane.showMessageDialog(null,"O correspondente binário é "+seqBinaria);
    seqBinaria = "";
    mais não deu certo caso tenha outra solução fico no aguardo
    abraço

    ResponderExcluir
    Respostas
    1. Anônimo a solução é:

      //Esses 2 comandos abaixos vão zerar as variaveis e deixa-los prontos para novo uso
      seqBinaria = "";
      sequencia = "";

      Dessa vez, tive o trabalho de testa-la e garanto que deu certo.
      Um abraço!

      Excluir
  6. agora sim deu tudo certo, mais olha sem duvidas agradeço pelas duvidas tiradas e pela atenção em tentar ajudar ao próximo
    por enquanto, vou parar de fazer perguntas kkkkkkkkk
    mais no seu blog tem muita coisa boa e vou olhar cada material abraço e obrigado

    ResponderExcluir
    Respostas
    1. Obrigado, é satisfatório ter o trabalho reconhecido. A ideia de ajudar o próximo é boa e deve ser compartilhada. Espero que todos que de alguma forma foram ajudados por este blog, ajudem a alguém mais na frente. São quase 40 mil acesso por todo o mundo, se pelo menos a metade fizer o mesmo, teremos contribuído para um mundo melhor.
      Fique a vontade para perguntar, não sei de muita coisa, hoje me considero mais um amante da programação. Se eu não souber, te falo ou pesquiso uma alternativa de resposta.
      Fique com Deus e bons estudos!

      Excluir