Программа которая переводит арабские цифры в римские

с клавиатуры вводится строка,представляющая собой правильную запись натурального числа в римской системе счисления. вывести это число в обычной десятичной системе счисления. 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. Объект и предмет исследования.
  2. Цель проекта.
  3. Задачи проекта.
  4. Актуальность темы.
  5. Гипотеза.
  1. Теоретическая часть
  1. Для чего нужны языки программирования?
  2. Как создают программные продукты.
  1. Практическая часть
  1. Как мы создавали приложение.
  2. Тестирование приложения.
  1. Заключение.
  2. Использованные источники.
  3. Приложение.

Число – одно из основных понятий математики, используемое для количественной характеристики, сравнения, нумерации объектов и их частей. Казалось бы, что может быть проще? И вправду, с самого детства нас учат не только считать, но также складывать, делить, отнимать и умножать. На свете практически нет людей, не умеющих выполнять эти действия.

С числами мы встречаемся ежедневно, на уроках математики или физики, при покупке продуктов питания или билета в кино/на любимый аттракцион. Если бы не они — мы бы никогда не слышали ни про операционные системы, ни про электронные вычислительные устройства в целом, поскольку именно точные математические расчёты помогли Чарльзу Бэббиджу создать первую вычислительную машину, ставшую прототипом современной ЭВМ.

Как перевести арабские цифры в римские?

Я уверен в том, что у вас были случаи, когда вы не понимали, что за число находится перед вами и это не удивительно, ведь как минимум непривычно, пользуясь всю жизнь арабскими числами наблюдать перед собой, к примеру, римский счет.

В жизненной ситуации, когда человек сам не в состоянии понять, что за число ему пытались донести – он пользуется специальными словарями и это абсолютно нормально, но далеко не всегда удобно. В этом случае на помощь приходят программы переводчики или же конвертеры чисел из одного вида в другой.

1.1 Объект исследования — компьютерные программы, предмет исследования- конвертер арабских чисел в римские.

1.2 Цель проекта — реализация замысла с помощью языка программирования PascalABC.NET.

Читайте также:
Какая будет программа на новый год

1.3 Задачи проекта:

  1. Найти словарь римские-арабские числа;
  2. Научиться работать с конструктором Windows Forms;
  3. Составить алгоритм выполнения программы;
  4. Провести отладку;
  5. Провести финальные тесты.

1.4 Я считаю, что такая работа является актуальной на сегодняшний день, потому что далеко не каждый человек, живущий сегодня, знает значения римских чисел большее, чем пятьдесят.

1.5 Гипотеза – возможно ли создание программы-переводчика римских чисел в арабские, с использованием языка программирования PascalABC.NET.

  1. Теоретическая часть

Начнем с того, что же такое PascalABC.NET?

PascalABC.NET — высокоуровневый язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений.

2.1. Что такое языки программирования и зачем они нужны?

Говоря простым языком, ЯП (язык программирования) – это знаковая система, предназначенная для записи компьютерных программ в понятном для человека виде.

То есть, именно языки программирования позволяют нам с вами вместо условной записи нулей и единиц в ячейки постоянной памяти компьютера видеть и задавать четкий, читаемый текст с полным пониманием того, что будет выполнено при запуске программы, написанной на нём.

На сегодняшний день выделяют два типа ЯП – высокоуровневые и низкоуровневые. К низкоуровневым относится вся группа языков ассемблера, включая промежуточный язык CIL. Высокоуровневые – все современные языки, кроме семейства ассемблера.

В чём же их отличия?

Говоря сложным языком, низкоуровневые языки программирования – языки, не имеющие абстрактной прослойки между уровнем (слоем) железа и уровнем прошивки.

Если перевести это определение на человеческий язык, то звучать оно будет так, низкоуровневые языки программирования – это такие языки программирования, которые позволяют запускать написанные на них программы без среды операционной системы, посредством прерываний BIOS ( базовая система ввода-вывода ) или операций UEFI ( Унифицированный расширяемый интерфейс встроенных микропрограмм ), тем самым получая максимально быстрый, по скорости выполнения, алгоритм.

Определение высокоуровневых языков программирования будет звучать следующим образом – языки, имеющие слои абстракции между железом и программой, представленные в виде трансляторов ( компилятора и интерпретатора ) с целью облегчения решения сложных программных задач и упрощения портирования ( адаптации под различные среды выполнения ) программного обеспечения.

Грубо говоря, высокоуровневые языки позволяют программисту писать более понятный, по сравнению с низкоуровневыми, код, при этом не думая ни о низкоуровневой реализации функций, ни о возможности его запуска на различных архитектурах, большинство необходимого уже продумано за него. Помимо этого, важным отличием языков высокого уровня является невозможность запуска алгоритма без среды ОС в случае, если для него не была создана программа ассемблер.

В связи с тем, что трансляторы устроены таким образом, что им приходится переводить высокоуровневый, понятный человеку, на низкоуровневый, понятный машине, код, теряется скорость выполнения алгоритма. Говоря грубо, один и тот же алгоритм написанный на условном NASM ( диалект ассемблера ) выполнится за четверть секунды, на С за полсекунды, на Java за одну треть секунды, а на Python же за целую секунду.

Очень часто к низкоуровневым языкам приписывают такой язык как С, однако данное мнение будет лишь частично верным, так поскольку, хоть он и является ключевым языком в сфере разработки операционных систем и драйверов к ним, он также поддерживает интерфейсы прикладного программирования (API), облегчающие жизнь тому, кто пишет код. В пример можно взять самый распространённый для разработки под ОС Windows – WinAPI, позволяющий задавать команды для отрисовки окон в среде Windows без мысли о том, а как же они вообще отрисовываются? Помимо поддержки API, С, как и любой другой высокоуровневый язык, имеет слой абстракции, но, как процедурный язык, всего один, в виде низкоуровневого языка ассемблера, таким образом более правильным определением этого языка будет выражение «Самый низкоуровневый из высокоуровневых».

Читайте также:
Программа для регулировки баланса звука на Андроид

С первого взгляда кажется, что программирование – занятие сложное, требующее огромного количества знаний и подготовки и, отчасти, так оно и есть, однако, важно понимать, что сложность зависит прямиком от задачи, которую нужно реализовать программисту.

2.2. Как создают программные продукты?

Разберёмся в этом вопросе на двух примерах, проект маленький – калькулятор, написанный на Python и проект крупный – операционная система Linux (в частных случаях GNU/Linux).

Казалось бы, что может объединять эти две совершенно разные программы? Ответ на этот вопрос, как нестранно, лежит буквально на поверхности – их объединяет алгоритм создания, ведь, если так рассуждать, то весь когда-либо написанный код создавался по примерно одинаковой схеме, отличались только масштабы и способы реализации.

Давайте разберем этот алгоритм поподробнее, для этого нам нужно полностью расписать его. Итак, для того чтобы создать программу программисту требуется:

  1. Определиться с тем, что ему нужно реализовать и иметь примерное представление о поставленной задаче.
  2. При необходимости разделить цельный проект на несколько подпрограмм.
  3. Продумать архитектуру приложения и его подпрограмм.
  4. Создать план разработки алгоритма как программы в целом, так и каждой подпрограммы, входящей в неё.
  5. Написать первую версию всего проекта или входящего в него приложения.
  6. Провести отладку написанного.
  7. Провести финальные тесты проекта или входящего в него приложения.
  8. При разделении программы на несколько подпрограмм – повторить шаги 5-7 для каждой её части и объединить всё в одно целое.

В случае простенького калькулятора один человек вполне себе способен пройти весь этот путь самостоятельно, без дополнительной помощи, однако, в случае с крупной современной операционной системой так, по понятной причине, сделать не получится и именно поэтому используется принцип разделения труда. В случае Линукса оно имеет самый глобальный масштаб. Работает это следующим образом – Линус Торвальдс, создатель и ведущий разработчик ядра Linux, вместе с командой проектировщиков, тестеров и программистов разрабатывает и презентует исходный код новой версии ядра со списком определённых изменений, далее ядро попадает в руки добровольцев, которые создают для него определённые изменения, чаще всего графические интерфейсы (KDE Plasma, к примеру) и уже на базе этих изменений командой таких же добровольцев строится дистрибутив ОС, то есть готовая система, которой можно пользоваться. Каждый из этих этапов разработки сопровождается вышеописанными действиями, к примеру для внедрения поддержки нового оборудования в ядро Linux команде Линуса Торвальдса предстоит: определиться с тем поддержку какого оборудования они хотят реализовать и принять решение о том, стоит ли разделять эту задачу на несколько этапов; создать архитектуру изменения, то есть иметь окончательное понимание того, как это реализовать; создать план разработки; написать пробную (первую) версию алгоритма поддержки; выявить все ошибки и недоработки первой версии кода и исправить их, то есть провести отладку; по завершению разработки провести финальные тесты для того, чтобы убедиться в отсутствии критических проблем; выпустить изменения в свет. Каждая компания или отдельный человек, разрабатывая свой продукт, проходит через такую последовательность, отличается лишь задача и её объём.

Источник: nsportal.ru

0b1001 путей решения задачи перевода чисел в римскую запись

image

Привет друзья. Вот вам простенькая задачка. Как бы вы перевели арабские числа в римские используя 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. Своим ап-вотом за это решение — вы как-бы ставите свою подпись под этой петицией.

«Достаточно элегантно, но не очень по питоновски» от nathan.l.cook

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru