Imprimir el Número Convertido
En este último paso, mejoraremos nuestro programa de conversión de bases agregando opciones de salida y formato más completas para mostrar el número convertido.
Abra el archivo existente y actualice el código:
cd ~/project
nano base_converter.c
Actualice el código con una impresión y formato mejorados:
#include <stdio.h>
#include <string.h>
// Función para convertir decimal a cualquier base
void convertToBase(int number, int base, char *result) {
int index = 0;
char digits[] = "0123456789ABCDEF";
int original = number; // Almacenar el número original para mostrar
// Manejar el caso especial de 0
if (number == 0) {
result[index++] = '0';
result[index] = '\0';
return;
}
// Convertir utilizando división y residuos
while (number > 0) {
int remainder = number % base;
result[index++] = digits[remainder];
number = number / base;
}
// Invertir la cadena
result[index] = '\0';
for (int i = 0, j = index - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
// Función para imprimir información detallada de la conversión
void printConversionInfo(int decimal, int base, const char *converted) {
printf("\n--- Number Conversion Details ---\n");
printf("Original Number (Decimal): %d\n", decimal);
printf("Target Base: %d\n", base);
printf("Converted Number: %s\n", converted);
// Representaciones adicionales de bases
printf("\nBase Representations:\n");
printf(" Decimal: %d\n", decimal);
// Representación binaria
if (base!= 2) {
char binaryResult[33];
convertToBase(decimal, 2, binaryResult);
printf(" Binary: %s\n", binaryResult);
}
// Representación hexadecimal
if (base!= 16) {
char hexResult[9];
convertToBase(decimal, 16, hexResult);
printf(" Hexadecimal: %s\n", hexResult);
}
}
int main() {
int number, base;
char result[33]; // Máximo 32 bits + terminador nulo
// Solicitar al usuario que ingrese el número decimal
printf("Enter a decimal number to convert: ");
scanf("%d", &number);
// Solicitar al usuario que ingrese la base objetivo
printf("Enter the target base (2-16): ");
scanf("%d", &base);
// Validar la entrada de la base
if (base < 2 || base > 16) {
printf("Invalid base. Please enter a base between 2 and 16.\n");
return 1;
}
// Convertir el número
convertToBase(number, base, result);
// Imprimir información detallada de la conversión
printConversionInfo(number, base, result);
return 0;
}
Compile y ejecute el programa:
gcc base_converter.c -o base_converter
./base_converter
Ejemplo de salida:
Enter a decimal number to convert: 42
Enter the target base (2-16): 16
--- Number Conversion Details ---
Original Number (Decimal): 42
Target Base: 16
Converted Number: 2A
Base Representations:
Decimal: 42
Binary: 101010
Hexadecimal: 2A
Explicación del código:
- Se agregó la función
printConversionInfo()
para proporcionar una salida detallada de la conversión.
- Muestra el número decimal original, la base objetivo y el resultado convertido.
- Incluye representaciones adicionales de bases (binaria y hexadecimal).
- Imprime condicionalmente representaciones de bases alternativas para evitar redundancia.
- Proporciona una salida más informativa y educativa.