Hannah Becerril
Hannah Becerril

Reputation: 1

Why is my code not reading right the inputs given, or why it jumps to the handle error part every time?

This code is to get the IMC give the height and the weight of a person, however the output is 1002 every time, i think is not reading the values property once entered

ORG 100                 / Inicio del programa en la dirección 100

/ Pedir peso y estatura al usuario
Input                   / Pedir al usuario el peso
Store Peso              / Guardar el peso en la variable Peso

Input                   / Pedir al usuario la estatura (en decimales, multiplicada por 100 para mayor precisión)
Store Altura            / Guardar la estatura en la variable Altura

/ Calcular la altura al cuadrado (Altura * Altura)
Load Altura             / Cargar la estatura en el acumulador
Store TempBase          / Guardar la estatura en TempBase para el bucle
Load Zero               / Inicializar TempResult en 0
Store TempResult        / Guardar en TempResult (resultado de la multiplicación)

InnerLoop, Load TempResult   / Cargar el valor actual de TempResult
           Add Altura        / Sumar la estatura (base) a TempResult
           Store TempResult  / Guardar el nuevo valor en TempResult

           Load TempBase     / Cargar TempBase
           Subt One          / Restar 1 a TempBase
           Store TempBase    / Guardar el nuevo valor en TempBase
           Skipcond 400      / Si TempBase es 0, salir del bucle
           Jump InnerLoop    / Si no, continuar el bucle

           Load TempResult   / Cargar el resultado (altura^2)
           Store Denominador / Guardar el resultado de altura^2 como el denominador

/ Verificar que el denominador no sea cero
Load Denominador
Skipcond 000
Jump ErrorDivision  / Jump to error if Denominador is 0

/ División para calcular el IMC (Peso / Altura^2)
Load Peso            / Cargar el valor del peso en el acumulador
Store Numerador      / Guardar el valor del peso en Numerador

Load Zero            / Cargar 0 en el acumulador
Store Cociente       / Inicializar el cociente en 0

DivLoop, Load Numerador      / Cargar el valor del numerador
         Subt Denominador    / Restar el denominador (altura^2)
         Skipcond 800        / Si el resultado es negativo, ir a Display
         Jump AddCociente    / Si no, continuar sumando al cociente

         Jump Display        / Saltar al final si se completó la división

AddCociente, Store Numerador  / Actualizar el numerador
            Load Cociente     / Cargar el cociente
            Add One           / Sumar 1 al cociente
            Store Cociente    / Guardar el nuevo cociente
            Jump DivLoop      / Repetir el bucle de división

Display, Load Cociente       / Cargar el cociente (resultado del IMC)
         Output              / Mostrar el IMC en la salida
         Halt                / Finalizar el programa

ErrorDivision, Load ErrorMsgDivision  / Cargar el mensaje de error
         Output              / Mostrar el mensaje de error
         Halt                / Finalizar el programa

/ Variables
Peso,        DEC 0            / Almacena el peso ingresado por el usuario
Altura,      DEC 0            / Almacena la estatura ingresada por el usuario
Numerador,   DEC 0            / Almacena el peso (numerador de la división)
Denominador, DEC 0            / Almacena altura^2 (denominador de la división)
Cociente,    DEC 0            / Resultado de la división (IMC)
TempResult,  DEC 0            / Resultado temporal para el cálculo de altura^2
TempBase,    DEC 0            / Base temporal para el cálculo de altura^2
One,         DEC 1            / Constante 1
Zero,        DEC 0            / Constante 0
ErrorMsgDivision, DEC 1002  / Código de error para división por cero

Upvotes: 0

Views: 36

Answers (0)

Related Questions