001 import java.util.Scanner;
002 /**
003 Esta é o aperfeiçoamento do código do Conversor3. Converter as variáveis
004 globais em locais caso o valor armazenado não precise ser mantido fora
005 do método.
006 */
007
008 public class Conversor4 {
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 switch (m) {
065 case 0:
066 num12='A'+num12;
067 break;
068 case 1:
069 num12='B'+num12;
070 break;
071 case 2:
072 num12='C'+num12;
073 break;
074 case 3:
075 num12='D'+num12;
076 break;
077 case 4:
078 num12='E'+num12;
079 break;
080 case 5:
081 num12='F'+num12;
082 break;
083 case 6:
084 num12='G'+num12;
085 break;
086 case 7:
087 num12='H'+num12;
088 break;
089 case 8:
090 num12='I'+num12;
091 break;
092 case 9:
093 num12='J'+num12;
094 break;
095 case 10:
096 num12='K'+num12;
097 break;
098 case 11:
099 num12='L'+num12;
100 break;
101 default:
102 System.out.println ("Erro desconhecido.");
103 }
104 }
105 System.out.println ("Resultado:" + num12);
106 }
107
108 /**
109 Este método pergunta ao usuário o valor na base 12 que
110 o usuário deseja converter, recebe-o como String, converte-o em
111 número inteiro na base 10 e o escreve na tela.
112 A conversão é feita por soma de produto do dÃgito por potência.
113 */
114 public static void doze2dez () {
115 /*i, c, numErr, len são usados somente neste método. */
116 int i; // contador para conversor 12 ->10
117 char c; // caracter corrente para conversor 12->10
118 boolean numErr; // flag de erro no numero base 12
119 int len;// comprimento do número base 12
120
121 /* Valores não precisam sair do método. */
122
123 int num10; // numero base 10 - destruido na conversao
124 String num12; // numero base 12;
125 Scanner sc=new Scanner (System.in); // leitor de teclado
126
127 System.out.println ("Digite o número base 12.");
128 num12=sc.next();
129 len=num12.length();
130 numErr=false;
131 num10=0;
132 i=0;
133 while ((i<len)&&(!numErr)){
134 c=num12.charAt(i);
135 i++;
136 num10*=12;
137 switch (c) {
138 case 'A':
139 num10+=0;
140 break;
141 case 'B':
142 num10+=1;
143 break;
144 case 'C':
145 num10+=2;
146 break;
147 case 'D':
148 num10+=3;
149 break;
150 case 'E':
151 num10+=4;
152 break;
153 case 'F':
154 num10+=5;
155 break;
156 case 'G':
157 num10+=6;
158 break;
159 case 'H':
160 num10+=7;
161 break;
162 case 'I':
163 num10+=8;
164 break;
165 case 'J':
166 num10+=9;
167 break;
168 case 'K':
169 num10+=10;
170 break;
171 case 'L':
172 num10+=11;
173 break;
174 default:
175 System.out.println ("Erro dÃgito não corresponde a número.");
176 numErr=true;
177 }
178 }
179 if (!numErr) System.out.println ("Resultado:" + num10);
180 }
181
182 }
|
Nenhum comentário:
Postar um comentário