001 import java.util.Scanner;
002 /**
003 Esta é o aperfeiçoamento do código do Conversor4.
004 Usa uma particularidade da codificação de caracteres
005 para encurtar o código.
006 */
007
008 public class Conversor5 {
009
010 /**
011 Este é o ponto de entrada do programa: o método que é invocado
012 pela JVM.
013 Pergunta ao usuário que conversor ele deseja usar e invoca
014 o método que faz a conversão. Permite também que o usuário
015 termine o programa e que refaça a escolha caso tenha digitado
016 uma opção que não existe.
017 */
018 public static void main (String[] args){
019 int opt=0; // opcao de conversao - usada somente neste método.
020
021 /* Valores não precisam sair do método. */
022 Scanner sc=new Scanner (System.in); // leitor de teclado
023 do {
024 System.out.println ("1 para 10->12; 2 para 12->10; 3 para sair");
025 System.out.println ("(inteiros - tipo diferente dá pau.)");
026 opt=sc.nextInt();
027 switch (opt) {
028 case 1: // 10->12;
029 dez2doze(); // invocação do método
030 break;
031 case 2: // 12->10;
032 doze2dez(); // invocação do método
033 break;
034 case 3: break;
035 default:
036 System.out.println ("Digite novamente.");
037 }
038 } while (opt!=3);
039 }
040
041 /** Esta é a declaração, ou definição do método. Dizemos como deve
042 ser a invocação (a assinatura do método) e o que ele deve fazer
043 (o bloco de código do método).
044 Este método pergunta ao usuário o valor inteiro na base 10 que
045 o usuário deseja converter, converte-o para um String que
046 representa o número na base 12 e o escreve na tela.
047 A conversão é feita por divisões sucessivas.
048 */
049 public static void dez2doze () {
050 int m; // digito para conversor 10->12 - usado somente neste método
051
052 /* Valores não precisam sair do método. */
053 int num10; // numero base 10 - destruido na conversao
054 String num12; // numero base 12;
055 Scanner sc=new Scanner (System.in); // leitor de teclado
056
057 System.out.println ("Digite o número decimal.");
058 System.out.println ("(inteiros - tipo diferente dá pau.)");
059 num10=sc.nextInt();
060 num12="";
061 while (num10>0) {
062 m=num10%12;
063 num10/=12;
064 num12=(char)('A'+m)+num12;
065 }
066 System.out.println ("Resultado:" + num12);
067 }
068
069 /**
070 Este método pergunta ao usuário o valor na base 12 que
071 o usuário deseja converter, recebe-o como String, converte-o em
072 número inteiro na base 10 e o escreve na tela.
073 A conversão é feita por soma de produto do dÃgito por potência.
074 */
075 public static void doze2dez () {
076 /*i, c, numErr, len são usados somente neste método. */
077 int i; // contador para conversor 12 ->10
078 char c; // caracter corrente para conversor 12->10
079 boolean numErr; // flag de erro no numero base 12
080 int len;// comprimento do número base 12
081
082 /* Valores não precisam sair do método. */
083
084 int num10; // numero base 10 - destruido na conversao
085 String num12; // numero base 12;
086 Scanner sc=new Scanner (System.in); // leitor de teclado
087
088 System.out.println ("Digite o número base 12.");
089 num12=sc.next();
090 len=num12.length();
091 numErr=false;
092 num10=0;
093 i=0;
094 while ((i<len)&&(!numErr)){
095 c=num12.charAt(i);
096 i++;
097 num10*=12;
098 if ((c<'A')||(c>'L')) {
099 System.out.println ("Erro dÃgito não corresponde a número.");
100 numErr=true;
101 }
102 num10+=c-'A';
103 }
104 if (!numErr) System.out.println ("Resultado:" + num10);
105 }
106
107 }
|
Nenhum comentário:
Postar um comentário