Roomalaisen muuntimen ja interaktiivisen roomalaisen taulukon rakentaminen

Roomalaiset numerot eivät ole enää olennainen osa jokapäiväistä elämäämme. Mutta käytämme niitä suunnitellessamme monumentteja, kelloja ja jopa urheilutapahtumiin.

Mitkä ovat roomalaiset numerot?

Roomalaiset numerot ovat peräisin antiikin Roomasta ja pysyivät yleisenä tapana kirjoittaa numeroita kaikkialla Euroopassa vuosisatojen ajan. Niiden käyttö on jo kauan elänyt itse Rooman valtakunnan. Ne korvattiin vähitellen Hindu-arabialaisella numerointijärjestelmällä, jota käytämme tänään - numerot nollasta yhdeksään.

Roomalaisia ​​numeroita edustavat latinalaisen aakkosen kirjainyhdistelmät, jotka toimivat numeroina tässä järjestelmässä. Mutta toisin desimaalin pohja, jossa symboleilla 0 kautta 9 , The Roman järjestelmä käyttää seitsemää pitkävaikutteiset latinalaisia kirjaimia I, V, X, L, C, D, M .

Alun perin nollalle ei ollut olemassa yhtä kirjainta. Sen sijaan he käyttivät latinankielistä sanaa Nulla , joka tarkoittaa "ei mitään".

Kuinka roomalaiset numerot toimivat?

Näiden kirjainten hindu- arabialainen esitys on seuraava: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 ja M = 1000 .

Muut numerot muodostetaan yhdistämällä nämä kirjaimet tiettyjen sääntöjen mukaan: Symboli toisensa jälkeen, jolla on sama tai suurempi arvo, lisää arvonsa.

Esimerkiksi   VI = V + I = 5 + 1 = 6 tai LX = L + X = 50 + 10 = 60 .Merkinnät VI ja LX luetaan sanoilla "yksi yli viisi" ja "kymmenen yli viisikymmentä".

Ennen suurempaa arvoa sijoitettu symboli vähentää arvonsa. Esimerkiksi IX = X - I = 10 - 1 = 9 ja XC = C - X = 100-10 = 90 .

Merkinnät IX ja XC luetaan sanoilla "yksi alle kymmenen" ja "kymmenen alle sata".

Yli 1000 lukua muodostetaan sijoittamalla viiva symbolin päälle. Siten V̅ = 5000 , X̅ = 10 000 , L̅ = 50 000 , C̅ = 100 000 , D̅ = 500 000 ja M̅ = 1 000 000 .

Niin kutsuttu "vakio" -lomake ei salli saman symbolin käyttöä yli kolme kertaa peräkkäin. Mutta toisinaan voidaan nähdä poikkeuksia. Esimerkiksi IIII numerolle 4, VIIII numerolle 9 ja LXXXX 90: lle.

Interaktiivinen kaavio roomalaisista numeroista ja niiden yhdistelmistä

Vie hiiri jokaisen symbolin päälle paljastaaksesi sen hindu-arabialainen vastine:

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̅

Kirjoitin tämän interaktiivisen roomalaisen numerokaavion koodin upotettavaksi tänne freeCodeCamp News -sivustolle.

Ottaen huomioon, että HTML-upotustoiminto ei ole täysimittainen koodieditori, annettua koodia ei ole rakennettu ja esitetty erillisinä HTML-, CSS- ja JavaScript-tiedostoina. Pikemminkin se on kirjoitettu yhtenä HTML-tiedostona ja elementtejä lisätty muotoilua ja toiminnallisuutta varten.

Tässä on interaktiivisen roomalaisen numerotaulukon koko koodivarasto.

Roomalainen numero muunnin

Syötä ei-negatiivinen kokonaisluku välillä 0–5000. Napsauta sitten Muunna paljastaaksesi roomalaisen vastaavan.

Arabiasta roomalaiseen
Muuntaa

Luku 5000 tai sitä suurempi ei ole ohjelmallista rajoitusta. Muunnosta ohjaava algoritmi toimisi samalla tavalla.

Suurten lukujen roomalaisen vasta-arvon näyttämiseen tarvittava tila kasvaa yhä suuremmaksi ilman, että paljastaisi jotain uutta.

Koodi itsessään koostuu HTML-osasta, joka kuvaa sisältöä sisäisillä tyylillä vuorovaikutuksen helpottamiseksi ja lisätyn JavaScriptin toiminnallisuuden takaamiseksi.

Tämä on tyypin "luku" syöttöelementti, joka rajoittaa syötetiedot numeerisiin arvoihin ja kahteen painikkeeseen. "Muunna" -painike on kytketty muunnoksen suorittavaan toimintoon, ja "Näyttö" -painike tuottaa roomalaisen luvun vastaavan arvon.

Miksi tulostaa painike-elementin kautta? Muotoilu toimi hyvin, kun sitä käytettiin molempiin painikkeisiin yhdessä. Ja kun otetaan huomioon upotuksen rajallinen toiminnallisuus, se tuntui ajansäästäjältä.

Selvyyden vuoksi nämä elementit on osoitettu muuttujille:

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

Funktio convertToRoman()sisältää logiikan ja tuottaa tuloksen:

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

Syöttöelementin numeerinen arvo tallennetaan muuttujaan nimeltä " arabia " lisätestausta varten. Muuttuja nimeltä " roman " pitää merkkijonoa, joka edustaa arabiankielisen tekstin roomalaista vastausta.

Seuraavaksi on kaksi yhtä pituista ryhmää, joista toisessa on arabialaiset numerot ja toisessa roomalaiset. Molemmat ovat laskevassa järjestyksessä vähentämisen yksinkertaistamiseksi:

// 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-taulukot auttavat muodostamaan yli 1000 symbolia.

Lopuksi tässä on logiikka, joka testaa syötetyn luvun ja muuntaa sen.

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."; }

Ensimmäisessä testissä tarkistetaan desimaalipisteet ja negatiiviset merkit. Jos löydetään, viesti pyytää "syöttämään vain ei-negatiivisia kokonaislukuja".

Seuraava testi tarkistaa, onko syötetty luku nolla. Tällöin merkkijono "Nulla" näytetään.

Muuten silmukat jatkavat ketjutusta roomalaisilla kielillä vähentäen arabialaisia ​​numeroita, kunnes jälkimmäinen täyttää while-silmukan ehdon. Sitten se näyttää käyttäjän syötteen roomalaisen vastauksen.

Aivan kuten interaktiivisessa kaaviossa, myös Roomalaisen muuntimen koodi on asetettu kopioitavaksi ja upottamaan mihin tahansa artikkeliin. Tässä on koko koodivarasto.