Conversão de base numérica em Portugol (VisuAlg)
Para converter um número decimal para outra base, divide-se o número pela base repetidas vezes: os restos, lidos de trás para frente, são os dígitos do resultado.
O exemplo usa div (divisão inteira), mod (resto) e as funções copia e numpcarac para montar o texto do resultado.
Código em Portugol
algoritmo "conversao_de_base"
var
indice, xresto, decimal, base, xp: inteiro
xc, letras: caractere
inicio
letras <- "ABCDEF"
escreva("Número decimal (até 65535): ")
leia(decimal)
escreva("Base (2 a 16): ")
leia(base)
xc <- ""
para indice de 1 ate 4 faca
xresto <- (decimal mod base)
se xresto = 0 entao
xc <- "0" + xc
senao
se xresto > 9 entao
xp <- xresto - 9
xc <- copia(letras, xp, 1) + xc
senao
xc <- numpcarac(xresto) + xc
fimse
fimse
decimal <- (decimal div base)
fimpara
escreval("Resultado (4 dígitos): ", xc)
fimalgoritmo
Saída do programa
Digitando 255, 16 quando o programa pede:
Número decimal (até 65535): 255
Base (2 a 16): 16
Resultado (4 dígitos): 00FF
Tradução para outras linguagens
O editor traduz qualquer programa em Portugol para C, Java e JavaScript. Veja como fica este exemplo:
O mesmo programa em C
// Algoritmo "conversao_de_base" — traduzido do Portugol para C.
// Para compilar: gcc programa.c -o programa
#include <stdio.h>
#include <string.h>
#define TAM_TEXTO 256
/* Buffers para as funções que devolvem texto (evita ter que usar malloc/free). */
char *texto_temporario(void) {
static char buffers[8][TAM_TEXTO];
static int proximo = 0;
proximo = (proximo + 1) % 8;
return buffers[proximo];
}
/* Junta dois textos (o "+" entre textos do Portugol). */
char *concatena(const char *a, const char *b) {
char *resultado = texto_temporario();
snprintf(resultado, TAM_TEXTO, "%s%s", a, b);
return resultado;
}
/* copia(texto, posicao, quantidade): a posição começa em 1. */
char *copia(const char *texto, int posicao, int quantidade) {
char *resultado = texto_temporario();
int tamanho = (int) strlen(texto);
int inicio = posicao - 1;
if (inicio < 0) inicio = 0;
if (inicio > tamanho) inicio = tamanho;
if (quantidade > tamanho - inicio) quantidade = tamanho - inicio;
snprintf(resultado, TAM_TEXTO, "%.*s", quantidade, texto + inicio);
return resultado;
}
char *inteiro_para_texto(int numero) {
char *resultado = texto_temporario();
snprintf(resultado, TAM_TEXTO, "%d", numero);
return resultado;
}
int main(void) {
int indice = 0;
int xresto = 0;
int decimal = 0;
int base = 0;
int xp = 0;
char xc[TAM_TEXTO] = "";
char letras[TAM_TEXTO] = "";
strcpy(letras, "ABCDEF");
printf("Número decimal (até 65535): ");
scanf("%d", &decimal);
printf("Base (2 a 16): ");
scanf("%d", &base);
strcpy(xc, "");
for (indice = 1; indice <= 4; indice++) {
xresto = decimal % base;
if (xresto == 0) {
strcpy(xc, concatena("0", xc));
} else if (xresto > 9) {
xp = xresto - 9;
strcpy(xc, concatena(copia(letras, xp, 1), xc));
} else {
strcpy(xc, concatena(inteiro_para_texto(xresto), xc));
}
decimal = decimal / base;
}
printf("Resultado (4 dígitos): %s\n", xc);
return 0;
}
O mesmo programa em Java
// Algoritmo "conversao_de_base" — traduzido do Portugol para Java.
// Salve como Main.java e execute: java Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
int indice = 0;
int xresto = 0;
int decimal = 0;
int base = 0;
int xp = 0;
String xc = "";
String letras = "";
letras = "ABCDEF";
System.out.print("Número decimal (até 65535): ");
decimal = Integer.parseInt(entrada.nextLine().trim());
System.out.print("Base (2 a 16): ");
base = Integer.parseInt(entrada.nextLine().trim());
xc = "";
for (indice = 1; indice <= 4; indice++) {
xresto = decimal % base;
if (xresto == 0) {
xc = "0" + xc;
} else if (xresto > 9) {
xp = xresto - 9;
xc = copia(letras, xp, 1) + xc;
} else {
xc = String.valueOf(xresto) + xc;
}
decimal = decimal / base;
}
System.out.println("Resultado (4 dígitos): " + xc);
}
// copia(texto, posicao, quantidade): a posição começa em 1.
static String copia(String texto, int posicao, int quantidade) {
int inicio = Math.min(Math.max(posicao - 1, 0), texto.length());
int fim = Math.min(inicio + quantidade, texto.length());
return texto.substring(inicio, fim);
}
}
O mesmo programa em JavaScript
// Algoritmo "conversao_de_base" — traduzido do Portugol para JavaScript.
// Para executar (Node.js): node programa.js
const readline = require('node:readline');
// Lê uma linha digitada no teclado.
const teclado = readline.createInterface({ input: process.stdin });
const linhas = teclado[Symbol.asyncIterator]();
async function leia() {
const linha = await linhas.next();
return linha.done ? '' : linha.value;
}
async function main() {
let indice = 0;
let xresto = 0;
let decimal = 0;
let base = 0;
let xp = 0;
let xc = "";
let letras = "";
letras = "ABCDEF";
process.stdout.write("Número decimal (até 65535): ");
decimal = parseInt(await leia(), 10);
process.stdout.write("Base (2 a 16): ");
base = parseInt(await leia(), 10);
xc = "";
for (indice = 1; indice <= 4; indice++) {
xresto = decimal % base;
if (xresto === 0) {
xc = "0" + xc;
} else if (xresto > 9) {
xp = xresto - 9;
xc = letras.slice(xp - 1, xp - 1 + 1) + xc;
} else {
xc = String(xresto) + xc;
}
decimal = Math.trunc(decimal / base);
}
console.log(`Resultado (4 dígitos): ${xc}`);
teclado.close();
}
main();