Sådan opbygges en romersk talekonverter og et interaktivt romersk tal

De romerske tal er ikke længere en væsentlig del af vores daglige liv. Men vi bruger dem til design af monumenter, ure og endda til sportsbegivenheder.

Hvad er de romerske tal?

Romerske tal stammer fra det gamle Rom og forblev den almindelige måde at skrive numre i hele Europa i mange århundreder. Deres anvendelse overlevede længe selve det romerske imperium. De blev gradvist erstattet af det hindu-arabiske talesystem, som vi bruger i dag - tallene nul til ni.

Romerske tal er repræsenteret af kombinationer af bogstaver i det latinske alfabet, der fungerer som cifre i dette system. Men i modsætning til decimal base, med symboler 0 til 9 , beskæftiger det det romerske system, syv kapitaliserede latinske bogstaver I, V, X, L, C, D, M .

Oprindeligt var der ingen enkeltbogstavsbetegnelse på nul. I stedet brugte de det latinske ord Nulla , som betyder "ingen".

Hvordan fungerer romertal?

Den hindu-arabiske repræsentation af disse bogstaver er som følger: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 og M = 1000 .

Andre tal dannes ved at kombinere disse bogstaver pr. Bestemte regler: Et symbol placeret efter det andet med samme eller større værdi, tilføjer dets værdi.

For eksempel er   VI = V + I = 5 + 1 = 6 eller LX = L + X = 50 + 10 = 60 .Notationerne VI og LX læses som "en mere end fem" og "ti mere end halvtreds".

Et symbol placeret foran en af ​​større værdier fratrækker dens værdi. For eksempel er IX = X - I = 10 - 1 = 9, og XC = C - X = 100 - 10 = 90 .

Notationerne IX og XC læses som "en mindre end ti" og "ti mindre end hundrede."

Tal større end 1.000 dannes ved at placere en bindestreg over symbolet. Således er V2 = 5.000 , X2 = 10.000 , L2 = 50.000 , C2 = 100.000 , D2 = 500.000 og M2 = 1.000.000 .

Den såkaldte "standard" -formular tillader ikke at bruge det samme symbol mere end tre gange i træk. Men lejlighedsvis kan undtagelser ses. For eksempel IIII for nummer 4, VIIII for nummer 9 og LXXXX for 90.

Et interaktivt diagram over romerske tal og deres kombinationer

Hold markøren over hvert symbol for at afsløre dets hindu-arabiske ækvivalent:

I II III IV V VI VII VIII IX X XX XXX XL L LX LXX LXXX XC C CC CCC CD D DC DCC DCCC CM M V̅ X̅ L̅ C̅ D̅ M̅

Jeg skrev koden til dette interaktive romerske numeriske diagram, der skal integreres her på freeCodeCamp News.

I betragtning af det faktum, at HTML-integreringsfunktionen ikke er en fuldskala-kodeditor, er den givne kode ikke struktureret og præsenteret som separate HTML-, CSS- og JavaScript-filer. Snarere er den skrevet som en enkelt HTML-fil med og elementer tilføjet til styling og funktionalitet.

Her er det fulde kodeopbevaringssted til mit interaktive romerske taldiagram.

Romersk talekonverter

Indtast et ikke-negativt heltal mellem 0 og 5.000. Klik derefter på Konverter for at afsløre et ækvivalent med romertal.

Arabisk til romersk
Konvertere

Der er ingen programmatisk begrænsning for antallet 5.000 eller derover. Algoritmen, der styrer konverteringen, fungerer alligevel.

Pladsen, der kræves for at vise romertalækvivalenter af stort antal, bliver større og større uden meget ekstra fordel ved at afsløre noget nyt.

Selve koden består af en HTML-del, der beskriver indholdet med integrerede stilarter for at lette interaktion og tilføjet JavaScript til funktionalitet.

Det er et inputelement af typen "nummer" for at begrænse inputdata til numeriske værdier og to knapper. Knappen "Konverter" er koblet til den funktion, der udfører konverteringen, og knappen "Vis" udsender det romerske antal ækvivalent.

Hvorfor output via et knapelement? Styling fungerede godt, når de blev anvendt på begge knapper sammen. Og i betragtning af den begrænsede funktionalitet af indlejringen virkede det som en tidsbesparelse.

Af hensyn til klarheden er disse elementer tildelt variabler:

const inputField = document.querySelector('input'); // input element const convertButton = document.getElementById('convert'); // convert button const outputField = document.getElementById('display'); // output element

Funktionen convertToRoman()indeholder logikken og gengiver resultatet:

function convertToRoman() { let arabic = document.getElementById('arabicNumeral').value; // input value let roman = ''; // variable that will hold the result }

Den numeriske værdi fra inputelementet gemmes i en variabel kaldet " arabisk " til yderligere test. Variablen med navnet " roman " vil indeholde strengen, der repræsenterer romersk ækvivalent med arabisk input.

Dernæst er der to arrays af samme længde, en med arabiske tal og en med deres romerske kolleger. Begge er i faldende rækkefølge for at forenkle subtraktion:

// descending order simplifies subtraction while looping const arabicArray = [5000, 4000, 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] const romanArray = ['V̅', 'MV̅','M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'] 

Unicode-tabeller hjælper med at danne symboler større end 1.000.

Endelig er her logikken, der tester det indtastede antal og konverterer det.

if (/^(0|[1-9]\d*)$/.test(arabic)) { // Regular expression tests if (arabic == 0) { // for decimal points and negative outputField.innerHTML = "Nulla"; // signs } else if (arabic != 0) { for (let i = 0; i < arabicArray.length; i++) { while (arabicArray[i] <= arabic) { roman += romanArray[i]; arabic -= arabicArray[i]; } } outputField.innerHTML = roman; } } else { outputField.innerHTML = "Please enter non negative integers only. No decimal points."; }

Den første test kontrollerer for decimaltegn og negative tegn. Hvis den findes, bliver meddelelsen bedt om at "kun indtaste ikke-negative heltal."

Den næste test kontrollerer, om det indtastede antal er lig med nul. I et sådant tilfælde vises strengen "Nulla".

Ellers holder sløjferne sammen med romerske strenge, mens de arabiske tal trækkes, indtil sidstnævnte opfylder betingelsen for while-sløjfen. Derefter viser det den romerske ækvivalent af brugerindgangen.

Ligesom med det interaktive diagram er koden til den romerske talkonverter klar til at kopiere den og integrere den i enhver artikel. Her er det fulde kodelager.