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

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

Содержание:

Введение

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

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

Для осуществления поставленной цели служат следующие задачи:

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

2. Формулировка основных понятий и принципов, касающихся тематики курсовой работы;

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

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

Объект исследования – принципы разработки вычислительных модулей.

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

Методологической основой для исследования и разработки послужили труды отечественных и зарубежных математиков и программистов. В качестве теоретической базы были использованы публикации, статьи и выдержки из учебных пособий, посвящённые исследуемой теме. Практической базой исследования послужили платформа “Visual Studio 2017” и язык программирования “C#” версии 7.0.

Глава 1. Шестнадцатеричные числа в программировании

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

Современный человек в повседневной жизни постоянно сталкивается с числами: мы запоминаем номера автобусов и телефонов, в магазине подсчитываем стоимость покупок, ведём свой семейный бюджет в рублях и копейках и т.д. Числа, цифры с нами везде. А что знал человек о числах несколько тысяч лет назад? Историки доказали, что и пять тысяч лет назад люди могли записывать числа и производить над ними арифметические действия. Конечно, принципы записи были совсем не такими, как сейчас. Но в любом случае число изображалось c помощью одного или нескольких символов. Эти символы, участвующие в записи числа, в математике и информатике принять называть цифрами

Система счисления — это способ записи (представления) чисел.

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

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

Наиболее совершенными являются позиционные системы счисления, т.е. системы записи чисел, в которых вклад каждой цифры в величину числа зависит от её положения (позиции) в последовательности цифр, изображающей число. Например, наша привычная десятичная система является позиционной: в числе 34 цифра 3 обозначает количество десятков и "вносит" в величину числа 30, а в числе 304 та же цифра 3 обозначает количество сотен и "вносит" в величину числа 300.

Десятичная система счисления - это одна из самых распространенных систем счисления. Именно её мы используем, когда называем цену товара и произносим номер автобуса. В каждом разряде (позиции) может использоваться только одна цифра из диапазона от 0 до 9. Основанием системы является число 10.

Для примера возьмем число 503. Если бы это число было записано в непозиционной системе, то его значение равнялось 5+0+3 = 8. Но у нас - позиционная система и значит каждую цифру числа необходимо умножить на основание системы, в данном случае число “10”, возведенное в степень, равную номеру разряда. Получается, значение равно 5*102 + 0*101 + 3*100 = 500+0+3 = 503. Чтобы избежать путаницы при одновременной работе c несколькими системами счисления основание указывается в качестве нижнего индекса. Таким образом, 503 = 50310.

Помимо десятичной системы, отдельного внимания заслуживают 2-, 8-, 16-ая системы.

Двоичная система счисления, в основном, используется в вычислительной технике. Первую вычислительную машину создал Блез Паскаль, использовавший в ней десятичную систему, которая оказалась неудобной в современных электронных машинах, поскольку требовалось производство устройств, способных работать в 10 состояниях, что увеличивало их цену и итоговые размеры машины. Этих недостатков лишены элементы, работающие в 2-ой системе. Тем не менее, рассматриваемая система была создана за долго до изобретения вычислительных машин и уходит “корнями” в цивилизацию Инков, где использовались кипу — сложные верёвочные сплетения и узелки.

Двоичная позиционная система счисления имеет основание 2 и использует для записи числа 2 символа (цифры): 0 и 1. В каждом разряде допустима только одна цифра — либо 0, либо 1.

Примером может служить число 101. Оно аналогично числу 5 в десятичной системе счисления. Для того, чтобы перевести из 2-й в 10-ю необходимо умножить каждую цифру двоичного числа на основание “2”, возведенное в степень, равную разряду. Таким образом, число 1012 = 1*22 + 0*21 + 1*20= 4+0+1 = 510.

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

Чтобы компьютер мог работать с двоичными числами (кодами), необходимо чтобы они где-то хранились. Для хранения каждой отдельной цифры применяется триггер, представляющий собой электронную схему. Он может находится в 2-х состояниях, одно из которых соответствует нулю, другое — единице. Для запоминания отдельного числа используется регистр — группа триггеров, число которых соответствует количеству разрядов в двоичном числе. А совокупность регистров — это оперативная память. Число, содержащееся в регистре — машинное слово. Арифметические и логические операции со словами осуществляет арифметико-логическое устройство (АЛУ). Для упрощения доступа к регистрам их нумеруют. Номер называется адресом регистра. Например, если необходимо сложить 2 числа — достаточно указать номера ячеек (регистров), в которых они находятся, а не сами числа. Адреса записываются в 8- и 16-ричной системах поскольку переход от них к двоичной системе и обратно осуществляется достаточно просто. Для перевода из 2-й в 8-ю число необходимо разбить на группы по 3 разряда справа налево, а для перехода к 16-ой — по 4. Если в крайней левой группе цифр не достает разрядов, то они заполняются слева нулями, которые называются ведущими. В качестве примера возьмем число 1011002. В восьмеричной — это 101 100 = 548, а в шестнадцатеричной — 0010 1100 = 2С16. Но экране мы видим десятичные числа и буквы, так как при нажатии на клавишу в компьютер передаётся определённая последовательность электрических импульсов, причём каждому символу соответствует своя последовательность электрических импульсов (нулей и единиц). Программа драйвер клавиатуры и экрана обращается к кодовой таблице символов (например, Unicode, позволяющая закодировать 65536 символов), определяет какому символу соответствует полученный код и отображает его на экране. Таким образом, тексты и числа хранятся в памяти компьютера в двоичном коде, а программным способом преобразуются в изображения на экране.

§1.2 Применение шестнадцатеричных чисел

Шестнадцатеричная система счисления имеет основание 16 и цифры: 0, 1, 2, 3, 4, 5 6, 7 8, 9, A, В, С, D, E, F. При таком изображении цифр в шестнадцатеричной системе счисления буква А изображает десять, В - одиннадцать, С - двенадцать, D - тринадцать, Е - четырнадцать, F - пятнадцать.

Чтобы изобразить число шестнадцать, поступим аналогично тому как мы поступали в десятичной системе. Увеличим разряд десятков на единицу, а разряд единиц обнулим. Таким образом 1016 = 1610.

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

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

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

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

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

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

Глава 2. Создание вычислительного модуля

§2.1 Разработка структуры программы

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

От модуля требуется:

  • Уметь получать числа в десятичной системе счисления и переводить в шестнадцатеричную систему счисления и обратно.
  • Проводить стандартные арифметические операции с шестнадцатеричными числами (сложение, вычитание, умножение, деление).

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

Например, число 746710 перевести в шестнадцатеричную систему счисления.

746710 = 1D2B16

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

X2 = An * 16n-1 + An-1*16n-2 + An-2*16n-3 + … + A2161 + A1*160

Например, число FDA116 перевести в десятичную систему счисления.

FDA116 = 15*163 + 13*162 + 10*161 + 1*160 = 6492910

В шестнадцатеричной системе счисления все арифметические действия выполняются также, как и в десятичной. Законы арифметики (коммутативный, ассоциативный, дистрибутивный) справедливы для всех систем счисления. Зная это можно выполнить каждое арифметическое действие между шестнадцатеричными числами аналогично, как в десятичной системе счисления, “столбиком”.

§2.2 Программная реализация

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

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

- При вычитании из меньшего числа большее получим отрицательное шестнадцатеричное число.

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

Программа выполнена с использованием языка “C#” версии 7.0. и платформы “Visual Studio 2017”.

using System;

namespace Сalculative_Module

{

class Program

{

static void Main(string[] args)

{

Module.Demonstration();

Console.ReadKey();

}

}

public static class Module

{

private static string ConvertNumber10to16(int X) // Конвертация десятичных чисел в односимвольные шестнадцатеричные числа

{

if (X == 10)

return "A";

else if (X == 11)

return "B";

else if (X == 12)

return "C";

else if (X == 13)

return "D";

else if (X == 14)

return "E";

else if (X == 15)

return "F";

else

return X.ToString();

}

public static string ConvertTo10From16(int X10) // Ввод десятичного числа - вывод шестнадцатеричное число

{

string Y16 = "";

do

{

Y16 = ConvertNumber10to16(X10%16) + Y16;

X10 /= 16;

} while (X10 > 15);

if (X10>0)

Y16 = ConvertNumber10to16(X10) + Y16;

return Y16;

}

private static int ConvertChar16to10(char X) // Конвертация шестнадцатеричных односимвольных чисел в десятичные числа

{

if ((X == 'A') || (X == 'a'))

return 10;

else if ((X == 'B') || (X == 'b'))

return 11;

else if ((X == 'C') || (X == 'c'))

return 12;

else if ((X == 'D') || (X == 'd'))

return 13;

else if ((X == 'E') || (X == 'e'))

return 14;

else if ((X == 'F') || (X == 'f'))

return 15;

else

return X-'0';

}

public static int ConvertTo16From10(string X16) // Ввод шестнадцатеричого числа - вывод десятичное число

{

char[] Num = X16.ToCharArray();

int Rezult = 0;

for (int i = Num.Length - 1, j = 0; i >= 0; i--, j++)

{

Rezult += ConvertChar16to10(Num[j]) * (int)Math.Pow(16, i);

}

return Rezult;

}

public static string Sum16(string A, string B) // Сложение

{

return ConvertTo10From16(ConvertTo16From10(A) + ConvertTo16From10(B));

}

public static string Raz16(string A, string B) // Вычитание

{

int a = ConvertTo16From10(A);

int b = ConvertTo16From10(B);

if (a >= b)

return ConvertTo10From16(ConvertTo16From10(A) - ConvertTo16From10(B));

else

return "-" + ConvertTo10From16(ConvertTo16From10(B) - ConvertTo16From10(A));

}

public static string Mult16(string A, string B) // Умножение

{

return ConvertTo10From16(ConvertTo16From10(A) * ConvertTo16From10(B));

}

public static string Del16(string A, string B) // Деление

{

return ConvertTo10From16(ConvertTo16From10(A) / ConvertTo16From10(B));

}

public static void Demonstration() // Демонстрация работы модуля

{

int x;

string A, B;

Console.WriteLine("Введите натуральное делятичное число ");

x = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Это число в шестнадцатеричной системе счисления: " + ConvertTo10From16(x));

Console.WriteLine("Введите шестнадцатеричное число число ");

A = Console.ReadLine();

Console.WriteLine("Это число в десятичной системе счисления: " + ConvertTo16From10(A));

Console.WriteLine("Введите подряд два шестнадцатеричных числа");

A = Console.ReadLine();

B = Console.ReadLine();

Console.WriteLine("Результат их сложения: " + Sum16(A, B));

Console.WriteLine("Результат их вычетания: " + Raz16(A, B));

Console.WriteLine("Результат их умножения: " + Mult16(A, B));

Console.WriteLine("Результат их целочисленного деления: " + Del16(A, B));

}

}

}

Результат работы программы:

Запуск 1.

Запуск 2.

Запуск 3.

Заключение

Итак, подведём итоги исследования.

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

Были сформулированы основные тезисы и понятия по тематике курсовой работы.

Была разработана алгоритмическая база для последующей реализации программы.

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

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

Фомин, Сергей Васильевич. Системы счисления [Текст]. - 2-е изд., доп. - Москва : Наука, 1968. - 46 с. : ил.; 20 см. - (Популярные лекции по математике; Вып. 40).

Любомудров, Алексей Алексеевич. Системы счисления. Методы перевода чисел из позиционной системы счисления с основанием p1 в позиционную систему счисления с основанием p2 [Текст] : учебно-методическое пособие / А. А. Любомудров ; М-во образования и науки Российской Федерации, Национальный исследовательский ядерный ун-т «МИФИ». - Москва : НИЯУ МИФИ, 2014. - 28 с. - (Инженерно-физический практикум).

Заваруева, Анна Никифоровна. Системы счисления [Текст] : Учеб. пособие / А.Н. Заваруева ; Моск. гос. пед. ин-т им. В.И. Ленина, Кафедра вычислит. математики и программирования. - Москва : МГПИ, 1976. - 27 с.

Букреев, Вячеслав Зиновьевич. Теория алгоритмов, программирование и расчеты на ЭВМ : Учеб. пособие / Букреев В. З., Яснова Л. Н., Серов В. В.; Моск. ин-т приборостроения. - М. : МИП, 1988. - 72,[1] с. : граф.; 20 см.

Криницкий, Николай Андреевич. Равносильные преобразования алгоритмов и программирование [Текст]. - Москва : Сов. радио, 1970. - 304 с. : черт.; 21 см.