Πώς να φτιάξετε έναν Ρωμαϊκό Αριθμητικό Μετατροπέα και ένα Διαδραστικό Ρωμαϊκό Αριθμητικό Διάγραμμα

Οι ρωμαϊκοί αριθμοί δεν είναι πλέον ουσιαστικό μέρος της καθημερινής μας ζωής. Αλλά τα χρησιμοποιούμε κατά το σχεδιασμό μνημείων, ρολογιών, ακόμη και για αθλητικές εκδηλώσεις.

Ποιοι είναι οι ρωμαϊκοί αριθμοί;

Οι ρωμαϊκοί αριθμοί προέρχονταν από την αρχαία Ρώμη και παρέμειναν ο κοινός τρόπος γραφής αριθμών σε όλη την Ευρώπη για πολλούς αιώνες. Η χρήση τους ζούσε από καιρό στην ίδια τη Ρωμαϊκή Αυτοκρατορία. Αντικαταστάθηκαν σταδιακά από το σύστημα αρίθμησης Hindu-Arab που χρησιμοποιούμε σήμερα - οι αριθμοί μηδέν έως εννέα.

Οι λατινικοί αριθμοί αντιπροσωπεύονται από συνδυασμούς γραμμάτων του λατινικού αλφαβήτου, που χρησιμεύουν ως ψηφία σε αυτό το σύστημα. Αλλά σε αντίθεση με δεκαδική βάση, με τα σύμβολα 0 έως 9 , το η ρωμαϊκή σύστημα χρησιμοποιεί επτά κεφαλαιοποιημένη λατινικά γράμματα I, V, Χ, L, C, D, M .

Αρχικά, δεν υπήρχε ονομασία ενός γράμματος για το μηδέν. Αντ 'αυτού, χρησιμοποίησαν τη λατινική λέξη Nulla , που σημαίνει "κανένα".

Πώς λειτουργούν οι ρωμαϊκοί αριθμοί;

Η ινδουιστική-αραβική αναπαράσταση αυτών των γραμμάτων έχει ως εξής: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 και M = 1000 .

Άλλοι αριθμοί σχηματίζονται συνδυάζοντας αυτά τα γράμματα ανά ορισμένους κανόνες: Ένα σύμβολο που τοποθετείται μετά από ένα άλλο ίσης ή μεγαλύτερης αξίας, προσθέτει την αξία του.

Για παράδειγμα,   VI = V + I = 5 + 1 = 6 ή LX = L + X = 50 + 10 = 60 .Οι συμβολισμοί VI και LX διαβάζονται ως "ένα περισσότερο από πέντε" και "δέκα περισσότερα από πενήντα".

Ένα σύμβολο που τοποθετείται πριν από μία από τις μεγαλύτερες τιμές αφαιρεί την τιμή του. Για παράδειγμα, IX = X - I = 10 - 1 = 9 και XC = C - X = 100 - 10 = 90 .

Οι συμβολισμοί IX και XC διαβάζονται ως "ένα λιγότερο από δέκα" και "δέκα λιγότερο από εκατό".

Αριθμοί μεγαλύτεροι από 1.000 σχηματίζονται τοποθετώντας μια παύλα πάνω από το σύμβολο. Έτσι V̅ = 5.000 , X̅ = 10.000 , L̅ = 50.000 , C̅ = 100.000 , D̅ = 500.000 και M̅ = 1.000.000 .

Η λεγόμενη "τυπική" φόρμα δεν επιτρέπει τη χρήση του ίδιου συμβόλου περισσότερες από τρεις φορές στη σειρά. Αλλά περιστασιακά, παρατηρούνται εξαιρέσεις. Για παράδειγμα, IIII για τον αριθμό 4, VIIII για τον αριθμό 9 και LXXXX για 90.

Διαδραστικό διάγραμμα ρωμαϊκών αριθμών και οι συνδυασμοί τους

Τοποθετήστε τον δείκτη του ποντικιού πάνω από κάθε σύμβολο για να αποκαλύψετε το αντίστοιχο ινδο-αραβικό:

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̅

Έγραψα τον κωδικό για αυτό το διαδραστικό ρωμαϊκό αριθμητικό γράφημα για ενσωμάτωση εδώ στο FreeCodeCamp News.

Δεδομένου ότι η δυνατότητα ενσωμάτωσης HTML δεν είναι πρόγραμμα επεξεργασίας κώδικα πλήρους κλίμακας, ο δεδομένος κώδικας δεν είναι δομημένος και παρουσιάζεται ως ξεχωριστά αρχεία HTML, CSS και JavaScript. Αντίθετα, είναι γραμμένο ως ένα μοναδικό αρχείο HTML και προστίθενται στοιχεία για στυλ και λειτουργικότητα.

Εδώ είναι το πλήρες αποθετήριο κώδικα για το διαδραστικό μου Ρωμαϊκό Αριθμητικό Διάγραμμα.

Μετατροπέας αριθμητικών αριθμών

Εισαγάγετε έναν μη αρνητικό ακέραιο αριθμό μεταξύ 0 και 5.000. Στη συνέχεια, κάντε κλικ στο Μετατροπή για να αποκαλύψετε ένα ρωμαϊκό αριθμητικό ισοδύναμο.

Αραβικά σε Ρωμαϊκά
Μετατρέπω

Δεν υπάρχει περιορισμός μέσω προγραμματισμού στον αριθμό 5.000 ή πέραν αυτού. Ο αλγόριθμος που διέπει τη μετατροπή θα λειτουργούσε το ίδιο.

Ο χώρος που απαιτείται για την εμφάνιση ρωμαϊκών αριθμών ισοδύναμων μεγάλων αριθμών μεγαλώνει και μεγαλώνει χωρίς πολύ πρόσθετο όφελος από την αποκάλυψη κάτι νέο.

Ο ίδιος ο κώδικας αποτελείται από ένα τμήμα HTML που περιγράφει το περιεχόμενο με ενσωματωμένα στυλ για ευκολία αλληλεπίδρασης και πρόσθετο JavaScript για λειτουργικότητα.

Το στοιχείο είναι ένα στοιχείο εισαγωγής του τύπου "αριθμός" για τον περιορισμό των δεδομένων εισαγωγής σε αριθμητικές τιμές και δύο κουμπιά. Το κουμπί "Μετατροπή" συνδέεται με τη λειτουργία που εκτελεί τη μετατροπή και το κουμπί "Εμφάνιση" εξάγει τον αντίστοιχο ρωμαϊκό αριθμό.

Γιατί η έξοδος μέσω ενός στοιχείου κουμπιού; Το στυλ λειτούργησε καλά όταν εφαρμόστηκε και στα δύο κουμπιά. Και λαμβάνοντας υπόψη την περιορισμένη λειτουργικότητα της ενσωμάτωσης, φαινόταν σαν εξοικονόμηση χρόνου.

Για λόγους σαφήνειας, αυτά τα στοιχεία αντιστοιχίζονται σε μεταβλητές:

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

Η συνάρτηση convertToRoman()περιέχει τη λογική και αποδίδει το αποτέλεσμα:

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

Η αριθμητική τιμή από το στοιχείο εισαγωγής αποθηκεύεται σε μια μεταβλητή που ονομάζεται " αραβική " για περαιτέρω δοκιμές. Η μεταβλητή που ονομάζεται " roman " θα κρατήσει τη συμβολοσειρά που αντιπροσωπεύει το ρωμαϊκό ισοδύναμο της αραβικής εισαγωγής.

Στη συνέχεια, υπάρχουν δύο συστοιχίες ίσου μήκους, μία με αραβικούς αριθμούς και μία με τους ρωμαϊκούς ομολόγους τους. Και οι δύο βρίσκονται σε φθίνουσα σειρά για να απλοποιήσουν την αφαίρεση:

// 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 βοηθούν στη διαμόρφωση συμβόλων μεγαλύτερων από 1.000.

Τέλος, εδώ είναι η λογική που ελέγχει τον εισαγόμενο αριθμό και τον μετατρέπει.

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

Η πρώτη δοκιμή ελέγχει για δεκαδικά ψηφία και αρνητικά σημάδια. Εάν βρεθεί, το μήνυμα ζητά να "εισαγάγετε μόνο μη αρνητικούς ακέραιους αριθμούς".

Η επόμενη δοκιμή ελέγχει εάν ο αριθμός που εισάγεται είναι μηδέν. Σε μια τέτοια περίπτωση, εμφανίζεται η συμβολοσειρά "Nulla".

Διαφορετικά, οι βρόχοι συνεχίζουν να συνδυάζουν ρωμαϊκές χορδές αφαιρώντας τους αραβικούς αριθμούς έως ότου οι τελευταίοι ικανοποιήσουν την προϋπόθεση για το βρόχο while. Στη συνέχεια, εμφανίζει το ρωμαϊκό ισοδύναμο της εισόδου χρήστη.

Όπως και στο διαδραστικό γράφημα, ο κωδικός για τον Roman Numeral Converter είναι έτοιμος να τον αντιγράψετε και να τον ενσωματώσετε σε οποιοδήποτε άρθρο. Εδώ είναι το πλήρες αποθετήριο κώδικα.