с клавиатуры вводится строка,представляющая собой правильную запись натурального числа в римской системе счисления. вывести это число в обычной десятичной системе счисления. Xlll 13 также проверять правило записания ( l может повторяться только 3 раза) Xllll -не может рассматриваться как число
булиан не использовать
Код к задаче: «Перевести арабские цифры в римские»
Листинг программы
uses crt; var a:string; i,j,k:integer; b:array[1..50] of integer; s:longint; begin clrscr; repeat writeln(‘Введите правильное римское число:’); readln(a); k:=0; i:=1; while(i<=length(a))and(k=0) do if not(a[i] in [‘I’,’V’,’X’,’L’,’C’,’D’,’M’]) or (copy(a,i,4)=’IIII’) then k:=1 else i:=i+1; if k=1 then writeln(‘Число введено неверно, повторите ввод’) until k=0; for i:=1 to length(a) do case a[i] of ‘I’:b[i]:=1; ‘V’:b[i]:=5; ‘X’:b[i]:=10; ‘L’:b[i]:=50; ‘C’:b[i]:=100; ‘D’:b[i]:=500; ‘M’:b[i]:=1000; end; s:=B[1]; for i:=2 to length(a) do begin s:=s+b[i]; if b[i-1]
Источник: studassistent.ru
как сделать … преобразование арабских цифр в римские в Excel
Реализация приложения «Конвертер арабских чисел в римские» с использованием языка программирования высокого уровня PascalABC.Net.
Описан процесс создания и программный код программы-конвертера из арабских чисел в римские.
Скачать:
Предварительный просмотр:
Бюджетное образовательное учреждение г. Омска «Средняя
общеобразовательная школа №23″.
«Конвертер арабских чисел в римские»
с использованием языка программирования высокого уровня PascalABC.Net.
Автор работы: Чугунов Данил
Александрович, 9Б класс.
Руководитель работы: Барбашев Игорь
Анатольевич, учитель информатики.
- Введение
- Объект и предмет исследования.
- Цель проекта.
- Задачи проекта.
- Актуальность темы.
- Гипотеза.
- Теоретическая часть
- Для чего нужны языки программирования?
- Как создают программные продукты.
- Практическая часть
- Как мы создавали приложение.
- Тестирование приложения.
- Заключение.
- Использованные источники.
- Приложение.
Число – одно из основных понятий математики, используемое для количественной характеристики, сравнения, нумерации объектов и их частей. Казалось бы, что может быть проще? И вправду, с самого детства нас учат не только считать, но также складывать, делить, отнимать и умножать. На свете практически нет людей, не умеющих выполнять эти действия.
С числами мы встречаемся ежедневно, на уроках математики или физики, при покупке продуктов питания или билета в кино/на любимый аттракцион. Если бы не они — мы бы никогда не слышали ни про операционные системы, ни про электронные вычислительные устройства в целом, поскольку именно точные математические расчёты помогли Чарльзу Бэббиджу создать первую вычислительную машину, ставшую прототипом современной ЭВМ.
Как перевести арабские цифры в римские?
Я уверен в том, что у вас были случаи, когда вы не понимали, что за число находится перед вами и это не удивительно, ведь как минимум непривычно, пользуясь всю жизнь арабскими числами наблюдать перед собой, к примеру, римский счет.
В жизненной ситуации, когда человек сам не в состоянии понять, что за число ему пытались донести – он пользуется специальными словарями и это абсолютно нормально, но далеко не всегда удобно. В этом случае на помощь приходят программы переводчики или же конвертеры чисел из одного вида в другой.
1.1 Объект исследования — компьютерные программы, предмет исследования- конвертер арабских чисел в римские.
1.2 Цель проекта — реализация замысла с помощью языка программирования PascalABC.NET.
1.3 Задачи проекта:
- Найти словарь римские-арабские числа;
- Научиться работать с конструктором Windows Forms;
- Составить алгоритм выполнения программы;
- Провести отладку;
- Провести финальные тесты.
1.4 Я считаю, что такая работа является актуальной на сегодняшний день, потому что далеко не каждый человек, живущий сегодня, знает значения римских чисел большее, чем пятьдесят.
1.5 Гипотеза – возможно ли создание программы-переводчика римских чисел в арабские, с использованием языка программирования PascalABC.NET.
- Теоретическая часть
Начнем с того, что же такое PascalABC.NET?
PascalABC.NET — высокоуровневый язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений.
2.1. Что такое языки программирования и зачем они нужны?
Говоря простым языком, ЯП (язык программирования) – это знаковая система, предназначенная для записи компьютерных программ в понятном для человека виде.
То есть, именно языки программирования позволяют нам с вами вместо условной записи нулей и единиц в ячейки постоянной памяти компьютера видеть и задавать четкий, читаемый текст с полным пониманием того, что будет выполнено при запуске программы, написанной на нём.
На сегодняшний день выделяют два типа ЯП – высокоуровневые и низкоуровневые. К низкоуровневым относится вся группа языков ассемблера, включая промежуточный язык CIL. Высокоуровневые – все современные языки, кроме семейства ассемблера.
В чём же их отличия?
Говоря сложным языком, низкоуровневые языки программирования – языки, не имеющие абстрактной прослойки между уровнем (слоем) железа и уровнем прошивки.
Если перевести это определение на человеческий язык, то звучать оно будет так, низкоуровневые языки программирования – это такие языки программирования, которые позволяют запускать написанные на них программы без среды операционной системы, посредством прерываний BIOS ( базовая система ввода-вывода ) или операций UEFI ( Унифицированный расширяемый интерфейс встроенных микропрограмм ), тем самым получая максимально быстрый, по скорости выполнения, алгоритм.
Определение высокоуровневых языков программирования будет звучать следующим образом – языки, имеющие слои абстракции между железом и программой, представленные в виде трансляторов ( компилятора и интерпретатора ) с целью облегчения решения сложных программных задач и упрощения портирования ( адаптации под различные среды выполнения ) программного обеспечения.
Грубо говоря, высокоуровневые языки позволяют программисту писать более понятный, по сравнению с низкоуровневыми, код, при этом не думая ни о низкоуровневой реализации функций, ни о возможности его запуска на различных архитектурах, большинство необходимого уже продумано за него. Помимо этого, важным отличием языков высокого уровня является невозможность запуска алгоритма без среды ОС в случае, если для него не была создана программа ассемблер.
В связи с тем, что трансляторы устроены таким образом, что им приходится переводить высокоуровневый, понятный человеку, на низкоуровневый, понятный машине, код, теряется скорость выполнения алгоритма. Говоря грубо, один и тот же алгоритм написанный на условном NASM ( диалект ассемблера ) выполнится за четверть секунды, на С за полсекунды, на Java за одну треть секунды, а на Python же за целую секунду.
Очень часто к низкоуровневым языкам приписывают такой язык как С, однако данное мнение будет лишь частично верным, так поскольку, хоть он и является ключевым языком в сфере разработки операционных систем и драйверов к ним, он также поддерживает интерфейсы прикладного программирования (API), облегчающие жизнь тому, кто пишет код. В пример можно взять самый распространённый для разработки под ОС Windows – WinAPI, позволяющий задавать команды для отрисовки окон в среде Windows без мысли о том, а как же они вообще отрисовываются? Помимо поддержки API, С, как и любой другой высокоуровневый язык, имеет слой абстракции, но, как процедурный язык, всего один, в виде низкоуровневого языка ассемблера, таким образом более правильным определением этого языка будет выражение «Самый низкоуровневый из высокоуровневых».
С первого взгляда кажется, что программирование – занятие сложное, требующее огромного количества знаний и подготовки и, отчасти, так оно и есть, однако, важно понимать, что сложность зависит прямиком от задачи, которую нужно реализовать программисту.
2.2. Как создают программные продукты?
Разберёмся в этом вопросе на двух примерах, проект маленький – калькулятор, написанный на Python и проект крупный – операционная система Linux (в частных случаях GNU/Linux).
Казалось бы, что может объединять эти две совершенно разные программы? Ответ на этот вопрос, как нестранно, лежит буквально на поверхности – их объединяет алгоритм создания, ведь, если так рассуждать, то весь когда-либо написанный код создавался по примерно одинаковой схеме, отличались только масштабы и способы реализации.
Давайте разберем этот алгоритм поподробнее, для этого нам нужно полностью расписать его. Итак, для того чтобы создать программу программисту требуется:
- Определиться с тем, что ему нужно реализовать и иметь примерное представление о поставленной задаче.
- При необходимости разделить цельный проект на несколько подпрограмм.
- Продумать архитектуру приложения и его подпрограмм.
- Создать план разработки алгоритма как программы в целом, так и каждой подпрограммы, входящей в неё.
- Написать первую версию всего проекта или входящего в него приложения.
- Провести отладку написанного.
- Провести финальные тесты проекта или входящего в него приложения.
- При разделении программы на несколько подпрограмм – повторить шаги 5-7 для каждой её части и объединить всё в одно целое.
В случае простенького калькулятора один человек вполне себе способен пройти весь этот путь самостоятельно, без дополнительной помощи, однако, в случае с крупной современной операционной системой так, по понятной причине, сделать не получится и именно поэтому используется принцип разделения труда. В случае Линукса оно имеет самый глобальный масштаб. Работает это следующим образом – Линус Торвальдс, создатель и ведущий разработчик ядра Linux, вместе с командой проектировщиков, тестеров и программистов разрабатывает и презентует исходный код новой версии ядра со списком определённых изменений, далее ядро попадает в руки добровольцев, которые создают для него определённые изменения, чаще всего графические интерфейсы (KDE Plasma, к примеру) и уже на базе этих изменений командой таких же добровольцев строится дистрибутив ОС, то есть готовая система, которой можно пользоваться. Каждый из этих этапов разработки сопровождается вышеописанными действиями, к примеру для внедрения поддержки нового оборудования в ядро Linux команде Линуса Торвальдса предстоит: определиться с тем поддержку какого оборудования они хотят реализовать и принять решение о том, стоит ли разделять эту задачу на несколько этапов; создать архитектуру изменения, то есть иметь окончательное понимание того, как это реализовать; создать план разработки; написать пробную (первую) версию алгоритма поддержки; выявить все ошибки и недоработки первой версии кода и исправить их, то есть провести отладку; по завершению разработки провести финальные тесты для того, чтобы убедиться в отсутствии критических проблем; выпустить изменения в свет. Каждая компания или отдельный человек, разрабатывая свой продукт, проходит через такую последовательность, отличается лишь задача и её объём.
Источник: nsportal.ru
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. Если не знаете — есть отличный шанс погуглить его.
В целом пример работает так-же как мы видели в первом примере от 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. Своим ап-вотом за это решение — вы как-бы ставите свою подпись под этой петицией.