Rooma numbrite teisendaja ja interaktiivse rooma numbrite tabeli koostamine

Rooma numbrid ei ole enam oluline osa meie igapäevaelust. Kuid me kasutame neid monumentide, kellade kujundamisel ja isegi spordiürituste jaoks.

Mis on Rooma numbrid?

Rooma numbrid pärinevad Vana-Roomast ja jäid paljudeks sajanditeks kogu Euroopas levinud numbrite kirjutamise viisiks. Nende kasutamine elas kaua aega üle Rooma impeeriumi. Need asendati järk-järgult hindu-araabia nummerdussüsteemiga, mida me täna kasutame - arvud nullist üheksani.

Rooma numbreid tähistatakse ladina tähestiku tähekombinatsioonidega, mis toimivad selles süsteemis numbritena. Kuid erinevalt koma baasilt sümbolid 0 kuni 9 , siis Rooma süsteemi tööd seitse kapitaliseeritud ladina tähtedega I, V, X, L, C, D, M .

Algselt ei olnud nulli jaoks üht tähte. Selle asemel kasutasid nad ladinakeelset sõna Nulla , mis tähendab "pole".

Kuidas Rooma numbrid töötavad?

Hindu-araabia keeles on need tähed esindatud järgmiselt: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 ja M = 1000 .

Muud numbrid on moodustatud ühendades need tähed kohta teatud reeglid: sümbol paigutatakse pärast teise sama või suurem väärtus, lisab selle väärtust.

Näiteks   VI = V + I = 5 + 1 = 6 või LX = L + X = 50 + 10 = 60 .Märkeid VI ja LX loetakse tähtedega "üks rohkem kui viis" ja "kümme rohkem kui viiskümmend".

Sümbol avaldatud enne üks suuremaid väärtusi lahutab selle väärtust. Näiteks IX = X - I = 10 - 1 = 9 ja XC = C - X = 100 - 10 = 90 .

Märkeid IX ja XC loetakse tähtedega "üks alla kümne" ja "kümme vähem kui sada".

Numbrid, mis on suuremad kui 1000, moodustatakse sümbolile kriipsuga asetades. Seega V̅ = 5000 , X̅ = 10 000 , L̅ = 50 000 , C̅ = 100 000 , D̅ = 500 000 ja M̅ = 1 000 000 .

Nn standardvorm keelab sama sümbolit kasutada rohkem kui kolm korda järjest. Kuid aeg-ajalt võib näha erandeid. Näiteks IIII numbri 4, VIIII numbri 9 ja LXXXX 90 puhul.

Interaktiivne diagramm rooma numbritest ja nende kombinatsioonidest

Hõljutage kursorit iga sümboli kohal, et näidata selle hindu-araabiakeelne vaste:

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̅

Kirjutasin selle interaktiivse rooma numbridiagrammi koodi, et kinnitada siia saidile freeCodeCamp News.

Arvestades asjaolu, et HTML-i manustamisfunktsioon ei ole täisskaala koodiredaktor, pole antud kood struktureeritud ja esitatud eraldi HTML-, CSS- ja JavaScripti failidena. Pigem on kirjutatud ühe HTML fail ja elemendid lisatakse stiil ja funktsionaalsus.

Siin on minu interaktiivse Rooma numbrikaardi täielik koodihoidla.

Rooma numbri teisendaja

Sisestage mittenegatiivne täisarv vahemikus 0–5000. Seejärel klõpsake Rooma numbri ekvivalendi kuvamiseks nuppu Teisenda.

Araabia - rooma keel
Teisenda

Numbril 5000 või rohkem ei ole programmilisi piiranguid. Teisendamist reguleeriv algoritm toimiks sama.

Rooma numbrite ekvivalendi suurte arvude kuvamiseks vajalik ruum kasvab järjest suuremaks, ilma et oleks midagi uut paljastanud.

Kood ise koosneb HTML-osast, mis kirjeldab interaktiivsuse hõlbustamiseks sisese stiiliga sisu ja funktsionaalsuse jaoks lisatud JavaScripti.

See on tüüpi "number" sisendelement, et sisendandmed piirduksid arvväärtuste ja kahe nupuga. Nupp "Teisenda" ühendatakse teisendust teostava funktsiooniga ja nupp "Kuva" väljastab rooma numbri ekvivalendi.

Miks väljastada läbi nupuelemendi? Stiil töötas hästi, kui seda mõlema nupu peale koos rakendada. Ja arvestades embed'i piiratud funktsionaalsust, tundus see aja kokkuhoiuna.

Selguse huvides määratakse need elemendid muutujatele:

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

Funktsioon convertToRoman()sisaldab loogikat ja renderdab tulemuse:

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

Sisendelemendi arvväärtus salvestatakse edasiseks testimiseks muutujasse nimega " araabia ". Muutuja nimega " roman " hoiab stringi, mis tähistab araabia keele sisendi Rooma ekvivalenti.

Järgmisena on kaks võrdse pikkusega massiivi, ühes on araabia numbrid ja teises Rooma tähed. Mõlemad on lahutamise lihtsustamiseks kahanevas järjekorras:

// 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'i tabelid aitavad moodustada sümboleid, mis on suuremad kui 1000.

Lõpuks on siin loogika, mis sisestatud numbrit testib ja teisendab.

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

Esimesel katsel kontrollitakse komakohti ja negatiivseid märke. Kui see leitakse, palutakse sõnumis "sisestada ainult mitte-negatiivsed täisarvud".

Järgmine test kontrollib, kas sisestatud arv võrdub nulliga. Sellisel juhul kuvatakse string "Nulla".

Vastasel juhul ühendavad silmused Rooma keeli, ühendades araabia numbreid, kuni viimane täidab silmuse while tingimuse. Seejärel kuvab see kasutaja sisendi rooma keele ekvivalendi.

Nii nagu interaktiivse graafiku puhul, on ka Rooma numbrite teisendaja kood kõik ette nähtud, et saaksite selle kopeerida ja igasse artiklisse manustada. Siin on täielik koodihoidla.