jueves, 28 de junio de 2018

06. Números Romanos.

La numeración Romana emplea letras en lugar de números con unas reglas muy simples que son:
  1. Siempre se leen de izquierda a derecha.
  2. Los valores básicos son: I=1 V=5 X=10 L=50 C=100 D=500 M=1000
  3. Los números romanos I, X, C y M pueden repetirse hasta tres veces a la hora de escribir un número romano compuesto.
  4. Los números romanos V, L y D no pueden repetirse nunca.
  5. Si tienen un número a la derecha menor que el de la izquierda entonces se suman ambos. Ejemplo: VI: el número de la derecha (I = 1) es menor que el de la izquierda (V = 5) entonces se suman, es decir VI = 6.
  6. Se restarán en caso contrario Ejemplo: XL: el número de la derecha (L = 50) es mayor que el de la izquierda (X = 10), y además este es I luego se resta el de la izquierda al de la derecha, es decir XL=40

Según estas normas para convertir un número a su equivalente en romanos necesitamos descomponer ese número según sus unidades, decenas, centenas etc y escribir cada parte con su notación romana.
Es decir, 96 en números romanos podrá escribirse como 90 + 6 es decir, XCVI.
Mientras que el número 422 será 400 + 20 + 2 es decir, CDXXII.

Siguiendo esta lógica es necesario emplear "algo" que descomponga nuestro número en sus valores correspondientes y después lo anote siguiendo una correlación, si es un 1 entonces I, si es 2 entonces II, si es 10 entonces X, si es 20 entonces XX...

Se puede contruir un array para cada zona del número, dejando vacio el del cero.

        Dim Unidad() As String = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}
        Dim Decena() As String = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}
        Dim Centena() As String = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}


Ahora solamente nos queda el descomponer el número, lo haremos con la función FLOOR que nos da el mayor número que sea menor o igual que uno decimal dado.

    Sub Main()
        Dim N, u, d, c As Integer
        Dim Unidad() As String = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}
        Dim Decena() As String = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}
        Dim Centena() As String = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}
        N = Console.ReadLine
        u = N Mod 10
        d = Math.Floor(N / 10) Mod 10
        c = Math.Floor(N / 100)
        If (N >= 100) Then
            Console.WriteLine(Centena(c) + Decena(d) + Unidad(u))
        Else
            If (N >= 10) Then
                Console.WriteLine(Decena(d) + Unidad(u))
            Else
                Console.WriteLine(Unidad(N))
            End If
        End If
        Console.ReadLine()
    End Sub

miércoles, 14 de mayo de 2014

05. Repasando los Arrays

Un array o matriz es un conjunto de elementos a los que identificamos con un-os índices. Si para identificar al elemento empleamos un único valor de índice decimos que el array es unidimensional, si hacen falta 2 bidimensional, con 3 tridimensional etc. También tenemos que decir que, cada elemento del array contiene el mismo tipo de datos que los demás.


lunes, 12 de mayo de 2014

04. Aleatorios

Recorrer una matriz o vector y llenar sus valores con la generación de números aleatorios es un ejercicio habitual en el que emplearemos la función Randomize. Para la generación de números aleatorios emplearemos la siguiente forma, conociendo los valores más alto y más bajo que queremos generar...


viernes, 9 de mayo de 2014

03. La secuencia de Fibonacci.

Esta serie de números se obtiene a partir de dos, el cero y el uno. Cada nuevo valor es la suma de los dos anteriores. Casi siempre se plantea el crear un array o vector fila que contenga todos los N primeros valores de la serie de Fibonacci y mostrarlos por pantalla.



lunes, 5 de mayo de 2014

02. Triángulo de Floyd

El Triángulo de Floyd es una forma matemática realizada con números y que tiene la forma como podeis ver en la imagen.