Описан процесс создания и программный код программы-конвертера из арабских чисел в римские.
Вложение | Размер |
---|---|
![]() | 385.91 КБ |
![]() | 1.2 МБ |
Бюджетное образовательное учреждение г. Омска "Средняя
общеобразовательная школа №23".
Информатика.
Реализация приложения
"Конвертер арабских чисел в римские"
с использованием языка программирования высокого уровня PascalABC.Net.
Автор работы: Чугунов Данил
Александрович, 9Б класс.
Руководитель работы: Барбашев Игорь
Анатольевич, учитель информатики.
Омск, 2021
План:
Число – одно из основных понятий математики, используемое для количественной характеристики, сравнения, нумерации объектов и их частей. Казалось бы, что может быть проще? И вправду, с самого детства нас учат не только считать, но также складывать, делить, отнимать и умножать. На свете практически нет людей, не умеющих выполнять эти действия.
С числами мы встречаемся ежедневно, на уроках математики или физики, при покупке продуктов питания или билета в кино/на любимый аттракцион. Если бы не они - мы бы никогда не слышали ни про операционные системы, ни про электронные вычислительные устройства в целом, поскольку именно точные математические расчёты помогли Чарльзу Бэббиджу создать первую вычислительную машину, ставшую прототипом современной ЭВМ.
Я уверен в том, что у вас были случаи, когда вы не понимали, что за число находится перед вами и это не удивительно, ведь как минимум непривычно, пользуясь всю жизнь арабскими числами наблюдать перед собой, к примеру, римский счет.
В жизненной ситуации, когда человек сам не в состоянии понять, что за число ему пытались донести – он пользуется специальными словарями и это абсолютно нормально, но далеко не всегда удобно. В этом случае на помощь приходят программы переводчики или же конвертеры чисел из одного вида в другой.
1.1 Объект исследования - компьютерные программы, предмет исследования- конвертер арабских чисел в римские.
1.2 Цель проекта - реализация замысла с помощью языка программирования PascalABC.NET.
1.3 Задачи проекта:
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).
Казалось бы, что может объединять эти две совершенно разные программы? Ответ на этот вопрос, как нестранно, лежит буквально на поверхности – их объединяет алгоритм создания, ведь, если так рассуждать, то весь когда-либо написанный код создавался по примерно одинаковой схеме, отличались только масштабы и способы реализации.
Давайте разберем этот алгоритм поподробнее, для этого нам нужно полностью расписать его. Итак, для того чтобы создать программу программисту требуется:
В случае простенького калькулятора один человек вполне себе способен пройти весь этот путь самостоятельно, без дополнительной помощи, однако, в случае с крупной современной операционной системой так, по понятной причине, сделать не получится и именно поэтому используется принцип разделения труда. В случае Линукса оно имеет самый глобальный масштаб. Работает это следующим образом – Линус Торвальдс, создатель и ведущий разработчик ядра Linux, вместе с командой проектировщиков, тестеров и программистов разрабатывает и презентует исходный код новой версии ядра со списком определённых изменений, далее ядро попадает в руки добровольцев, которые создают для него определённые изменения, чаще всего графические интерфейсы (KDE Plasma, к примеру) и уже на базе этих изменений командой таких же добровольцев строится дистрибутив ОС, то есть готовая система, которой можно пользоваться. Каждый из этих этапов разработки сопровождается вышеописанными действиями, к примеру для внедрения поддержки нового оборудования в ядро Linux команде Линуса Торвальдса предстоит: определиться с тем поддержку какого оборудования они хотят реализовать и принять решение о том, стоит ли разделять эту задачу на несколько этапов; создать архитектуру изменения, то есть иметь окончательное понимание того, как это реализовать; создать план разработки; написать пробную (первую) версию алгоритма поддержки; выявить все ошибки и недоработки первой версии кода и исправить их, то есть провести отладку; по завершению разработки провести финальные тесты для того, чтобы убедиться в отсутствии критических проблем; выпустить изменения в свет. Каждая компания или отдельный человек, разрабатывая свой продукт, проходит через такую последовательность, отличается лишь задача и её объём.
Теперь от слов перейдём к делу, начнём выполнять поставленную задачу.
3.1. Как мы создавали приложение «Конвертер арабских чисел в римские» с использованием языка программирования высокого уровня PascalABC.Net?
Первое через что нам нужно было пройти – придумать что именно придется реализовывать. Идея переводчика пришла ко мне на одном из уроков истории, когда мой одноклассник не смог прочитать число 18, записанное римским счётом. Эта задумка была одобрена без лишних размышлений, теперь стоял другой вопрос, как именно это можно реализовать?
Так, поскольку римским счётом я и мой учитель владеем далеко не в идеале, было решено ограничиться тем, что известно, добавив к этому лишь пару значений из словаря, поэтому числа для перевода ограничены 1-3999. Начался поиск достоверного словаря арабские-римские числа, особых трудностей это действие не вызвало.
Следующим этапом нужно было определиться с примерным алгоритмом действия программы, а также её пользовательским интерфейсом – способом взаимодействия пользователя и программы. Пользовательский интерфейс бывает текстовый и графический. Текстовый пользовательский интерфейс (ТПИ) использует для операций ввода-вывода и представления информации исключительно набор буквенно-цифровых символов, а также элементов псевдографики – символов, отображающие графические примитивы. ТПИ также называют интерфейсом командной строки. Графический пользовательский интерфейс (ГПИ) основан на представлении всех доступных пользователю объектов в виде графических компонентов экрана таких как кнопки, значки, изображения и т.д. ГПИ является более современным типом, чем ТПИ и лежит в основе ОС Microsoft Windows. Именно он показался мне более приятным и удобным для программы конвертора. Примерный алгоритм был продуман достаточно быстро и оказался довольно эффективным. Достаточно было лишь создать словарь для перевода чисел до 1000; организовать ввод необходимого арабского числа; задать функцию, которая будет получать на вход введенное число и переводить все его арабские части в аналогичные римские до тех пор, пока число не обработается полностью, после чего возвращать результат выполнения.
План разработки был следующий:
Как мне рассказал мой учитель информатики в языке программирования PascalABC.Net есть несколько способов реализации графического интерфейса такие как GraphABC и 3DGraph, но стандартной библиотекой является конструктор WindowsForms, его я и решил использовать из-за простоты создания программ с его использованием.
Спустя какое-то время был готов макет графического интерфейса с необходимыми кнопками, полями ввода-вывода и списком операций.
Дальше словарь. Необходимые числовые значения на двух видах счёта уже были выписаны на отдельный листок, осталось лишь внести их в программу с помощью встроенной функции словаря.
Функция переводчик работает следующим образом – при её вызове на вход посылается арабское число; уже внутри впервые объявляется и при каждом вызове отчищается переменная, хранящая римское число; с помощью цикла foreach осуществляется выполнение функции для каждого необходимого элемента словаря; с помощью цикла while обрабатываются все части арабского числа, полученного на вход; обработка происходит следующим образом – переменная римского числа дополняется значением словаря, соответствующему полученному арабскому числу, после чего обработанная часть удаляется из переменной с арабскими числами; результатом функция возвращает переменную, хранящую итоговое римское число.
Взаимосвязь графического интерфейса и необходимого алгоритма происходит посредством цифрового поля, текстового виджета, списка и кнопки, по нажатии которой переменной n задается текущее значение цифрового поля; переменная s вызывает функцию перевода и принимает её результат; в текстовый виджет выводится значение переменной s; в список операций заносятся значения переменной n и s и остаются там до перезапуска программы.
Настало время первого теста, он оказался удачным и единственной ошибкой было отсутствие надписи «Римское число:» в текстовом виджете после вывода значения переменной s, но я быстро понял в чём дело и исправил этот недочет, выводя на виджет не только нужную переменную, но и вышеупомянутый текст.
Финальный тест был пройден успешно, без этой погрешности.
3.2. Теперь же проведём тестирование в рамках этого текста.
Программа запускается и отображается правильно, это уже отлично.
Попробуем перевести число 19. Как видим, всё работает быстро и точно.
Тоже самое будет с числом 1000.
Максимальным же числом для вывода является следующее значение.
Итак, подводя свою работу к концу, я понял, что данная программа может оказаться крайне полезной во многих сценариях использования. Приложение «Перевод арабских чисел в римские» является быстрым и вычислительно точным, работает без каких-либо пререканий и ошибок.
Разрабатывая его, я научился работать с конструктором WindowsForms, стал лучше разбираться в римском счёте и смог доказать гипотезу о возможности воссоздания программы переводчика римских чисел в арабские, с использованием языка программирования PascalABC.NET.
Это был интересный опыт, я надеюсь, что в ближайшем будущем смогу написать ещё что-нибудь действительно полезное.
http://pascalabc.net/downloads/pabcnethelp/index.htm
http://graecolatini.bsu.by/htm-different/num-converter-roman.htm
https://www.youtube.com/watch?v=t4n_qkk7bkY
unit Unit1; // библиотека для разделения программы на модули
interface // раздел публичных описаний
uses System, System.Windows.Forms; // подключение библиотек. System - низкоуровневые подпрограммы, System.Windows.Forms - окна
type // раздел классов и процедур, использующихся в программе
frmRome = class(Form)// указание и создание класса приложения
procedure Form1_Load(sender: Object; e: EventArgs); // создание процедуры выполняемой при загрузке окна программы
procedure btnTranslate_Click(sender: Object; e: EventArgs); // создание процедуры выполняемой при нажатии кнопки
{$region FormDesigner}
internal // присвоение айди к элементам
{$resource Unit1.frmRome.resources}
lstRes: ListBox; // список выполненных операций
lblRome: &Label; // текст римского числа
btnTranslate: Button; // кнопка перевода
udNum: NumericUpDown; // виджет ввода арабского числа
label1: &Label; // текст с подсказкой на ввод текста
{$include Unit1.frmRome.inc}
{$endregion FormDesigner}
public constructor; // инициализация КОНСТРУКТОРА
begin
InitializeComponent;
end;
end;
var RNum := new Dictionary<integer, string>(14); //создание словаря перевода
implementation // приватные описания
procedure frmRome.Form1_Load(sender: Object; e: EventArgs); // процедура при загрузке окна
begin
//заполняем словарь римскими числами:
RNum.Add(1000, 'M');
RNum.Add(900, 'CM');
RNum.Add(500, 'D');
RNum.Add(400, 'CD');
RNum.Add(100, 'C');
RNum.Add(90, 'XC');
RNum.Add(50, 'L');
RNum.Add(40, 'XL');
RNum.Add(10, 'X');
RNum.Add(9, 'IX');
RNum.Add(5, 'V');
RNum.Add(4, 'IV');
RNum.Add(1, 'I');
end;
//Функция перевода, на вход принимает арабское числовое значение
function Translate(arab: integer): string;
begin
var sRome := ''; // объявление и обнуление переменной римского числа
foreach var num in RNum.Keys do // выполнение операции для каждого необходимого элемента словаря
while (arab >= num) do // пока не обработаются все арабские числа
begin
sRome += RNum[num]; // присвоение переменной римской цифры значение из словаря
arab -= num; // по завершению обработки убрать из обрабатываемых арабских чисел только что обработанное число
end;
Result := sRome; // возвращение результата
end;
procedure frmRome.btnTranslate_Click(sender: Object; e: EventArgs); // процедура в случае нажатия кнопки
begin
var n := (integer)(udNum.Value); // присвоение переменной n значение арабского числа
var s := Translate(n); // вызов функции и возврат результата в переменную s
lblRome.Text := 'Римское число: ' + s; // вывод римского числа на экран в соответствующем поле
lstRes.Items.Add(n.ToString() + ' -> ' + s); // добавление только что выполненной операции в список операций
end;
end.
Слайд 1
Информатика. Реализация приложения «Конвертер арабских чисел в римские» с использованием языка программирования высокого уровня PascalABC.Net . Бюджетное образовательное учреждение г. Омска "Средняя общеобразовательная школа №23". Выполнил ученик 9Б класса: Чугунов Д.А Преподаватель информатики: Барбашев И.А Омск, 2021Слайд 2
Введение Число – одно из основных понятий математики, используемое для количественной характеристики, сравнения, нумерации объектов и их частей. С ними мы встречаемся ежедневно, на уроках математики или физики, при покупке продуктов питания или билета в кино. Я уверен в том, что у вас были случаи, когда вы не понимали, что за число находится перед вами и это не удивительно, ведь как минимум непривычно, пользуясь всю жизнь арабскими числами наблюдать перед собой, к примеру, римский счет. В жизненной ситуации, когда человек сам не в состоянии понять, что за число ему пытались донести – он пользуется специальными словарями и это абсолютно нормально, но далеко не всегда удобно. В этом случае на помощь приходят программы переводчики или же конвертеры чисел из одного вида в другой.
Слайд 3
Цели и задачи проекта Главной целью проекта является написание программы переводчика чисел с арабского счёта на римский на языке программирования PascalABC.Net . Достижение указанное цели осуществляется путём решения следующих задач: Найти словарь римские-арабские числа; Научиться работать с конструктором Windows Forms ; Составить алгоритм выполнения программы ; Провести отладку ; Провести финальные тесты.
Слайд 4
Теоретическая часть PascalABC.NET — высокоуровневый язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. ЯП (язык программирования) – это знаковая система, предназначенная для записи компьютерных программ в понятном для человека виде. Низкоуровневые языки программирования – языки, не имеющие абстрактной прослойки между уровнем железа и уровнем прошивки. Высокоуровневые языки программирования – языки, имеющие слои абстракции между железом и программой, представленные в виде трансляторов с целью облегчения решения сложных программных задач и упрощения портирования программного обеспечения.
Слайд 5
Теоретическая часть Алгоритм создания программы: Определиться с тем, что ему нужно реализовать и иметь примерное представление о поставленной задаче. При необходимости разделить цельный проект на несколько подпрограмм . Продумать архитектуру приложения и его подпрограмм. Создать план разработки алгоритма как программы в целом, так и каждой подпрограммы, входящей в неё. Написать первую версию всего проекта или входящего в него приложения . Провести отладку написанного. Провести финальные тесты проекта или входящего в него приложения . При разделении программы на несколько подпрограмм повторить шаги 5-7 для каждой её части и объединить всё в одно целое
Слайд 6
Практическая часть П ользовательский интерфейс – способ взаимодействия пользователя и программы. Текстовый пользовательский интерфейс (интерфейс командной строки) использует для операций ввода-вывода и представления информации исключительно набор буквенно-цифровых символов, а также элементов псевдографики – символов, отображающие графические примитивы. Графический пользовательский интерфейс (ГПИ) основан на представлении всех доступных пользователю объектов в виде графических компонентов экрана таких как кнопки, значки, изображения и т.д.
Слайд 7
ГПИ ТПИ
Слайд 8
Практическая часть Что требовалось для примерного алгоритма программы: С оздать словарь для перевода чисел до 1000 ; О рганизовать ввод необходимого арабского числа ; Задать функцию, которая будет получать на вход введенное число и переводить все его арабские части в аналогичные римские . План разработки: Узнать, как можно реализовать графический интерфейс на языке программирования PascalABC . Net ; Создать графический интерфейс ; Создать словарь арабское-римское число до 1000; Написать функцию переводчик ; Объединить графический интерфейс и функцию.
Слайд 9
Алгоритм функции-переводчика
Слайд 10
Взаимосвязь ГПИ и алгоритма
Слайд 15
Заключение Итак, подводя свою работу к концу, я понял, что данная программа может оказаться крайне полезной во многих сценариях использования. Приложение «Перевод арабских чисел в римские» является быстрым и вычислительно точным, работает без каких-либо пререканий и ошибок. Разрабатывая его, я научился работать с конструктором WindowsForms , стал лучше разбираться в римском счёте и смог доказать гипотезу о возможности воссоздания программы переводчика римских чисел в арабские, с использованием языка программирования PascalABC . NET . Это был интересный опыт, я надеюсь, что в ближайшем будущем смогу написать ещё что-нибудь действительно полезное.
Лиса и волк
Машенька - ветреные косы
Рисуем ананас акварелью
Сказка "Дятел, заяц и медведь"
Весёлая кукушка