Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Разработка модуля для выполнения операций с натуральными числами в 16-ричной системе счисления

Содержание:

Введение

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

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

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

Цель данной курсовой работы заключается в разработке модуля для выполнения операций с натуральными числами в 16-ричной системе счисления.

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

Для достижения поставленной цели необходимо решить следующие задачи:

  • Исследование предметной области
  • Выбор средств разработки
  • Разработка пользовательского интерфейса
  • Разработка логической составляющей

Исследование предметной области

Системы счисления

Система счисления – это совокупность правил записи чисел с помощью определенного набора символов.[3]

Общепринятой позиционной системой счисления является десятичная. Причина, по которой она оказалась общепринятой, совсем не математического характера. Десять пальцев рук — вот тот первоначальный аппарат для счета, которым человек пользовался с доисторических времен.

Исторически десятичная система счисления сложилась и развивалась в Индии. Европейцы заимствовали индийскую систему счисления у арабов, назвав ее арабской. Это исторически неправильное название удерживается и поныне. Возникновение и развитие десятичной системы счисления явилось одним из важнейших достижений человеческой мысли (наряду с появлением письменности).[4]

Существуют непозиционные и позиционные системы счисления. В непозиционных системах счисления вес цифры не зависит от позиции, которую она занимает в числе. Так, например, в римской системе счисления в числе XXXII (тридцать два) вес цифры X в любой позиции равен просто десяти. В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее позиции в последовательности цифр, изображающих число.

Любая позиционная система характеризуется своим основанием. Основание позиционной системы счисления – это количество различных знаков или символов, используемых для изображения цифр в данной системе.[5]

Основанием подобной системы может быть любое натуральное число g, большее 1; т.е. может быть двоичная, троичная, 21-ричная СС и т.д.[6] Основание позиционной системы счисления обозначается так: 10112, 2810, 103g.

В общем случае любое число N в позиционной системе счисления можно представить в следующем виде:

Ng = ak*pk + ak-1*pk-1 + … + a1*p1 + a0*p0 + a-1*p-1 + … + a-n*p-n

Где g – основание системы счисления; k+1 – количество разрядов в целой части числа; n – количество разрядов в дробной части числа. Нижние индексы определяют местоположение цифры в числе (разряд):

  • положительные значения индексов – для целой части числа;
  • отрицательные значения индексов – для дробной части числа.[7]

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

Представление данных в компьютерах

Объектом хранения, передачи и переработки в компьютере является информация, представленная в виде данных — чисел и текста. Это качественно различные виды данных, но принципы работы компьютера и с теми, и с другими довольно сходные. Суть в том, что для представления информации в компьютере используется некоторый фиксированный набор символов.

Каждый символ такого набора представляется определенным числом (кодом), причем в разных типах ЭВМ используются разные способы кодирования, т.е. одним и тем же символам сопоставляются различные числовые коды. [9]

Процессор компьютера работает с данными, представленными в двоичной системе счисления, поэтому двоичная СС для нас представляет наибольший интерес. В этой системе для записи чисел используются только две цифры: 0 и 1.[10]

Использование двоичной системы счисления позволило упростить создание логических схем и методы хранения данных.

На таблице 1 изображено сопоставление десятичных натуральных чисел с их записью в двоичной системе счисления.

Таблица 1

Десятичная система

Двоичная система

0

0

1

1

2

10

3

11

4

100

5

101

6

110

7

111

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

Для целых чисел, как правило, используется не менее одного байта (8 бит), так как он является минимальным количеством информации, на которое может ссылаться компьютер, обращаясь к ячейкам памяти. Если нужно чтобы число могло принимать негативные значения, то для определения знака используется старший бит. При этом, хоть и общее количество возможных значений не изменяется, максимально возможное значение числа по модулю уменьшается вдвое (таблица 2).

Таблица 2

Размер (байт)

Тип

Диапазон значений

1

Неотрицательное

0 … 255

1

Со знаком

-128 … 127

2

Неотрицательное

0 … 65535

2

Со знаком

-32768 … 32767

4

Неотрицательное

0 … 4294967295

4

Со знаком

-2147483648 … 2147683647

Целые числа используются и для кодирования символов текста. На таблице 3 изображен пример текста, записанного в кодировке UTF-8, в которой для каждого символа отдается 8 бит.

Таблица 3

Текст

Двоичная запись в UTF-8

Text

01010100 01100101 01111000 01110100

Для представления вещественных (дробных) чисел, используется более комплексный метод.

Такие числа хранятся в памяти компьютера в виде двух частей. Одна часть представляет значение, а другая – масштабный коэффициент, который увеличивает или уменьшает значение. Рассмотрим следующую аналогию. Предположим, что есть два числа: 34.1245 и 34124.5. Они идентичны друг другу за исключением масштабного коэффициента. Первое значение можно представить как 0.341245 (базовое значение) и 100 (масштабный коэффициент). Второе значение можно представить как 0.341245 (такое же базовое значение) и 100000 (больший масштабный коэффициент).

Масштабный коэффициент предназначен для перемещения десятичной точки, откуда и пошел термин плавающая точка.[11]

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

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

Таблица 4

Размер (байт)

Диапазон значений

4

3.4 * 10-38 … 3.4 * 1038

8

1.7 * 10-308 … 1.7 * 10308

10

3.4 * 10-4932 … 3.4 * 104932

Использование шестнадцатеричного представления

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

Таблица 5

Двоичная запись

Шестнадцатеричная запись

01010100 01100101 01111000 01110100

54 65 78 74

Любой hex[12]-редактор позволяет исследовать и модифицировать файл на низком уровне, оперируя с битами и байтами. Содержание файла представляется в шестнадцатеричной форме (рисунок 1). Это базовый функционал. Однако некоторые редакторы предлагают пользователям намного большее, позволяя разобраться, собственно, что есть что в том непонятном наборе символов, который появляется при открытии файла. Для этого автоматически извлекаются ASCII и Unicode строки, осуществляется поиск известных паттернов, выполняется распознавание основных структур данных и многое другое.[13]

Рисунок 1

Картинки по запросу hex editor

Шестнадцатеричная система используется и при кодирования цвета в так называемый «Hex код» в модели RGB[14], в котором цвет представлен тремя байтами для каждого из трех основных цветов (таблица 6).

Таблица 6

Цвет

Hex код

Красный

FF0000

Желтый

FFFF00

Белый

FFFFFF

Серый

808080

Черный

000000

Травяной

5DA130

Операции с натуральными числами

Понятие «натуральное число» не совсем неоднозначно. В математике существует как минимум два определения множества натуральных чисел:

  • Числа, возникающие при подсчете (нумерации) объектов: 1, 2, 3 и т.д. В качестве примера подойдет фраза “Едем на третий этаж”. Область определения данного множества начинается с единицы, и уходит в плюс-бесконечность. Принято обозначать символом N (от лат. naturalis – естественный).
  • Числа, используемые при обозначении количества однородных объектов: 0, 1, 2, 3 и т.д. В качестве примера подойдет фраза “На столе лежат шесть яблок”. Здесь область определения дополняется нулем. Обозначается N0 или Z0.

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

  • Сложение
  • Умножение
  • Возведение в степень

Дополнительно рассматривают еще две операции. С формальной точки зрения они не являются операциями над натуральными числами, так как не определены для всех пар чисел (иногда существуют, иногда нет), поэтому необходимо соблюдать особые правила:

  • Вычитание – уменьшаемое число должно быть больше или равно вычитаемому;
  • Деление – делимое число должно делиться без остатка.

Выбор средств разработки

Сравнение языков программирования

Исходя из требований, представленных к разрабатываемому модулю (приложение 1, пункт 3 технического задания), для сравнения будут выбраны языки, используя которые можно достичь кроссплатформенной работы с минимальными изменениями кода программы под конкретную платформу и с минимальными затратами на отладку модуля в различных средах выполнения.[15]

Говоря о кроссплатформенности, одним из первых языков, что приходят на ум программиста, является Java. Это объектно-ориентированный язык и одноименная платформа для выполнения программ, написанных на нем. На момент написания данной работы, Java является одним из самых востребованных языков. Одна из основных причин успеха Java как системы ПО заключается в ее стандартизации. Это означает, что Java имеет спецификации, описывающие как должна работать платформа. Стандартизация позволяет различным производителям и участникам разнообразных проектов создавать реализации, которые теоретически должны работать одинаково. Такие спецификации не гарантируют, насколько высока будет производительность конкретной реализации одной конкретной задачи, но вполне гарантируют правильность результатов.[16]

Java активно используется для создания как настольных (Windows, Linux), так и мобильных приложений, в том числе и под платформу Android.

Однако разработка на Java под iOS – очень сомнительная идея. Во-первых, для разработки под данную операционную систему придется обзавестись Apple Mac. Во-вторых, возможность выполнять Java под iOS конечно есть, благодаря наличию виртуальных машин, но в любом случае придется изучать Objective C или Swift, да и удобства и гибкости при использовании такой связки будет не хватать.

Следующим кандидатом будет язык JavaScript. Это интерпретируемый язык программирования с объектно-ориентированными возможностями. В отличии от компилируемых[17] языков, где код программы заранее переводится в низкоуровневые команды и сохраняется в виде исполняемого файла, код JavaScript исполняется «на лету» программой интерпретатором.

Как правило, код JavaScript встраивается в HTML[18]-документ, а в роли интерпретатора выступает веб-браузер. JavaScript предоставляет широкие возможности по взаимодействию с пользователем: изменение содержимого документа, обработка нажатий клавиш, считывание позиции курсора, определение координат устройства и т.д.

Программу, написанную на языке JavaScript, можно запустить в любом современном веб-браузере, т.е. и на любом современном персональном компьютере или смартфоне. Недостатком является относительно низкая скорость работы по сравнению с заранее скомпилированными кодом. В редких случаях различия в реализации интерпретатора JavaScript в разных браузерах может привести к несоответствиям в работе программы.

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

Еще одним языком программирования, позволяющим создавать кроссплатформенные решения является PHP. PHP, как и JavaScript, также является интерпретируемым языком программирования. Однако код программы выполняется на стороне веб-сервера[19], а не на устройстве пользователя.

Пример работы PHP-приложения выглядит следующим образом: используя элементы управления и ввода, размещенные в форме в HTML-документе, либо используя адресную строку веб-браузера, пользователь создает http-запрос, содержащий введенные им данные. Запрос передается веб-серверу, тот в свою очередь обрабатывает полученные данные, производит необходимые вычисления, и генерирует результат. Результатом выполнения как правило является готовый HTML-документ, который отправляется в ответ пользователю, создавшему запрос.

PHP используется для создания крупных информационных систем в основе которых лежит работа с базами данных, например форумы или интернет-магазины. Такое решение подходит для вычислительных систем, баз знаний.

PHP имеет ряд особенностей, которые в данном случае можно считать недостатками. Во-первых, необходимо активное интернет-соединение между пользователем и сервером. Во-вторых, при большом количестве пользователей, нагрузка на сервер вырастает. Если количество обращений к серверу превышает количество, которое он способен обработать, сервер начинает работать нестабильно, и может не справиться с наплывом запросов. В таких случаях необходимо искать использовать более производительное (а соответственно и дорогое) аппаратное обеспечение.

Используя информацию выше, подведем итоги, и перечислим главные особенности при использования каждого из языков в небольшой таблице (таблица 5):

Таблица 7

Особенность

Java

JavaScript

PHP

Нет платформо-зависимого кода

-

+

+

Легко разворачивать продукт на разных платформах

-

+

+

Легко отлаживать продукт

-

+

-

Не требуются дополнительные вычислительные мощности

+

+

-

Автономная работа

+

+

-

Учитывая значительно бо́льший объем работ при реализации программы используя Java, а также тот факт, что для реализации на PHP необходимо разворачивать web-сервер для связи с пользователем, логичнее всего будет использовать JavaScript.

Выбор среды разработки

Разработка модуля происходит на компьютере с операционной системой Windows 10. Отладка модуля будет производиться на нем же, а также на мобильном телефоне с операционной системой Android 4.4.2.

Для таких небольших проектов как этот, да и для большинства подобных проектов в целом, использование специализированных сред разработки будет излишеством. Поэтому для написания программного кода будет использоваться текстовый редактор с подсветкой синтаксиса. На данный момент самыми популярными из них являются:

  • Notepad++. Весьма быстро работает, обладает достаточным функционалом. Долгое время был очень популярен в качестве редактора для web-разработки. Сейчас его вытесняют более современные редакторы. Доступен только на Windows.
  • Sublime Text. Более удобен в использовании, функционален и достаточно быстр в работе. Имеется возможность расширять функционал с помощью плагинов и тем оформления, под них выделен целый репозиторий. Обновления выпускаются достаточно редко, наиболее актуальная на данный момент версия до сих пор находится в стадии beta. Доступен на Windows, Linux и MacOS.
  • Atom. Наименее производительный при работе с большими файлами, потребляет значительно больше ресурсов чем конкуренты. Однако отличается широчайшим функционалом. Активно развивается и улучшается сообществом разработчиков. Благодаря гибкой системе плагинов, редактор можно приспособить практически под любую задачу. Доступен на Windows, Linux и MacOS.

Notepad++ выглядит устаревшим, и ему не хватает гибкости. А выбор между Sublime Text и Atom зависит в основном от личных предпочтений и привычки, нежели от функционала: в обоих редакторах широкий набор функций. Но все же, Atom развивается гораздо активнее и имеет крепкое подспорье в виде большой команды разработчиков. Благодаря им, редактор и его компоненты будут оставаться актуальными на протяжении долгого времени. Именно это и располагает к выбору.

Для отладки программного кода модуля будет использован кроссплатформенный web-браузер Google Chrome. Он разработан на основе свободного браузера Chromium, движка отображения web-страниц Blink и интерпретатора JavaScript V8.

Google Chrome является самым популярным браузером на данный момент, и уже не первый год возглавляет списки самых распространенных браузеров[20]. Он заслужил всеобщее признание благодаря своей быстрой работе и отличной поддержке стандартов.

Кроме Google Chrome, движок Blink и интерпретатор V8 используются в следующих web-браузерах:

  • Safari (входит в состав операционных систем iOS и MacOS)
  • Яндекс.Браузер
  • Opera (до 2013 года использовался движок Presto)
  • Vivaldi

Не стоит обделять вниманием и следующие браузеры:

  • Mozilla Firefox (движок Gecko, второй по популярности на 2016 год20)
  • Microsoft Internet Explorer (движок Trident, разработка прекращена)
  • Microsoft Edge (движок Spartan)

Для корректной работы модуля во всех браузерах следует обходить использование функций языка JavaScript, специфичных для какого-то отдельного движка и стоит придерживаться информации о поддерживаемых различными браузерами стандартах и функциях. Про поддержку технологии тем или иным движком можно прочитать на специализированных веб-ресурсах[21],[22].

Итог выбора средств разработки

Список программных и аппаратных средств, которые используемые при разработке модуля выглядит следующим образом:

  • Персональный компьютер со следующими характеристиками:
    • Операционная система: Microsoft Windows 10 Professional
    • Системная плата: Gigabyte GA-Z170-Gaming K3
    • Чипсет:
      • Северный мост: Intel Skylake-S IMC
      • Южный мост: Intel Sunrise Point Z170
    • Центральный процессор: Intel Core i5-6600K Skylake
    • Оперативная память: Corsair 8 ГБ DDR4 SDRAM
    • Графический процессор: ASUS GeForce GTX 550 Ti
    • Накопители:
      • OCZ VERTEX 460A 240 ГБ
      • Western Digital Caviar Blue 1 ТБ
    • Сетевой адаптер: e2200 Gigabit Ethernet Controller
    • Периферийные устройства:
      • Монитор: Samsung SyncMaster 2333sw 1920x1080
      • Мышь: A4Tech A9
      • Клавиатура: Logitech Wave Keyboard
  • Мобильный телефон со следующими характеристиками:
    • Операционная система: Android 4.4.2
    • Чипсет:
      • Центральный процессор: Samsung Exynos 3 Quad 3470
      • Графический процессор: Mali-400 MP4
      • Модуль связи: Exynos ModAP
    • Оперативная память: 1.5 ГБ
    • Дисплей: Сенсорный 4,5" 720 x 1280
    • Накопитель: 16 ГБ
  • Текстовый редактор: Atom 1.13.0
  • Web-браузер: Google Chrome 55.0.2883.87

Разработка программного модуля

Выбор концепции работы с модулем

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

  • Инфиксный калькулятор с регистрами. Инфиксная форма записи математических и логических выражений предполагает, что операторы будут располагаться между операндами, т.е. аргументами операции (например, 2 * 3 + 4). Каждая операция выполняется поочередно, по мере ввода выражения. Подобная схема работы знакома нам по обычным электронным калькуляторам.
  • Строковый калькулятор. Программа принимает выражение, записанное в виде строки, и затем преобразует его в более простой для разбора вид записи, интерпретирует и вычисляет. Как правило, выражение транслируется в обратную польскую запись. В этой форме записи операторы располагаются после подконтрольных им операндов (например, 2 3 * 4 +). Строковые калькуляторы удобнее в использовании, так как не принуждают вводить операции по очереди, и все выражение можно записать сразу, изменяя по мере необходимости.

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

Разработка пользовательского интерфейса

Разработка пользовательского интерфейса JavaScript-приложения начинается с разметки объектов управления в HTML-документе. На данном этапе практически не затрагивается графический дизайн и удобство пользования интерфейсом. Разметка отвечает лишь за смысловое содержание документа: какие объекты в нем присутствуют, за что они отвечают, и в какой последовательности они расположены в документе.

Простейший HTML-документ выглядит следующим образом:

<html>

<head>

<title>Название</title>

</head>

<body>

<p>Тело документа</p>

</body>

</html>

HTML-документ по сути является обычным текстовым файлом, содержание которого составляют «теги» объектов, определяющих его структуру. Тег представляет собой ключевое слово, заключенное в угловые скобки.

В зависимости от типа объекта, тег для его размещения может быть:

  • Одинарным (например, <br> - перенос строки)
  • Парным (например, <h1> … </h1> - обозначение заголовка)

Сам документ объявляется тегом <html>…</html>, затем разделяется на две части – заголовок и тело. Заголовок объявляется тегом <head>…</head> и содержит в себе информацию о документе, используемой кодировке, подключенных скриптах и таблицах стилей, информацию для поисковых систем и другие данные, не относящиеся к структуре и контенту. Тело страницы объявляется тегом <body>…</body>, и содержит информацию о структуре документа и его контенте, т.е. ту информацию, которую должен увидеть пользователь.

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

Теги также могут иметь атрибуты, меняющие их поведение при отображении браузером. Атрибуты прописываются в открывающем теге, между угловыми скобками и после названия:

  • <input type="textbox"> - создаст текстовое поле
  • <input type="checkbox"> - создаст чекбокс[23]

Некоторые атрибуты позволяют менять внешний вид объектов. Хотя это скорее рудиментарный инструмент, оставшийся со времен, когда разметка документа отвечала еще и за его стиль:

  • <html bgcolor="black" text="white"> … </html> - поменяет цвет фона документа на черный, а цвет текста на белый

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

Теперь нужно определить, какие элементы управления должны присутствовать в пользовательском интерфейсе модуля, и с помощью каких объектов их можно реализовать:

  • Дисплей. Его роль будет играть объект «текстовое поле» с отключенной возможностью ввода текста пользователем. Размещается с помощью тега <input type="textbox">;
  • Кнопки. Размещаются с помощью тега <button> … </button>.

Очень полезной окажется возможность переключаться в другую систему счисления (например, двоичную) и переводить в нее результат. Для реализации такого переключателя подойдет объект «выпадающее меню» размещаемое с помощью тега <select> … </select>.

Если абстрагироваться от реальной структуры документа, итоговый результат разметки можно представить в виде дерева объектов:

  • Тело HTML-документа
    • Блочный элемент (контейнер)
      • Текстовое поле
      • Кнопки для ввода цифр
      • Кнопки для выполнения операций
      • Переключатель системы счисления

Подобная структура проста для понимания и с ней легко работать. Важно понимать, что простота не является минусом, и что важно стараться её соблюдать, для обеспечения удобства дальнейшей поддержки разрабатываемого продукта (даже такого простого).

Открыв получившийся HTML документ в web-браузере, можно наблюдать невзрачный, и не слишком дружественный набор элементов управления (рисунок 2). Подобный интерфейс нельзя назвать законченным, и выглядит он мягко говоря плохо. Но большего от одного лишь HTML не добиться, его задача здесь выполнена.

Рисунок 2

Далее в дело вступают каскадные таблицы стилей – CSS. Этот формальный язык используется для описания стиля документа и составляющих его объектов: отступы, положение, размеры, цвета, анимацию и прочие свойства можно изменить с помощью определенного набора правил.

HTML позволяет размещать CSS правила несколькими способами:

  • в головной части или в теле документа внутри тега парного <style>;
  • в теле документа, в открывающем теге конкретного объекта;
  • в виде отдельного файла, подключаемого с помощью тега <link>, размещенного в головной части документа.

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

Каждое правило CSS записываются следующим образом:

селектор {

свойство: значение;

свойство: значение

}

селектор {

свойство: значение;

свойство: значение

}

Как видно из примера, правило состоит из двух основных частей:

  • Селектор. Определяет на какие объекты распространяется правило;
  • Блок объявлений. Помещается в фигурные скобки и состоит из одного или более объявлений, разделенных знаком «;». Каждое объявление состоит из пары «свойство:значение».

В список базовых селекторов, поддерживаемых абсолютным большинством браузеров, входят:

  • * – применяется ко всем объектам;
  • тег – применяется ко всем экземплярам тега;
  • тег[атрибут="значение"] – применяется ко всем экземплярам тега с заданным значением атрибута;
  • .класс – применяется ко всем объектам с заданным атрибутом класса (class="класс");
  • #идентификатор – применяется к объекту с заданным уникальным идентификатором (id="идентификатор").

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

Свойства, как и оговаривалось ранее, могут быть самыми разными. Их великое множество, и описывать все не имеет смысла. Чаще всего с помощью свойств задают:

  • цвет фона, текста – можно писать в HEX или RGBA [24] формате;
  • стиль шрифта – размер, гарнитура, форматирование и т.д.;
  • выравнивание текста – слева, по центру, справа или по ширине;
  • размеры – ширина, высота объекта;
  • отступы от соседних элементов, внутренняя толщина границ;
  • режим отображения – блочный, строчный, табличный и т.д.;
  • режим позиционирования – относительно родительского элемента, края экрана, начала страницы и т.д.
  • рамка, закругление краев;
  • отбрасываемая тень или свечение;
  • анимация, режим интерполяции[25] и ее продолжительность.

После некоторых манипуляций со свойствами размеченных объектов, в итоге можно получить более-менее привлекательный интерфейс, пользоваться которым гораздо приятнее (рисунок 3).

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

Рисунок 3

Разработка логической составляющей

Логика работы модуля (рисунок 4) примерно повторяет логику обычных электронных калькуляторов, но с некоторыми изменениями. Для этого проекта, в частности, прототипом является электронный калькулятор CITIZEN CT-3012SD.

Как и у электронного калькулятора, в распоряжении имеются:

  • Регистр введенного числа
  • Регистр результата выполненных операций
  • Регистр зарезервированной операции
  • Процессор арифметических операций (а точнее, его аналог)

Рисунок 4

Untitled DiagramДополнительно, в связи с адаптацией к работе с пользовательским интерфейсом и с нетипичной системой счисления вводятся:

  • Обработчик ввода символов
  • Обработчик выполнения операций
  • Переключатель системы счисления
  • Обработчик нажатия клавиш клавиатуры

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

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

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

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

Для взаимодействия пользовательского интерфейса с программным кодом модуля используются события, генерируемые браузером при возникновении определенных обстоятельств (например, пользователь нажал на кнопку). JavaScript позволяет назначать функции, вызываемые при их генерации, причем как минимум тремя способами:

  • внутри HTML-документа, встроив вызов функции-обработчика в соответствующий событию атрибут объекта.
  • в JavaScript коде, присвоив соответствующему событию методу объекта значение функции-обработчика;
  • в JavaScript коде, зарегистрировав обработчик события через метод addEventListener(), присутствующий у всех HTML-объектов.

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

Для обеспечения работы модуля, используются следующие события:

  • onclick – нажатие на объект, используется в работе всех кнопок интерфейса;
  • onchange – изменение состояния объекта, используется переключателем системы счисления;
  • onkeydown – нажатие клавиши, используется для управления модулем с клавиатуры.

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

<select id="baseSelector" onchange="setBase(this.value)">

<option value="16" selected>HEX</option>

<option value="10">DEC</option>с

<option value="8">OCT</option>

<option value="2">BIN</option>

</select>

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

После связывания выполняемых пользователем действий, с управляющими модулем функциями, можно браться за отладку модуля. Для этого можно использовать журнал консоли JavaScript в браузере Google Chrome. В нем выводятся сообщения об ошибках в выполнении кода и указываются строки, при интерпретации которых они возникают (рисунок 5). Перед запуском программного кода, можно расставить точки останова на проблемных участках, и затем пошагово проследить за изменениями в работе программы.

Рисунок 5

Ко всему прочему, Google Chrome позволяет производить удаленную отладку приложения, запущенного на мобильном телефоне под управлением операционной системы Android, что сильно облегчает отлов и исправление ошибок, возникающих при работе под этой платформой.

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

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

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

Заключение

В процессе курсовой работы было проведено исследование предметной области. Рассмотрены основные понятия систем счисления. Изучены методы представления чисел в компьютерных системах и использование шестнадцатеричной системы счисления в информатике. Рассмотрены операции, определенные на множестве натуральных чисел.

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

Определен список программных и аппаратных средств, используемых на протяжении процесса разработки и тестирования модуля.

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

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

Проведено тестирование модуля на предмет некорректной работы. Программный код модуля отлажен и готов к дальнейшей эксплуатации.

Список использованной литературы

  1. Беляев М.А, Лысенко В.В, Малинина Л.А. Основы информатики - Ростов н/Д.: Феникс, 2006. – 352 с.
  2. Под ред. проф. Н.В. Макаровой ИНФОРМАТИКА и ИКТ. 10 Класс. Базовый уровень. - СПб: Лидер, 2009. – 256с.
  3. Из истории математики: Позиционные системы счисления // Белорусский Государственный Университет - Механико-математический факультет URL: http://dl.bsu.by/mod/book/view.php?id=10160&chapterid=1154 (дата обращения: 17.07.2016).
  4. Информатика. Лекция №2. Системы счисления (начало). // Электронный учебник по Информатике и Программированию на языке высокого уровня. URL: http://kuzelenkov.narod.ru/mati/book/inform/inform2.html (дата обращения: 15.06.2016).
  5. Шауцукова Л.З. Учебник по информатике 10‐11 класс. - М: Просвещение, 2004. – 420с.
  6. В. Ф. Ляхович, С. О. Крамаров Основы информатики. - Ростов н/Д: Феникс, 2007. – 713с.
  7. Информатика. Лекция №2. Системы счисления (начало). // Электронный учебник по Информатике и Программированию на языке высокого уровня. URL: http://kuzelenkov.narod.ru/mati/book/inform/inform2.html (дата обращения: 15.06.2016).
  8. Стивен Прата Язык программирования C++. Лекции и упражнения. - 6 изд. - М.: ООО "И.Д. Вильямс", 2012. – 1244с.
  9. Hex-редакторы vs. malware: Выбираем шестнадцатеричный редактор для анализа бинарников // «Хакер» - Безопасность, разработка, DevOps URL: https://xakep.ru/2010/11/04/54884/ (дата обращения: 26.08.2016).
  10. Interactive: The Top Programming Languages 2016 // IEEE Spectrum: Technology, Engineering, and Science News URL: http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016 (дата обращения: 28.07.2016).
  11. Browser Statistics // W3Schools URL: http://www.w3schools.com/browsers/ (дата обращения: 18.07.2016).
  12. Дэвид Флэнаган JavaScript. Подробное руководство. - 5-е изд. - СПб: Символ-Плюс, 2008. – 992 с.
  13. Эванс Б., Вербург М. Java. Новое поколение разработки. - СПб: ПИТЕР, 2014. – 560с.

Приложение 1

НОУ «Московский финансово-промышленный университет „Университет“»

Кафедра прикладной информатики

Модуль для выполнения операций с натуральными числами в 16-ричной системе счисления.

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

На 5 листах

Действует с 01.04.2016 г.

Общие сведения

Наименование программы

Полное наименование программы – Модуль для выполнения операций с натуральными числами в 16-ричной системе счисления.

Краткое наименование программы – отсутствует.

Основание для проведения работ

Основанием для разработки является необходимость в подобном инструменте.

Разработчик

Студент группы ОБП-1510МО НОУ «Московский финансово-промышленный университет „Университет“».

Плановые сроки начала и окончания работы

Сроки исполнения: 01.04.2016 – 15.09.2016.

Цели и назначение создания программы

Цеди создания программы

Программа создается в целях упрощения выполнения операций с натуральными шестнадцатеричными числами.

Назначение программы

Указанная цель достигается решением с использованием модуля следующих задач:

  • выполнение арифметических операций, на основе введенных данных
  • перевод в другие системы счисления

Требования к программе

Требования к функционированию программы

На основе введенных данных, модуль должен производить выбранные пользователем операции над натуральными шестнадцатеричными числами.

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

Пользователь должен легко получать новые версии модуля.

Требования к техническому обеспечению

Модуль должен функционировать на следующих операционных системах:

  • Microsoft Windows XP и выше;
  • Debian 6 и выше, а также другие ОС на ее основе;
  • OSX 10.8 и выше;
  • Android 2.3.4 и выше
  • iOS 6 и выше;
  • Windows Phone 7.8 и выше;

Остальные требования определяются разработчиком.

Требования к программному обеспечению

Требования к программному обеспечению определяются разработчиком.

Требования к информационному обеспечению

Входная информация

Входная информация представляет собой два (или одно, в зависимости от производимой операции) неотрицательных числа, записанных в шестнадцатеричной системе счисления. Регистр написаных символов не должен иметь значения. Примеры чисел: ce00a, 3F00.

Выходная информация

Выходная информация представляет собой результат произведенной операции, отображенный в шестнадцатеричном представлении.

Этапы разработки программы

  1. Разработка технического задания
  2. Выбор программных и технических средств
  3. Разработка интерфейса пользователя
  4. Разработка логической части
  5. Отладка и тестирование модуля

Наименование

организации,

предприятия

Должность исполнителя

Фамилия и

инициалы

Подпись

Дата

ОБП-1510МО НОУ «Московский финансово-промышленный университет „Университет“»

студент

Павлов А.М.

01.04.2016

  1. Байт – единица измерения количества информации. В современных системах состоит из восьми бит. Бит – наименьшая мера измерения информации; может принимать лишь два значения: 0 либо 1.

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

  3. Под ред. проф. Н.В. Макаровой ИНФОРМАТИКА и ИКТ. 10 Класс. =Базовый уровень. - СПб: Лидер, 2009. - С. 38.

  4. Из истории математики: Позиционные системы счисления // Белорусский Государственный Университет - Механико-математический факультет URL: http://dl.bsu.by/mod/book/view.php?id=10160&chapterid=1154 (дата обращения: 17.07.2016).

  5. Шауцукова Л.З. Учебник по информатике 10‐11 класс. - М: Просвещение, 2004. - С. 96.

  6. В. Ф. Ляхович, С. О. Крамаров Основы информатики. - Ростов н/Д: Феникс, 2007. - С. 19.

  7. Под ред. проф. Н.В. Макаровой ИНФОРМАТИКА и ИКТ. 10 Класс. Базовый уровень. - СПб: Лидер, 2009. - С. 39.

  8. Информатика. Лекция №2. Системы счисления (начало). // Электронный учебник по Информатике и Программированию на языке высокого уровня. URL: http://kuzelenkov.narod.ru/mati/book/inform/inform2.html (дата обращения: 15.06.2016).

  9. В. Ф. Ляхович, С. О. Крамаров Основы информатики. - Ростов н/Д: Феникс, 2007. - С. 18.

  10. В. Ф. Ляхович, С. О. Крамаров Основы информатики. - Ростов н/Д: Феникс, 2007. - С. 20.

  11. Стивен Прата Язык программирования C++. Лекции и упражнения. - 6 изд. - М.: ООО "И.Д. Вильямс", 2012. - С. 111.

  12. Hex (англ. hexadecimal) – шестнадцатеричный.

  13. Hex-редакторы vs. malware: Выбираем шестнадцатеричный редактор для анализа бинарников // «Хакер» - Безопасность, разработка, DevOps URL: https://xakep.ru/2010/11/04/54884/ (дата обращения: 26.08.2016).

  14. RGB (аббревиатура слов RED, GREEN, BLUE – красный, зеленый, синий) – аддитивная цветовая модель, в которой цвет составляется путем добавления основных компонент (красный, зеленый, синий) к черному.

  15. Interactive: The Top Programming Languages 2016 // IEEE Spectrum: Technology, Engineering, and Science News URL: http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016 (дата обращения: 28.07.2016).

  16. Эванс Б., Вербург М. Java. Новое поколение разработки. - СПб: ПИТЕР, 2014. - С. 42.

  17. Процесс трансляции исходного текста программы в машинный код: совокупность команд с которыми работает целевая операционная система компьютера.

  18. HTML (от англ. HyperText Markup Language – «язык гипертекстовой разметки») – стандартизированный язык разметки документов в сети интернет. Определяет их структуру и форматирование.

  19. Совокупность программного и аппаратного обеспечения; компьютер, принимающий запросы от пользователей и отправляющий ответы, как правило, вместе с HTML документом и / или медиа файлами. Также хранит необходимые для работы ресурсы и контролирует к ним доступ из сети.

  20. Browser Statistics // W3Schools URL: http://www.w3schools.com/browsers/ (дата обращения: 18.07.2016).

  21. W3Schools Online Web Tutorials URL: http://w3schools.com (дата обращения: 18.07.2016).

  22. Can I use... Support tables for HTML5, CSS3, etc URL: http://caniuse.com (дата обращения: 18.07.2016).

  23. Чекбокс (от англ. check box), флажок, галочка – элемент графического интерфейса, позволяющий пользователю менять параметр с двумя состояниями, отмечая или убирая пометку.

  24. RGBA (от англ. Red, Green, Blue, Alpha) – формат записи цвете. Является расширением формата RGB, с дополнительным «альфа» каналом, отвечающим за непрозрачность цвета. Компоненты цвета записываются в виде целых чисел от 0 до 255, альфа канал – действительное число от 0 до 1, например: rgba(127, 50, 50, 0.6).

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