2.
Contexto de la actividad
Consulte el referentes bibliográficos de la Unidad 3, como material
complementario para abordar conceptos que permitan el desarrollo de la
actividad.
Los integrantes del grupo darán solución al siguiente escenario:
a. Realice un programa que permita realizar la conversión de tres
números en base 10 a sus correspondientes números en cualquier base de
la 2 a la 15 según seleccione el usuario.
b. Una vez convertidos, calcule la suma de ellos.
Código:
function conversionBaseGUI
% Crear la ventana principal
ventana = uifigure('Name', 'Conversión de Base', 'Position', [100 100
400 300]);
% Crear componentes de entrada
etiqueta_numeros = uilabel(ventana, 'Text', 'Ingrese los tres números
decimales:');
etiqueta_base = uilabel(ventana, 'Text', 'Base de conversión (2-
15):');
entrada_numeros = uieditfield(ventana, 'Text', 'Position', [180 230
200 22]);
entrada_base = uieditfield(ventana, 'numeric', 'LowerLimit', 2,
'UpperLimit', 15, 'Position', [180 200 50 22]);
% Crear botón de conversión
boton_convertir = uibutton(ventana, 'Text', 'Convertir', 'Position',
[180 160 100 30], 'ButtonPushedFcn',
@(btn,event)convertirNumeros(btn,entrada_numeros.Value,entrada_base.Value
));
% Función para realizar la conversión cuando se presiona el botón
function convertirNumeros(~,numeros_str,base)
% Convertir la cadena de números a una matriz de números
decimales
numeros = str2num(numeros_str);
% Verificar si se ingresaron tres números válidos
if numel(numeros) ~= 3
errordlg('Debe ingresar tres números decimales separados por
espacios.', 'Error de entrada', 'modal');
return;
end
% Convertir cada número a la base seleccionada
numeros_convertidos = cell(1, 3);
suma_total = 0;
for i = 1:3
numeros_convertidos{i} = dec2base(numeros(i), base);
suma_total = suma_total + base2dec(numeros_convertidos{i},
base);
end
% Mostrar resultados en un cuadro de diálogo
texto_resultados = sprintf('Base de conversión: %d\n\nNúmeros
convertidos:\n%s\n%s\n%s\n\nSuma de los números convertidos: %d', ...
base, numeros_convertidos{1}, numeros_convertidos{2},
numeros_convertidos{3}, suma_total);
msgbox(texto_resultados, 'Resultados de Conversión', 'modal');
end
end
% Llamar a la interfaz gráfica de usuario
El usuario debe ingresar:
• Los tres números decimales a convertir
• La base a la cual desea hacer la conversión de los tres números
Una vez ingrese estos datos el programa debe retornar:
• El nombre de la base.
• Los símbolos empleados en dicha base para representar las cifras.
• Los tres números convertidos en la base seleccionada por el usuario.
• La suma de los tres números convertidos a la base selecciona por el
usuario.
function conversionBaseGUI
% Crear la ventana principal
ventana = uifigure('Name', 'Conversión de Base', 'Position', [100 100 400 300]);
% Crear componentes de entrada
etiqueta_numeros = uilabel(ventana, 'Text', 'Ingrese los tres números decimales:');
etiqueta_base = uilabel(ventana, 'Text', 'Base de conversión (2-15):');
entrada_numeros = uieditfield(ventana, 'Text', 'Position', [180 230 200 22]);
entrada_base = uieditfield(ventana, 'numeric', 'LowerLimit', 2, 'UpperLimit', 15,
'Position', [180 200 50 22]);
% Crear botón de conversión
boton_convertir = uibutton(ventana, 'Text', 'Convertir', 'Position', [180 160 100 30],
'ButtonPushedFcn',
@(btn,event)mostrarResultados(btn,entrada_numeros.Value,entrada_base.Value));
% Función para mostrar los resultados
function mostrarResultados(~,numeros_str,base)
try
% Realizar la conversión de números y obtener información de la base
[nombre_base, simbolos, numeros_convertidos, suma_total] =
convertirNumeros([], numeros_str, base);
% Mostrar los resultados en un cuadro de diálogo emergente
texto_resultados = sprintf('Nombre de la base: %s\nSímbolos empleados: %s\n\
nNúmeros convertidos:\n%s\n%s\n%s\n\nSuma de los números convertidos: %d', ...
nombre_base, simbolos, numeros_convertidos{1}, numeros_convertidos{2},
numeros_convertidos{3}, suma_total);
msgbox(texto_resultados, 'Resultados de Conversión', 'modal');
catch ME
errordlg([Link], 'Error', 'modal');
end
end
% Función para obtener el nombre de la base y los símbolos empleados en dicha
base
function [nombre_base, simbolos] = obtenerInfoBase(base)
nombres_bases = {'Binaria', 'Ternaria', 'Cuaternaria', 'Quinaria', 'Senaria', ...
'Septenaria', 'Octal', 'Novenaria', 'Decimal', 'Undecimal', ...
'Duodecimal', 'Tridecimal', 'Tetradecimal', 'Pentadecimal'};
simbolos_bases = {'0', '1', '012', '0123', '012345', '0123456', '01234567', ...
'012345678', '0123456789', '0123456789A', '0123456789AB', ...
'0123456789ABC', '0123456789ABCD', '0123456789ABCDE'};
nombre_base = nombres_bases{base};
simbolos = simbolos_bases{base};
end
% Función para convertir un número en base 10 a cualquier base entre 2 y 15
function [nombre_base, simbolos, numeros_convertidos, suma_total] =
convertirNumeros(~,numeros_str,base)
% Convertir la cadena de números a una matriz de números decimales
numeros = str2num(numeros_str);
% Verificar si se ingresaron tres números válidos
if numel(numeros) ~= 3
error('Debe ingresar tres números decimales separados por espacios.');
end
% Convertir cada número a la base seleccionada
numeros_convertidos = cell(1, 3);
suma_total = 0;
for i = 1:3
numeros_convertidos{i} = dec2base(numeros(i), base);
suma_total = suma_total + base2dec(numeros_convertidos{i}, base);
end
% Obtener información de la base
[nombre_base, simbolos] = obtenerInfoBase(base);
end
end
% Llamar a la interfaz gráfica de usuario
c. Debe definir dos funciones así:
Realice una función que reciba la base de un sistema de numeración
entre 2 y 15 y le devuelva el nombre de la base y los símbolos
empleados en dicha base.
Una función que haga la conversión de un número en base 10 a un
número en base 2 a la 15.
% Función para obtener información de la base
function info_base = info_Base(base)
function convertirBaseGUI
%Función que recibe la base de un sistema de numeración y devuelve un
struct con información sobre la base.
% Parámetros:
% base (int): La base del sistema de numeración (entre 2 y 15).
% Retorno:
% info_base (struct): Estructura con la información sobre la base,
incluyendo:
% - nombre: Nombre del sistema de numeración (ej. 'Binario',
'Octal', 'Hexadecimal').
% - simbolos: Vector de caracteres con los símbolos utilizados en
la base (ej. ["0", "1"], ["0", "1", "2", "3", ..., "7"]).
if base < 2 || base > 15
error('La base debe estar entre 2 y 15');
end
nombres = {'Binario', 'Ternario', 'Cuaternario', 'Quinary', 'Senario',
'Septenario', ...
'Octal', 'Nonario', 'Decimal', 'Undecimal', 'Duodecimal',
...
'Tridecimal', 'Tetradeciimal', 'Pentadecimal'};
simbolos = repmat(char('0'):char('9'), 1, 9);
simbolos(10:end) = char('A'):char('F');
simbolos = simbolos(1:base);
info_base.nombre = nombres{base};
info_base.simbolos = simbolos;
end
% Función para convertir un número en base 10 a otra base
function numero_convertido = convertirABaseGUI(numero, base)
%Función que convierte un número en base 10 a una base específica.
% Parámetros:
% numero (int): El número en base 10 a convertir.
% base (int): La base a la que se desea convertir el número (entre 2 y
15).
% Retorno:
% numero_convertido (str): El número convertido a la base especificada.
if base < 2 || base > 15
error('La base debe estar entre 2 y 15');
end
if numero < 0
error('El número no puede ser negativo');
end
digitos = [];
while numero > 0
digito = mod(numero, base);
numero = floor(numero / base);
digitos = [digito, digitos];
end
simbolos = infoBase(base).simbolos;
numero_convertido = '';
for i = 1:length(digitos)
numero_convertido = [simbolos(digitos(i)), numero_convertido];
end
end
% Ejemplo de uso
% Obtener información de la base 8 (octal)
infoBase=info_base(8);
disp(['Base 8: ', info_base_octal.nombre]);
disp(['Símbolos: ', info_base_octal.simbolos]);
% Convertir el número 25 en base 8
numero_convertido_octal = convertirABase(25, 8);
disp(['25 en base 8: ', numero_convertido_octal]);
end