Skip to content
ExamplesEspañolWorkspace →

Roman Numerals

Converts a number from 1 to 3999 into Roman numerals.

Level
Advanced
Topic:
Math
Concepts:
Input & output
Arrays
Para
Mientras
Text
Open in Codoritmo

Run, change and debug this example in your browser.

What you'll learn

Two parallel arrays hold the values and their symbols. A Mientras loop inside a Para subtracts the largest possible value as many times as it fits.

Code

roman-numerals.psc · 47 lines
Algoritmo NumerosRomanos    Definir valores, numero, resto, i Como Entero    Definir simbolos, romano Como Caracter    Dimension valores[13], simbolos[13]    valores[1] <- 1000    simbolos[1] <- "M"    valores[2] <- 900    simbolos[2] <- "CM"    valores[3] <- 500    simbolos[3] <- "D"    valores[4] <- 400    simbolos[4] <- "CD"    valores[5] <- 100    simbolos[5] <- "C"    valores[6] <- 90    simbolos[6] <- "XC"    valores[7] <- 50    simbolos[7] <- "L"    valores[8] <- 40    simbolos[8] <- "XL"    valores[9] <- 10    simbolos[9] <- "X"    valores[10] <- 9    simbolos[10] <- "IX"    valores[11] <- 5    simbolos[11] <- "V"    valores[12] <- 4    simbolos[12] <- "IV"    valores[13] <- 1    simbolos[13] <- "I"    Escribir "Número entre 1 y 3999:"    Leer numero    Si numero < 1 O numero > 3999 Entonces        Escribir "Los romanos no escribían ese número."    SiNo        romano <- ""        resto <- numero        // Restamos el mayor valor posible tantas veces como entre        Para i <- 1 Hasta 13 Hacer            Mientras resto >= valores[i] Hacer                romano <- romano + simbolos[i]                resto <- resto - valores[i]            FinMientras        FinPara        Escribir numero, " en números romanos es ", romano    FinSiFinAlgoritmo

Flowchart

Each block in the flowchart matches one instruction in the code.

Algoritmo NumerosRomanosSíNoSíNoAlgoritmo NumerosRomanosAlgoritmo NumerosRomanosDefinir valores, numero, resto, i Como EnteroDefinir valores, numero,resto, i Como EnteroDefinir simbolos, romano Como CaracterDefinir simbolos, romano ComoCaracterDimension valores[13], simbolos[13]Dimension valores[13],simbolos[13]valores[1] <- 1000valores[1] <- 1000simbolos[1] <- "M"simbolos[1] <- "M"valores[2] <- 900valores[2] <- 900simbolos[2] <- "CM"simbolos[2] <- "CM"valores[3] <- 500valores[3] <- 500simbolos[3] <- "D"simbolos[3] <- "D"valores[4] <- 400valores[4] <- 400simbolos[4] <- "CD"simbolos[4] <- "CD"valores[5] <- 100valores[5] <- 100simbolos[5] <- "C"simbolos[5] <- "C"valores[6] <- 90valores[6] <- 90simbolos[6] <- "XC"simbolos[6] <- "XC"valores[7] <- 50valores[7] <- 50simbolos[7] <- "L"simbolos[7] <- "L"valores[8] <- 40valores[8] <- 40simbolos[8] <- "XL"simbolos[8] <- "XL"valores[9] <- 10valores[9] <- 10simbolos[9] <- "X"simbolos[9] <- "X"valores[10] <- 9valores[10] <- 9simbolos[10] <- "IX"simbolos[10] <- "IX"valores[11] <- 5valores[11] <- 5simbolos[11] <- "V"simbolos[11] <- "V"valores[12] <- 4valores[12] <- 4simbolos[12] <- "IV"simbolos[12] <- "IV"valores[13] <- 1valores[13] <- 1simbolos[13] <- "I"simbolos[13] <- "I"Escribir "Número entre 1 y 3999:"Escribir "Número entre 1 y3999:"Leer numeroLeer numeroSi numero < 1 O numero > 3999 Entoncesnumero < 1 O numero> 3999Escribir "Los romanos no escribían ese número."Escribir "Los romanos noescribían ese número."romano <- ""romano <- ""resto <- numeroresto <- numeroPara i <- 1 Hasta 13 HacerPara i <- 1 Hasta 13Mientras resto >= valores[i] Hacerresto >= valores[i]romano <- romano + simbolos[i]romano <- romano + simbolos[i]resto <- resto - valores[i]resto <- resto - valores[i]Escribir numero, " en números romanos es ", romanoEscribir numero, " en númerosromanos es ", romanoFinAlgoritmoFinAlgoritmo

Sample run

This is what the program shows when it runs. The answers typed by the user are highlighted.

Número entre 1 y 3999:User answer: 20242024 en números romanos es MMXXIV

Challenge

Also show how many symbols the Roman numeral has.

Show hint

Use Longitud on the romano variable.

Open in Codoritmo
  • Shell Sort

    Insertion sort between far-apart elements, with a gap that shrinks every pass.

    Advanced
  • Merge Sort

    Splits the array in halves, sorts each one recursively and merges them.

    Advanced
  • Heap Sort

    Arranges the array as a heap, then takes the largest out again and again.

    Advanced