Pages

viernes, 28 de diciembre de 2012

Convertir a números romanos entre 1000 y 2000 – Diagrama de flujo

Problema
Realizar un algoritmo que permita convertir un número arábigo  comprendido entre 1000 y 2000 a números romanos.


Solución
  • Entrada: 1597
  • Salida:  MDXCVII
Al comienzose llama a la subrutina Inicializar la cual inicializa en arreglos números romanos, se solicita al usuario ingrese un número entre 1000 y 2000, se captura el valor en la variable “N”, luego se llama a la subrutina  Convertirentre1000y2000 con parámetros donde N es  el numero ingresado, m representa a las milésimas, c a las centenas, d a las decenas, u a las unidades, Centena es la arreglo que contiene a las centenas, Decena es la arreglo que contiene a las decenas, Unidad es el arreglo que contiene a las unidades ,Mil arreglo que contiene a la milésimas y finaliza


Diagrama de flujo - Convertir numero arabigo a numero romano

En la subrutina Inicializar se llaman a las subrutinas InicializaUnidades, InicializaDecenas, InicializaCentenas y InicializaMil.

Diagrama de flujo - Subrutina Inicializar

En la subrutina InicializaUnidades, Se crea el arreglo Unidad que contiene a los 9 primeros números romanos Unidad = {“”,“I”,“II”,“III”,“IV”,“V”,“VI”,“VII”,“VIII”,“IX”}, donde Unidad(7)=”VII” que corresponde al número 7 en romanos.


Diagrama de flujo - Subrutina InicializaUnidades

En la Subrutina InicializaDecenas, se crea el arreglo Decena que contiene a los números del 10 al 90 en romanos, Decena={“”,“X”,“XX”,“XXX”,“XL”,“L”,“LX”,“LXX”,“LXXX”,“XC”} , donde Decena(8)=”LXXX” que corresponde al número 80 en romanos.


Diagrama de flujo - Subrutina InicializaDecenas

En la subrutina InicializaCentenas, se crea el arreglo Centena que contiene a los números romanos entre 100 y 900 Centena={“”,“C”,“CC”,“CCC”,“CD”,“D”,“DC”,“DCC”,“DCCC”,“CM”}, donde Centena(4)=”CD” que corresponde al número 400 en romanos.


Diagrama de flujo - Subrutina InicializaCentenas

En la Subrutina InicializaMil, se crea el Arreglo Mil que contiene a los números romanos 1000 y 2000, Mil={“”,”M”,”MM”}, donde Mil(1)=”M”, que corresponde al número 1000 en romanos.  


Diagrama de flujo - Subrutina InicializaMil

En la subrutina ObtenerUnidadDecenaCentenaMil, se obtiene las unidades con N MOD 10 y se guarda en la variable “u”, las decenas con TRUNC(N/10) MOD 10 y se guarda en la variable “d”, las centenas con  TRUNC(N/100) MOD 10 y se guarda en la variable “c”, las milésimas con TRUNC(N/1000) y se guarda en la variable m.
Ejemplo:
Numero = 1584
  u = 584 MOD 10 = 4
 d = TRUNC(584/10) MOD 10 = 8
 c = TRUNC(584/100) MOD 10  = 5
 m = TRUNC(N/1000) = 1
Las variable m, c, d, u nos sirven como índices en los arreglos respectivos para hallar número romano correspondiente.


Diagrama de flujo - Subrutina ObtenerUnidadDecenaCentenaMil

 En la Subrutina Convertirentre1000y2000, Se compara Si N es mayor igual a 1000 y menor igual a 2000 (N>=1000 AND N<=2000)
    Si es Verdadero (Si)
            Se llama a la subrutina ObtenerUnidadDecenaCentenaMil para extraer los índices

           de  los arreglos, luego se muestra el número ingresado en romanos.
    Si es Falso (No)
             Se muestra un mensaje que esta fuera del rango.


Diagrama de flujo - Subrutina Convertirentre1000y2000


0 comentarios:

Publicar un comentario