Programa Csistemasnumericos

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 2

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

// Función para convertir un dígito de una base a decimal


int charToDigit(char digit) {
if (digit >= '0' && digit <= '9') {
return digit - '0';
} else {
return digit - 'A' + 10;
}
}

// Función para validar si un dígito es válido para la base dada


int isValidDigit(char digit, int base) {
int maxDigit;
if (digit >= '0' && digit <= '9') {
maxDigit = '0' + base - 1;
} else {
maxDigit = 'A' + base - 11;
}
return digit <= maxDigit;
}

// Función para convertir un número de una base a decimal


int toDecimal(char num[], int base) {
int decimal = 0;
int len = strlen(num);
int power = 0;
for (int i = len - 1; i >= 0; i--) {
if (!isValidDigit(num[i], base)) {
printf("Error: El número no es válido para la base especificada.\n");
exit(1);
}
decimal += charToDigit(num[i]) * pow(base, power);
power++;
}
return decimal;
}

// Función para convertir un número decimal a una base dada


void toBase(int decimal, int base) {
char result[100];
int i = 0;
while (decimal != 0) {
int rem = decimal % base;
result[i++] = (rem < 10) ? rem + '0' : rem + 'A' - 10;
decimal /= base;
}
if (i == 0) {
printf("0");
} else {
for (int j = i - 1; j >= 0; j--) {
printf("%c", result[j]);
}
}
}
int main() {
char num1[100], num2[100], operation[20];
int base1, base2, resultBase;

// Obtener los números y bases del usuario


printf("Introduce el primer operando: ");
scanf("%s", num1);
printf("Introduce base del primer operando: ");
scanf("%d", &base1);
printf("Introduce el segundo operando: ");
scanf("%s", num2);
printf("Introduce base del segundo operando: ");
scanf("%d", &base2);
printf("¿Qué operación deseas realizar? (suma/multiplicación): ");
scanf("%s", operation);
printf("Introduce base para el resultado: ");
scanf("%d", &resultBase);

// Convertir los números a decimal


int decimalNum1 = toDecimal(num1, base1);
int decimalNum2 = toDecimal(num2, base2);

// Realizar la operación solicitada


int result;
if (strcmp(operation, "suma") == 0) {
result = decimalNum1 + decimalNum2;
} else if (strcmp(operation, "multiplicación") == 0) {
result = decimalNum1 * decimalNum2;
} else {
printf("Operación no válida\n");
return 1;
}

// Mostrar el resultado en la base especificada


printf("El resultado en base %d es ", resultBase);
toBase(result, resultBase);
printf("\n");

return 0;
}

También podría gustarte