0b1001 путей решения задачи перевода чисел в римскую запись / Хабр
Привет друзья. Вот вам простенькая задачка. Как бы вы перевели арабские числа в римские используя Python? Правда с одним условием — числа не могут быть больше чем 4000.
Я думаю это должно быть просто, но позвольте я вам покажу вам серию интересных решений и не тривиальных подходов:
«13 шагов» от StefanPochmann
Очень простая идея и при этом самая популярная. Мы делаем таблицу соответствий арабских и римских чисел. Идя по таблице этих соответствий мы уменьшая арабское число и увеличиваем римское.
def checkio(n): result = '' for arabic, roman in zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1), 'M CM D CD C XC L XL X IX V IV I'.split()): result += n // arabic * roman n %= arabic print('({}) {} => {}'.format(roman, n, result)) return result
Я добавил функцию print для вас, чтобы решение было понятнее. И вот какой будет вывод:
>>> checkio(177) (M) 177 => (CM) 177 => (D) 177 => (CD) 177 => (C) 77 => C (XC) 77 => C (L) 27 => CL (XL) 27 => CL (X) 7 => CLXX (IX) 7 => CLXX (V) 2 => CLXXV (IV) 2 => CLXXV (I) 0 => CLXXVII 'CLXXVII'
Теперь вы видите, как на каждой итерации меняется римское и арабское числа.
«thous, hunds, tens и ones» от mdeakyne
def checkio(data): ones = ["","I","II","III","IV","V","VI","VII","VIII","IX"] tens = ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"] hunds = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"] thous = ["","M","MM","MMM","MMMM"] t = thous[data // 1000] h = hunds[data // 100 % 10] te = tens[data // 10 % 10] o = ones[data % 10] return t+h+te+o
В этом случае у нас уже есть обратное соответствие арабских к римским. При этом нам уже не нужен цикл.
«base.replace» от MaikSchoepe
def checkio(data): base = "I"*data base = base.replace("I"*5, "V") base = base.replace("V"*2, "X") base = base.replace("X"*5, "L") base = base.replace("L"*2, "C") base = base.replace("C"*5, "D") base = base.replace("D"*2, "M") base = base.replace("DCCCC", "CM") base = base.replace("CCCC", "CD") base = base.replace("LXXXX", "XC") base = base.replace("XXXX", "XL") base = base.replace("VIIII", "IX") base = base.replace("IIII", "IV") return base
Я верю, что это не самый эффективный способ решения, но один из самых веселых. Он начинается с того, что делает длинную строку из “I”, размером с переданное число. Следующей строй заменяет каждые пять символов “I” на символ “V”. Далее два “V” на “X” и так далее. В конце пути мы получим строку, которую мы искали.
«Enum» от veky
Для того, чтобы понять, как работает следующее решение вам надо знать модуль Enum. Если не знаете — есть отличный шанс погуглить его.
from enum import Enum class Roman(Enum): M = 1000 CM = 900 D = 500 CD = 400 C = 100 XC = 90 L = 50 XL = 40 X = 10 IX = 9 V = 5 IV = 4 I = 1 @classmethod def encode(cls, n): for numeral in cls: rep, n = divmod(n, numeral.value) yield numeral.name * rep checkio = lambda n: ''.join(Roman.encode(n))
В целом пример работает так-же как мы видели в первом примере от StefanPochmann, но кое-каким синтаксическим сахором. Таким как Enum и yield
«A derelict battery» от veky
Все эти решения я собрал с CheckiO.
И когда пользователь публикует свое решение на этом ресурсе — он должен выбрать, в какую категорию он хочет его добавить. Есть такая категория как “Creative”, где тебе не надо сильно заморачиваться на тему скорости или как легко твое решение читается.
Единственная вещь, о который ты должен думать — это на сколько креативное и необычное твое решение.Это решение как раз из такое категории.
import formatter, functools checkio = functools.partial(formatter.AbstractFormatter.format_roman, None, 'I')
Да, вот и все. Стоит упомянуть, правда, что модуль formater задеприкейтили начиная с версии 3.4 из-за того, что мало кто его использовал. Так что мы скорее всего напишем петицию Гвидо, чтобы оставить этот модуль в Python. Своим ап-вотом за это решение — вы как-бы ставите свою подпись под этой петицией.
«Достаточно элегантно, но не очень по питоновски» от nathan.l.cook
Мы идем дальше и решения становятся тяжелее
def checkio(data): rom = ['I', 'V', 'X', 'L', 'C', 'D', 'M'] str_data = str(data) str_data = str_data[::-1] num_digits = len(str_data) ans = "" rom_pointer = 0 for place in range(num_digits): if str_data[place] in ["0", "1", "2", "3"]: ans = rom[rom_pointer] * int(str_data[place]) + ans elif str_data[place] in ["4"]: ans = rom[rom_pointer] + rom[rom_pointer + 1] + ans elif str_data[place] in ["5", "6", "7", "8"]: ans = rom[rom_pointer + 1] + rom[rom_pointer] * (int(str_data[place]) - 5) + ans elif str_data[place] in ["9"]: ans = rom[rom_pointer] + rom[rom_pointer + 2] + ans rom_pointer += 2 return ans
Знаете, когда читаешь чье то решение и первые строки, которые ты видишь это:
str_data = str(data) str_data = str_data[::-1]
Ты думаешь: “Ок, тут ща точно будет какая-то магия”
«Немного истории от» от veky (или от …)
def checkio(n:int) -> str: pool = "m2d5c2l5x2v5i" rep = lambda t: int(pool[t - 1]) def roman(n, j=0, v=1000): while True: while n >= v: yield pool[j]; n -= v if n <= 0: return k = j + 2; u = v // rep(k) if rep(k) == 2: k += 2; u //= rep(k) if n + u >= v: yield pool[k]; n += u else: j += 2; v //= rep(j) return "". join(roman(n)).upper()
Вы можете знать автора этого решения по таким книгам как The Art of Computer Programming, Concrete Mathematics, Surreal Numbers и так далее.
«Эта странная римская математика» от LukeSolo
Довольно часто ты встречаешь решения на CheckiO, и при этом ты даже не представляешь, как они работают:
from math import sqrt alpha = "IVXLCDM" one = lambda n, s: (n % 5 >> n % 5 // 4 * 2) * alpha[s] two = lambda n, s: (3 < n) * alpha[s + (3 < n) + (8 < n)] three = lambda n, s: sqrt(n) == int(sqrt(n)) and ''.join(reversed(s)) or s go = lambda n, s: three(n, two(n, s) + one(n, s)) def checkio(data, s = 0, conc = ""): d, m = divmod(data, 10) text = go(m, s) + conc return d and checkio(d, s + 2, text) or text
Но я думаю, что вы разберетесь 🙂
Спасибо
В списке используемых материалов я добавил ссылки на решения CheckiO пользователей, которые использовал в этой статье. Перейдя по ним, вы можете прочитать код-ревью других пользователей либо написать свое.
Это первый раз, когда я пытаюсь поделится такой вот коллекцией наиболее интересных решений на CheckiO. Дайте мне знать, насколько интересно вам о таком читать и на сколько вам нравится сам формат.
Для создания этой статьи использовались решения пользователей CheckiO:
- “13 шагов” от StefanPochmann
- “thous, hunds, tens и ones” от mdeakyne
- “base.replace” от MaikSchoepe
- “Enum” от veky
- “A derelict battery” от veky
- “Достаточно элегантно, но не очень по питоновски” от nathan.l.cook
- “Немного истории от” от veky (или от …)
- “Эта странная римская математика” от LukeSolo
ПС: Кстати, еще есть категория “Speedy” для решений. И когда ты говоришь, что решение задачи не может быть длиннее чем 4000 символов, то самым быстрым решением для этой задачи будет вот это. По понятным причинам я могу вам показать только ссылку.
Конспект урока по теме «Арабские и римские цифры» (закрепление)
Тема: Арабские и римские цифры (закрепление)
Цели: закрепить вычислительные навыки, умения записывать числа
римскими цифрами, умение анализировать и решать задачи
Планируемые результаты:
- учащиеся научатся применять знания записи римских чисел разными цифрами в ходе практической работы — П
- анализировать и делать выводы — П
- решать задачи разными способами — П
- принимать учебную задачу и следовать инструкции учителя – Р
- работать в паре и оценивать товарища – К
- оценивать себя, границы своего знания и незнания — Л
Оборудование урока: карточки с заданиями; интерактивная доска, презентация, счётные палочки, индивидуальные карточки.
Ход урока
I. Организационный момент
Этот урок у нас сейчас науке посвящается,Что математикой всегда в школе называется.
Она поможет воспитать такую точность мысли,
Чтоб в нашей жизни все познать, измерить и исчислить!
II.Актуализация знаний:
- Логическая разминка: реши задачи
- В семье двое детей. Саша – брат Жени, но Женя ему не брат. Как такое может быть? (Женя – сестра)
- Палку с двумя концами распилили пополам. Сколько стало концов? (Две палки, 4 конца)
- 2. Устный счет – презентация «Помоги Скуби – Ду» (Приложение)
- Реши (7 примеров)
- Продолжи
- Реши задачи
III. Самоопределение к деятельности
Установи закономерность и продолжи ряд (на доске)
- 56,57, …
- 11,13,15,….
- 63,53,43,…
- XXV, XXXV, XLV,…..
Какие цифры нам потребовались, чтобы продолжить закономерности и записать числа? (Арабские и римские)
Почему они так называются? Сколько арабских цифр вы знаете? Назовите их. (0,1,2,3,4,5,6,7.8,9)
Какие римские цифры вы знаете? Назовите их. ( I, V, X, L,С,D,M)
Какими цифрами записывать числа сложнее?
Определите тему нашего урока. Цели.
Физкультминутка
IV.Работа по теме урока (закрепление)
1. Заполните таблицу — работа в парах
Какие правила нужно соблюдать при записи чисел римскими цифрами?
Меньшая цифра, стоящая справа от большей, прибавляется к ней.
Меньшая цифра, стоящая слева – вычитается
Мы вспомнили римские цифры и правила их записи. А сейчас попробуем выполнить задание: записать арабские числа римскими цифрами
6 — 29 —
14 — 17 —
30 — 40 —
2 — 35 —
8 — 11 —
Проверка по эталону — документ – камера
2. Работа в тетради:
- Запись числа, прописывание цифр
- Сравни (на доске): цепочка и в тетради, проверка
X….IX XXII… XXXII
VIII…XII VI…IV
XI… IX VII … XII
3. Работа со счетными палочками – работа в парах
В выложенных из палочек равенствах с римскими цифрами допущена ошибка. Как надо переложить по одной палочке в каждом равенстве, чтобы исправить ошибку.
VI + I = V X + III = XI IX – I = X
Физкультминутка
4. Работа с учебником с. 23 № 296 (1,2) – задачи — записываем решение, ответ
1) 9 + 11 + 7 = 27 (елей)
Ответ: 27 елей посадили рядом со школой
2) 8 +8 + 8 + 24 (елей)
Ответ: 24 елей посадили рядом со школой
8 * 3 = 24 (елей)
Ответ: 24 елей
V. Закрепление изученного – тест по вариантам
Вариант 1.
Фамилия, имя ___________________________________________
- Запишите числа римскими цифрами.
33 ______ 8 ______ 29 ______
14 ______ 36 ______ 17 ______
- Запишите числа арабскими цифрами.
XVII_____ VIII _____ XXXIV _____ XXV _____ XXXIX _____
- Запишите значения выражений, используя римские цифры.
X – IX = XII + V = XXIV – I =
__________________________________________________________________
Вариант 2.
Фамилия, имя______________________________________________________
- Запишите числа римскими цифрами.
23 ______ 7 ______ 39 ______
16 ______ 35 ______ 18 ______
- Запишите числа арабскими цифрами.
XV _____ IX _____ XXXVI _____ XXIV _____ XXIX _____
- Запишите значения выражений, используя римские цифры.
IX – V = XII + X = XXIV + I =
VI, Рефлексия учебной деятельности на уроке.
-Вот и подошёл к концу наш урок. У вас на партах лежат «Светофорчики» Зелёный цвет означает положительный ответ, красный – отрицательный ответ, Желтый — сомнения Я произнесу некие утверждения, а вы поднимайте знаки согласия или несогласия, сомнения
-Я знаю, что такое римские цифры
-Я знаю, правила, по которым записываются римские числа
-В самостоятельной работе у меня всё получилось
-Я смог понять причину ошибки, которую допустил в самостоятельной работе (если была) и исправил свою ошибку.
— Мой товарищ по парте хорошо работал на уроке
Как вы думаете, почему математики всего мира пользуются арабской системой, а не римской?
Оцените себя:
Я понял ….
Я научился……
У меня возникли вопросы ….
Я активно работал на уроке….
VII. Подведение итогов. Д\З – т. с 4 № 7
Просмотр содержимого документа
«конспект урока по теме «Арабские и римские цифры» (закрепление) »
МОУ «Совхозная средняя общеобразовательная школа»
Серебряно – Прудского района Московской области
Арабские и римские цифры
(Урок математики во 2 А классе
в рамках декады учителей начальных классов)
Подготовила
учитель начальных классов
Яковлева В. Н.
п. Успенский, 2014
Тема: Арабские и римские цифры (закрепление)
Цели: закрепить вычислительные навыки, умения записывать числа
римскими цифрами, умение анализировать и решать задачи
Планируемые результаты:
учащиеся научатся применять знания записи римских чисел разными цифрами в ходе практической работы — П
анализировать и делать выводы — П
решать задачи разными способами — П
принимать учебную задачу и следовать инструкции учителя – Р
работать в паре и оценивать товарища – К
оценивать себя, границы своего знания и незнания — Л
Оборудование урока: карточки с заданиями; интерактивная доска, презентация, счётные палочки, индивидуальные карточки.
Ход урока
Организационный момент
Этот урок у нас сейчас науке посвящается,
Что математикой всегда в школе называется.
Она поможет воспитать такую точность мысли,
Чтоб в нашей жизни все познать, измерить и исчислить!
II.Актуализация знаний:
Логическая разминка: реши задачи
В семье двое детей. Саша – брат Жени, но Женя ему не брат. Как такое может быть? (Женя – сестра)
Палку с двумя концами распилили пополам. Сколько стало концов? (Две палки, 4 конца)
Устный счет – презентация «Помоги Скуби – Ду» (Приложение)
Реши (7 примеров)
Продолжи
Реши задачи
Самоопределение к деятельности
Установи закономерность и продолжи ряд (на доске)
56,57, …
11,13,15,….
63,53,43,…
XXV, XXXV, XLV,…. .
Какие цифры нам потребовались, чтобы продолжить закономерности и записать числа? (Арабские и римские)
Почему они так называются? Сколько арабских цифр вы знаете? Назовите их. (0,1,2,3,4,5,6,7.8,9)
Какие римские цифры вы знаете? Назовите их. ( I, V, X, L,С,D,M)
Какими цифрами записывать числа сложнее?
Определите тему нашего урока. Цели.
Физкультминутка
Работа по теме урока (закрепление)
1. Заполните таблицу — работа в парах
Какие правила нужно соблюдать при записи чисел римскими цифрами?
Меньшая цифра, стоящая справа от большей, прибавляется к ней.
Меньшая цифра, стоящая слева – вычитается
Мы вспомнили римские цифры и правила их записи. А сейчас попробуем выполнить задание: записать арабские числа римскими цифрами
6 | 14 | 30 | 2 | 29 | 17 | 40 | 35 | 8 | 11 |
Проверка по эталону — документ – камера
Работа в тетради:
Запись числа, прописывание цифр
Сравни (на доске): цепочка и в тетради, проверка
X…. IX XXII… XXXII
VIII…XII VI…IV
XI… IX VII … XII
Работа со счетными палочками – работа в парах
В выложенных из палочек равенствах с римскими цифрами допущена ошибка. Как надо переложить по одной палочке в каждом равенстве, чтобы исправить ошибку.
VI + I = V X + III = XI IX – I = X
Физкультминутка
Работа с учебником с. 23 № 296 (1,2) – задачи — записываем решение, ответ
1) 9 + 11 + 7 = 27 (елей)
Ответ: 27 елей посадили рядом со школой
2) 8 +8 + 8 + 24 (елей)
Ответ: 24 елей посадили рядом со школой
8 * 3 = 24 (елей)
Ответ: 24 елей
V. Закрепление изученного – тест по вариантам
Вариант 1.
Фамилия, имя ___________________________________________
Запишите числа римскими цифрами.
33 ______ 8 ______ 29 ______
14 ______ 36 ______ 17 ______
Запишите числа арабскими цифрами.
XVII_____ VIII _____ XXXIV _____ XXV _____ XXXIX _____
Запишите значения выражений, используя римские цифры.
X – IX = XII + V = XXIV – I =
__________________________________________________________________
Вариант 2.
Фамилия, имя______________________________________________________
Запишите числа римскими цифрами.
23 ______ 7 ______ 39 ______
16 ______ 35 ______ 18 ______
Запишите числа арабскими цифрами.
XV _____ IX _____ XXXVI _____ XXIV _____ XXIX _____
Запишите значения выражений, используя римские цифры.
IX – V = XII + X = XXIV + I =
VI, Рефлексия учебной деятельности на уроке.
-Вот и подошёл к концу наш урок. У вас на партах лежат «Светофорчики» Зелёный цвет означает положительный ответ, красный – отрицательный ответ, Желтый — сомнения Я произнесу некие утверждения, а вы поднимайте знаки согласия или несогласия, сомнения
-Я знаю, что такое римские цифры
-Я знаю, правила, по которым записываются римские числа
-В самостоятельной работе у меня всё получилось
-Я смог понять причину ошибки, которую допустил в самостоятельной работе (если была) и исправил свою ошибку.
— Мой товарищ по парте хорошо работал на уроке
Как вы думаете, почему математики всего мира пользуются арабской системой, а не римской?
Оцените себя:
Я понял ….
Я научился……
У меня возникли вопросы ….
Я активно работал на уроке….
VII. Подведение итогов. Д\З – т. с 4 № 7
5
Как арабские цифры перевести в римские
Принцип перевода арабских чисел в римские
Перевод любых чисел от 1 до 3999 в римские числа и определение века для указанного года.
Года римскими цифрами. Таблица
Таблица соответствия годов в арабской и римской записи в диапазоне от 1890 до 2020 года.
Века римскими цифрами
Таблица соответствия года и века римскими цифрами в диапазоне от 1 до 2100 года.
Перевод арабских чисел в римские
В римском исчислении используют всего семь заглавных букв латинского алфавита.
- I — 1
- V — 5
- X — 10
- L — 50
- C — 100
- D — 500
- M — 1000
Натуральные числа записываются при помощи повторения этих цифр.
При этом, если большая цифра стоит перед меньшей, то они складываются (принцип сложения), если же меньшая стоит перед большей, то меньшая вычитается из большей (принцип вычитания).
Последнее правило применяется только для исключения четырёхкратного повторения одной и той же цифры.
Некоторые из цифр (I, X, C, M — единицы в соответствующих разрядах) могут повторяться, но не более трёх раз подряд.
Принцип вычитания применяется только к шести числам:
- IV — 4
- IX — 9
- XL — 40
- XC — 90
- CD — 400
- CM — 900
С помощью римских цифр можно записать любое целое число, но не более 3999 (MMMCMXCIX).
В качестве примера это число и рассмотрим. Выделяем разряды — MMM’CM’XC’IX:
Из Басры в Рим. Преобразовываем арабские числа в римские
Разрабатывая в основном для платформы J2ME, я всегда старался вносить какие то изюминки в свои проекты. Так, однажды, мне понадобилось выделить пункты меню.
Стандартное решение, через тире или пронумеровав их, использовать не очень хотелось, но другие варианты тогда у меня отсутствовали. Обдумывая как бы лучше оформить эти пункты, я случайно наткнулся на свою старую школьную тетрадку по истории, в которой пункты были пронумерованы с использованием римских цифр. Бинго!
Стоит признаться, на то время моих познаний в римских цифрах хватало только для подсчета до второго-третьего десятка. Что вообще то для нумерации пунктов должно было хватить. Но как любой программист, захотелось иметь готовое решение, которое смогло бы переводить любые целые десятичные арабские числа в эквивалентные им римские.
В Википедии нашлась статья с описанием Римской СС, и вскоре я набросал алгоритм перевода из арабских чисел в римские.
I — 1
V — 5
X — 10
L — 50
C — 100
D — 500
M — 1000
Ноль отсутствует вообще, поэтому будем использовать пустое значение.
Итак, сам алгоритм достаточно прост:
1. Выделяем (если есть) количество целых тысяч. Полученное значение позволить сгенерировать строку с n количеством «M» (читаем, n*1000).
Пример: 2012 после первого пункта даст «MM»
2. Получаем остаток после деления на 1000, чтобы выделить в дальнейшем следующие значения.
3. Выделяем (если возможно), целые 500. При этом учитываем что если полученное значение равно 4 (5+4=9), то следует записывать как значение 1000-100, что в римский СС равнозначно «CM».
Пример: 1887 после этого пункта даст нам «MD».
1945 соответственно «MCM».
4. Получаем остаток от деления на 500.
5. Делим на 100 чтобы выделить целые сотни и складываем к предыдущему результату. Учитываем что если получили 4, что равнозначно 400, то записываем как 500-100, то есть «CD».
Пример: 1709 даст после этого шага «MDCCC».
6. Получаем остаток от деления на 100.
7. Выделяем из него целые пол сотни. Если значение будет равно 4 (то есть 90), то записываем как 100-10, что равно «XC». Иначе прибавляем к строке «L»
Пример: 1986 после всего выдаст нам «MCML».
8. Выделяем остаток от 50.
9. Выделяем целое количество десятков и складываем к строке n раз символ «X». При этом учитываем что 40 пишется как 50-10, то есть «XL».
Пример: 1986 после всего выдаст нам «MCMLXXX».
10. Получаем остаток от деления на 10. Этот шаг отличается от других тем, что можно сразу приравнять остаток к его эквиваленту. 1=I, 7=VII и так далее.
После перебора числа этим алгоритмом мы получаем примерно такое:
2012 == MMXII
Ниже исходник на Java, реализующий алгоритм.
Римские цифры и числа
Введите число, используя арабские (0…9) или римские (I, V, X, L, C, D, M) цифры, и нажмите кнопку Конвертировать .
Корректно конвертируются целые числа от 1 до 3 999 (от I до MMMCMXCIX).
Принципы римской системы счисления
В настоящее время в римской системе счисления используются следующие знаки:
- I = 1;
- V = 5;
- X = 10;
- L = 50;
- C = 100;
- D = 500;
- M = 1000.
Все целые числа от 1 до 3999 записываются с помощью приведенных выше цифр. При этом:
Римские цифры — Class Playground
Введение
Система римских цифр — это один из способов записи чисел. Как можно понять по названию, оно использовалось еще римлянами в древние времена. Он использует комбинацию из 7 букв для представления чисел.
Системой, которую мы используем в англоязычном мире сегодня, является арабская система счисления. Арабские цифры состоят из десяти символов — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Каждый символ имеет значение, и положение цифры также имеет значение.
Дети обычно изучают римские цифры в рамках программы по математике в начальной школе. Хотя некоторые люди считают их устаревшими, римские цифры по-прежнему являются важной частью современного мира, а также знакомят юных учащихся с другими важными новыми понятиями.
Что такое римские цифры?
Почти так же, как арабские цифры, римские цифры имеют значение, и их значение меняется в зависимости от их положения.
Семь римских цифр и их значения:
Символ | я | В | х | л |
Значение (слова) | один | пять | десять | пятьдесят |
Значение (арабский) | 1 | 5 | 10 | 50 |
Символ | С | Д | М |
Значение (слова) | сто | пятьсот | одна тысяча |
Значение (арабский) | 100 | 500 | 1000 |
Важно знать порядок римских цифр, как показано в этой таблице.
Когда два одинаковых символа сгруппированы вместе , общее количество равно сумме этих символов.
Например:
XXX = 3 x десять = 30
Когда меньшее число стоит перед большим числом , оно вычитается из большего числа.
Например:
IV = один отнять от пяти = 4
XXC = от ста отнять двадцать = 80
Когда меньшее число стоит после большего числа , оно прибавляется к большему числу.
Например:
CXX = сто плюс (2 x десять) = 120
Сравните с арабскими цифрами, где значение позиции абсолютное:
4449 =
4 | 4 | 4 | 9 |
тысяч | сотен | десятки | штук |
Римскими цифрами значение позиции является относительным. Расположение одного символа по отношению к другому определяет общее значение числа.
5449=
4000 | 400 | 40 | 9 |
ММММ | CD | XL | IX |
MMMMCDXLIX
Несмотря на то, что они кажутся сложными, юные учащиеся обычно могут довольно быстро понять римские цифры при наличии соответствующих действий и ресурсов.
Почему сегодня мы не используем римские цифры
Хотя западный мир использовал римские цифры на протяжении тысячелетий, в 1300-х годах их начали постепенно заменять арабскими цифрами. Существуют две основные причины изменения системы счисления.
Во-первых, римские числа могут стать громоздкими, когда вы работаете с большими числами. Например:
Арабский | 1987 |
Роман | MCMLXXXVII |
Английский (слова) | одна тысяча девятьсот восемьдесят семь |
Подобно тому, как использование римских символов было усовершенствованием использования слов, арабские цифры являются усовершенствованием римских цифр.
Во-вторых, и это более важно, гораздо проще заниматься математикой, используя арабские цифры. Это связано с тем, что, как уже упоминалось, значение положения арабских цифр является абсолютным. Можно выполнять базовое сложение и вычитание с использованием римских цифр, но что-то более сложное становится затруднительным.
Вот простое дополнение.
В арабской системе, чтобы сложить два числа вместе, вы можете сложить единицы, сложить десятки и т. д., чтобы узнать общее значение.
8 | 7 | + |
1 | 5 | |
9 | 2 |
Вы можете сделать что-то подобное и с римскими цифрами, но вы должны знать, на что делить ваши значения, т.е. это не просто одна цифра в каждом поле.
LXXX | VII | + |
IV | ||
LXXX | XII |
Но для умножения и чего-либо более сложного использование римских цифр становится слишком сложным. Когда использовалась римская система, математика выполнялась на счетах, а не на бумаге.
По этим причинам арабские цифры постепенно превзошли римские по полезности и популярности.
Почему мы до сих пор учим римские цифры?
Если римские цифры — это, по существу, древняя история, почему мы до сих пор их учим? Это очень распространенный вопрос, который задают тысячи учителей начальной школы, родителей и учеников во всем англоязычном мире. Даже Барт Симпсон задавался вопросом, почему (до того, как его чуть не съели тигры-людоеды).
Римские цифры используются до сих пор.
Несмотря на то, что сегодня они редкость, римские цифры не исчезли. Вы можете найти их повсюду:
- Чтобы различать королей и королев. Например, королева Елизавета II.
- Чтобы различать предков/потомков с одинаковым именем. Например, Маршалл Брюс Мазерс III (Эминем).
- На страницах содержания. Например, на переднем плане и в отдельных разделах.
- Чтобы различать значимые события. Например, Первая мировая война, Вторая мировая война, Суперкубок LIV.
- На циферблате. Например, Биг Бен.
- В периодической таблице элементов, в нотной записи и некоторых других научных обозначениях.
Как только вы поймете, что римские цифры встречаются чаще, чем вы думали, вы начнете видеть их повсюду.
Римские цифры как введение в абстракцию и другие языки
Еще одна причина для обучения римским цифрам заключается в том, что они позволяют учащимся понять, что числа представляют собой абстрактную идею.
Один = 1 = идея одного , потому что мы выбрали эту систему. Символы — это наш способ конкретизировать абстрактные идеи, чтобы мы могли с ними работать. Мы не ожидаем, что дети поймут философию, стоящую за этим, но как только концепция будет введена, ее можно будет укрепить позже.
Римские цифры помогают познакомить детей с мыслью о том, что одно и то же можно выразить несколькими способами, в зависимости от контекста. Это пригодится позже, когда дело доходит до изучения нового языка (для одноязычных детей) или при изучении того, как работают компьютерные языки.
Преобразование римских цифр в целые числа использует другую логику по сравнению с арабскими цифрами. Вместо того, чтобы работать с абсолютными позициями — тысячами, сотнями, десятками, единицами — дети должны научиться различать относительные атрибуты и таким образом вычислять окончательное значение. Логика станет более частой в математическом образовании ребенка, и чем раньше они будут подвергаться различным формам, тем лучше.
Римские цифры как часть более широкой общей учебной программы
Многие преподаватели используют римские цифры в качестве пересечения с другими понятиями в учебной программе, такими как история, язык, время и логика. Они могут быть интересным и полезным способом представить эти темы, особенно в целостной и интегрированной обстановке начального образования. Чтобы узнать больше об истории Рима, посетите Библиотеку для детей 9.0005
Как я решил вопрос о преобразовании арабских цифр в римские | by Tracyrenee
Я прошел свой первый курс компьютерного программирования около 33 лет назад на аэродроме Гайленкирхен в Германии в европейском отделении Университета Мэриленда. Единственным компьютерным курсом, который я посещал до этого курса, был курс блок-схем, где я научился делать блок-схемы и писать псевдокод. В то время компьютерное программирование все еще писалось сверху вниз, а объектно-ориентированное программирование все еще находилось в зачаточном состоянии.
Когда я посещал свой первый настоящий курс компьютерного программирования, я был совершенно не в себе, потому что вместо того, чтобы начать с Basic или Fortran, я сразу перешел к Pascal, потому что в то время это был единственный курс, который предлагался. Когда я присутствовал на своем первом занятии, лектор рассказал нам немного информации о языке программирования Pascal и дал классу задание, которое заключалось в преобразовании арабских цифр в римские.
Я совсем растерялся, но все же попытался решить проблему. В состоянии разочарования я передал невыполненное задание лектору и сказал ей, что оно не работает. Этот лектор разозлился на меня и сообщил, что программа действительно работает. На следующей неделе преподаватель вернул наши оцененные задания и выступил перед классом с докладом о плагиате. Весь класс, кроме меня, очевидно, получил алгоритм и скопировал его. Я не знаю, какие оценки получили эти лица, потому что, если бы я был в основной группе плагеризаторов, то они уж точно не собирались бы мне рассказывать, чем закончились их нечестные дела.
Таким образом, этот пост затрагивает две темы. Первая тема связана с тем, что преобразование арабских цифр в римские — непростая задача, а вторая — это наказание за плагиат.
Пока я готовился к этому сообщению, я снова почувствовал себя не в своей тарелке, когда попытался создать алгоритм преобразования арабских цифр в римские. Я не решил проблему 33 года назад, и эта проблема оставалась для меня нерешенной все это время. Времена сейчас совсем другие, а именно тот факт, что мы можем искать вопросы в Интернете, что является вариантом, который был недоступен для меня более трех десятилетий назад. Поэтому я провел поиск в Интернете и обнаружил, что в настоящее время существует множество решений проблемы преобразования арабских чисел в римские. Поскольку в Интернете так много решений, я исследовал то, которое я мог бы выполнить с наибольшей легкостью. Поэтому я отказался от решения, которое требовало от меня создания класса, а затем функции внутри класса, потому что я не продвинулся так далеко в своем изучении Python и программирования в целом.
В конце концов я выбрал решение, которое нашел в переполнении стека, потому что оно имело только карту и функцию с несколькими строками кода. Это решение вдохновило меня выполнить задание, которое мой учитель Паскаля дал мне много лет назад. Единственная разница на этот раз заключается в том, что вместо этого я решил написать программу на Python. Ссылку на сообщение stackoverflow можно найти здесь: https://stackoverflow.com/questions/28777219/basic-program-to-convert-integer-to-roman-numerals
Римские цифры — это система счисления, которая возникла в Древнем Риме и оставалась обычным способом записи чисел по всей Европе вплоть до позднего средневековья.
В современном использовании используются семь символов:
I = 1
V = 5
x = 10
L = 50
C = 100
D = 500
M = 1000
Римские числа являются базовыми -10 система счисления, но вместо обозначения разряда они используют символы для представления фиксированных значений.
В таблице ниже показано, как следует писать римские цифры:
Я написал программу в Google Colab, онлайн-блокноте Jupyter, на котором уже установлены Python и несколько библиотек. К недостаткам Google Colab можно отнести то, что в нем не установлены самые последние обновления библиотек и он не сохраняет файлы резервных копий. Следовательно, необходимо соблюдать осторожность, чтобы не перезаписать важный код, что я действительно делал в прошлом.
После того, как я создал программу, я выбрал библиотеки, которые мне понадобятся, а именно numpy:-
После того, как я импортировал библиотеки, я немного изменил функцию в stackoverflow, чтобы сделать ее более удобочитаемой:
После того, как функция была протестирована, я добавил несколько строк кода, которые позволили бы человеку вводить арабские цифры. он хотел преобразовать в римские цифры. Этот код был помещен в цикл, чтобы пользователь мог ввести столько чисел, сколько он хотел бы получить соответствующие римские цифры:-
К сожалению, мои навыки программирования недостаточно хороши, чтобы решить проблему преобразования арабских чисел в римские цифры на мой собственный, но я цитировал свои источники!
Код для этого поста полностью можно найти в моей личной учетной записи GitHub, ссылка на которую находится здесь:-Games/Convert_Arabic_to_Roman_Numerals. ipynb в main · TracyRenee61/Games (github.com)
Изменение римских цифр на арабские (Microsoft Word)
Обратите внимание: Эта статья написана для пользователей следующих версий Microsoft Word: 2007, 2010, 2013, 2016, 2019 и Word в Microsoft 365. Если вы используете более раннюю версию (Word 2003 или более раннюю), этот совет может вам не подойти . Чтобы просмотреть версию этого совета, написанную специально для более ранних версий Word, нажмите здесь: Изменение римских цифр на арабские.
by Allen Wyatt
(последнее обновление 22 июля 2022 г.)
У Брэдли есть документ, в тексте которого много римских цифр. Ему нужен простой способ изменить эти тысячи римских цифр на арабские. Это не поля какой-либо природы; они просто набираются в тексте римскими цифрами. Он задается вопросом, есть ли способ легко заменить их арабскими эквивалентами.
К сожалению, в Word нет функции преобразования римских цифр в арабские. Вы можете, если хотите, просто использовать функцию «Найти и заменить» для поиска римских цифр, но вам придется выполнять индивидуальный поиск для каждой из них. Вы можете использовать поиск по подстановочным знакам для поиска слова, полностью состоящего из римских цифр в верхнем регистре, что немного облегчит поиск. Все, что вам нужно сделать, это найти «<[CDILMVX]{1,}>» (без кавычек) и убедиться, что установлен флажок «Использовать подстановочные знаки». Когда вы нажимаете «Найти далее», находится следующая римская цифра, и вы можете вручную заменить ее арабской эквивалентной.
Еще один способ выполнить преобразование — использовать макрос. Вы можете создать макрос, который просматривает каждое слово в вашем документе и пытается определить, является ли оно кандидатом на то, чтобы состоять из римских цифр. Однако вы можете получить некоторые ложные срабатывания, особенно если ваш документ содержит аббревиатуры, которые можно спутать с римскими цифрами. (Например, если вы используете аббревиатуру CC для кредитной карты, это можно рассматривать как римскую цифру для 200.)
Следующий набор макросов будет выполнять пошагово каждое слово в документе, и если слово содержит только римские цифры (I, V, X, L, C, D и M), то пользователя спрашивают, должен ли макрос преобразовывать цифры.
Sub ConvertRoman() Дим wrdX Dim wrd As String Dim tstSW как логическое значение Дим Джей До тех пор Для каждого wrdX в ActiveDocument.Words wrd = UCase(Trim(wrdX)) Если wrd = "" Или wrd = "I" Или wrd = vbCr Тогда tstSW = Ложь Еще tstSW = Истина Конец, если Для J = 1 To Len(wrd) Если InStr("MDCLXVI",Mid(wrd, J, 1)) = 0 Тогда tstSW = Ложь Выход для Конец, если Следующий J Если цСВ Тогда wrdX.Select Единица Selection.MoveLeft:=wdCharacter, _ Счетчик:=Len(wrdX) - Len(wrd), _ Расширить:=wdExtend J = MsgBox("Преобразовать " & wrd & " в арабский язык", vbYesNoCancel) Если J = vbCancel, то выйдите из Sub Если J = vbYes, тогда Selection.TypeText Text:=RomanToArabic(wrd) Конец, если Следующий wrdX Конец сабвуфера
Функция RomanToArabic (Rm как строка) как строка Дим Джей До тех пор Dim ab As Long Dim cc до тех пор, пока Dim dd As Long аб = 0 Rm = Обрезка (Rm) Дж = 1 Делать cc = GetValue (Середина (Rm, J, 1)) дд = GetValue (Середина (Rm, J + 1, 1)) Если сс < дд Тогда аб = аб + дд - куб. Дж = Дж + 1 Еще аб = аб + куб. Конец, если Дж = Дж + 1 Цикл до J >= Len(Rm) Если J = Len(Rm), то ab = ab + GetValue (Mid (Rm, J, 1)) Конец, если RomanToArabic = Обрезка (Стр (аб)) Конечная функция
Функция GetValue(ss As String) As Long Тусклый код() Dim Cvalue () Дим Джей До тех пор Cde = Array("M", "D", "C", "L", "X", "V", "I") Cзначение = Массив (1000, 500, 100, 50, 10, 5, 1) Для J = от 0 до 6 Если ss = Cde(J), то ПолучитьЗначение = Cзначение(J) Выход из функции Конец, если Следующий J ПолучитьЗначение = 999999 Конечная функция
Так как слово I в верхнем регистре очень часто встречается в тексте, макросы не будут останавливаться на каждом из них, чтобы определить, нужно ли выполнять преобразование. Однако, если заглавная буква I является частью более длинного слова, состоящего только из римских цифр (например, XLVII), то она считается кандидатом на преобразование. Макросы также предполагают, что все ваши римские цифры в верхнем регистре.
Примечание:
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице WordTips сайтов), я подготовил специальную страницу, содержащую полезную информацию. . Нажмите здесь, чтобы открыть эту специальную страницу в новой вкладке браузера.
WordTips — ваш источник недорогого обучения работе с Microsoft Word. (Microsoft Word — самая популярная в мире программа для обработки текстов.) Этот совет (5943) применяется к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Microsoft 365. Вы можете найти версию этого совета для старого интерфейса меню Word здесь: Замена римских цифр на арабские .
Биография автора
Allen Wyatt
На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Вятт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнать больше об Аллене…
Первое и последнее слово в Word! Бестселлер Для чайников Автор Дэн Гукин возвращается к своей обычной веселой и дружелюбной откровенности, чтобы показать вам, как ориентироваться в Word 2013. Тратьте больше времени на работу и меньше на попытки разобраться во всем этом! Проверьте Word 2013 для чайников сегодня!
Подписаться
БЕСПЛАТНАЯ УСЛУГА: Получайте подобные советы каждую неделю в WordTips, бесплатном информационном бюллетене по продуктивности. Введите свой адрес и нажмите «Подписаться».
Просмотр последнего информационного бюллетеня.
(Ваш адрес электронной почты никому никогда не передается.)
Комментарии
Этот сайт
Есть версия Word, которая использует ленточный интерфейс (Word 2007 или более поздняя версия)? Этот сайт для вас! Если вы использовать более раннюю версию Word, посетите наш сайт WordTips посвящен интерфейсу меню.