Файл: Разработка модуля для выполнения операций с натуральными числами в шестнадцатеричной системе счисления (Теоретические основы систем счисления ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.02.2024

Просмотров: 51

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

begin

r[i - 1] := r[i - 1] + 1;//единица переноситься на разряд

r[i] := r[i] - 16;//вычисление текущей цифры суммы

end;

for i := 1 to (length(c1) + 1) do s := s + q[r[i] + 1];//переводим 10ные числа в 16ричные символы

if s[1] = '0' then delete(s, 1, 1);//удаляем незначащий ноль слева (если он есть),он может быть только 1

sum := s;

end;

function proiz(c1, c2: string): string;//произведение 16ричных чисел

var

i: integer;//номер цифры в строке (числе)

s, p: string;//количество сложений и слагаемое

begin

s := '0';//обнуляем количество слагаемых

p := '0';//обнуляем слагаемое

for i := 1 to Length(c2) do c2[i] := Upcase(c2[i]);//малые буквы в большие

while (s <> c2) do//пока сложение не выполниться нужно количество раз

begin

s := sum('1', s);//количество суммирований

p := sum(p, c1);//суммирующиеся слагаемые

end;

proiz := p;

end;

function raz(c1, c2: string): string;//разность 16ричных чисел

var

i: integer;//номер цифры в строке (числе)

s: string;//строка, в которую записывается разность (без знака)

p: char;//знак числа

r: array[1..100] of integer;//массив с разностями цифр

q: string[16] = '0123456789ABCDEF';//цифры в 16ной сс

a, b: uint64;//10ные числа (для сравнения)

begin

p := '+';//знак числа

val(iz16v10(c1), a, i);//преобразуем строку в 10ное число

val(iz16v10(c2), b, i);//преобразуем строку в 10ное число

if a < b then//если из меньшего вычитается большее

begin

p := '-';//число будет отрицательное (с минусом)

swap(c1, c2);//первое число (уменьшаемое) должно быть больше

end;

while length(c1) > length(c2) do insert('0', c2, 1);//вставляем незначащие нули слева пока числа не будут одинаковой длины

while length(c1) < length(c2) do insert('0', c1, 1);//вставляем незначащие нули слева пока числа не будут одинаковой длины

for i := 1 to length(c1) do r[i] := zam(c1[i]) - zam(c2[i]);//вычитание без займов

for i := length(c1) downto 2 do//займы у цифр слева и окончательные вычисления

if (r[i] < 0) then//если требуется занять единицу

begin

r[i] := r[i] + 16;//вычисление разности цифр

r[i - 1] := r[i - 1] - 1;//у предыдущей цифры занимаем единицу

end;

for i := 1 to length(c1) do s := s + q[r[i] + 1];//переводим 10ные числа в 16ричные символы

while ((s[1] = '0') and (length(s) > 1)) do delete(s, 1, 1);//удаляем незначащие нули слева

raz := p + s;//добавляем к числу знак

end;

function del(c1, c2: string): string;//деление 16ричных чисел

var

i: integer;//номер цифры в строке (числе)

s, p: string;//частное

z: char;//знак разности

begin

if (c2[1] = '0') then//если попытка поделить на 0

begin

del := 'На ноль делить нельзя!';

exit;

end;

p := c1;

z := '+';

i := 0;//обнуляем счетчик

while (z = '+') do//вычитаем делитель, пока знак делимого не поменяется

begin

i := i + 1;//считаем вычитание

p := raz(p, c2);//вычитаем из делимого делитель

z := p[1];//запоминаем знак


delete(p, 1, 1);//удаляем знак из разности

end;

str(i - 1, s);//записываем полученное 10ное частное в строку

del := iz10v16(s);//считали в 10ной сс, переводим в 16ричную

end;

end.

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

При демонстрации работы созданного приложения будем сравнивать (для проверки) полученные в нем результаты с результатами, вычисленными с помощью математического пакета Scilab (рисунки 1, 2 и 3).

Рисунок 1. Результаты выполнения арифметических операций в Scilab

Рисунок 2. Перевод шестнадцатеричного числа в двоичную, восьмеричную и десятичную системы счисления в Scilab

Рисунок 3. Перевод чисел из двоичной, восьмеричной и десятичной систем счисления в шестнадцатеричную в Scilab

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

Рисунок 4. Сложение натуральных шестнадцатеричных чисел в программе

Умножение шестнадцатеричных натуральных чисел в созданном приложении показано на рисунке 5.

Рисунок 5. Умножение натуральных шестнадцатеричных чисел в программе

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

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

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

Рисунок 7. Деление натуральных шестнадцатеричных чисел в созданной программе

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

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

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


Рисунок 9. Перевод двоичного числа в шестнадцатеричную систему счисления в созданной программе

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

Рисунок 11. Перевод десятичного числа в шестнадцатеричную систему счисления в созданной программе

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

Работа созданной программы при ошибках ввода приведена в Приложении Б.

ЗАКЛЮЧЕНИЕ

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

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

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

    1. Абрамов В. Г., Трифонов Н. П., Трифонова Г. Н. Введение в язык Паскаль. Учебное пособие. – М.: Кронус. 2016. – 384 с.
    2. Андреева Е. В. Математические основы информатики. – М.: Бином. Лаборатория знаний, 2015. – 328 с.
    3. Андреева Т. А. Программирование на языке Pascal. Учебное пособие. – М.: Интуит.ру, 2015. – 234 с.
    4. Гашков С. Б. Системы счисления и их применение. – М.: МЦНМО, 2017. – 52 с.
    5. Медведик В. И. Практика программирования на языке Паскаль. Задачи и решения. – М.: ДМК-Пресс. 2015. – 590 с.
    6. Учебник по информатике и программированию на языке высокого уровня [Электронный ресурс] – URL: http://kuzelenkov.narod.ru/mati/book/informat_prog.html (дата обращения: 18.07.2019).
    7. Учебник по информатике [Электронный ресурс] – URL: http://solidstate.karelia.ru/p/tutorial/informatics/index.htm (дата обращения: 20.07.2019).

ПРИЛОЖЕНИЕ А

Блок-схемы алгоритмов программы

Блок-схема алгоритма основной программы приведена на рисунке 12.

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

Рисунок 12. Блок-схема алгоритма основной программы

Блок-схема алгоритма подпрограммы-функции для проверки правильности введенного числа (proverk) представлена на рисунке 13.

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

Рисунок 13. Блок-схема подпрограммы-функции proverk

Блок-схема алгоритма (подробно описан в пункте 1.4 настоящей работы) подпрограммы-функции для перевода шестнадцатеричного числа в двоичную систему счисления (iz16v2) изображена на рисунке 14.

Рисунок 14. Блок-схема подпрограммы-функции iz16v2

Блок-схема алгоритма (подробно описан в пункте 1.3 настоящей работы) подпрограммы-функции для перевода шестнадцатеричного числа в десятичную систему счисления (iz16v10) приведена на рисунке 15.

Рисунок 15. Блок-схема подпрограммы-функции iz16v10

Блок-схема алгоритма (подробно описан в пункте 1.4 настоящей работы) подпрограммы-функции для перевода двоичного числа в восьмеричную систему счисления (iz2v8) представлена на рисунке 16.

Рисунок 16. Блок-схема подпрограммы-функции iz2v8

Алгоритмы подпрограмм-функций для перевода из восьмеричной системы в двоичную систему счисления и из двоичной системы в шестнадцатеричную систему счисления (iz8v2 и iz2v16 соответственно) работают по тому же принципу, что и iz16v2 и iz2v8, только в первом случае вместо триад используются тетрады и наоборот – во втором случае.


Блок-схема алгоритма (подробно описан в пункте 1.2 настоящей работы) подпрограммы-функции для перевода десятичного числа в шестнадцатеричную систему счисления (iz10v16) представлена на рисунке 17.

Рисунок 17. Блок-схема подпрограммы-функции iz10v16

Блок-схема алгоритма (описан в пункте 1.5 настоящей работы) подпрограммы-функции для сложения натуральных шестнадцатеричных (sum) изображена на рисунке 18.

Рисунок 18. Блок-схема подпрограммы-функции sum

Блок-схема алгоритма (описан в пункте 1.5 настоящей работы) подпрограммы-функции для умножения натуральных шестнадцатеричных (proiz) приведена на рисунке 19.

Рисунок 19. Блок-схема подпрограммы-функции proiz

Блок-схема алгоритма (описан в пункте 1.5 настоящей работы) подпрограммы-функции для вычитания натуральных шестнадцатеричных (raz) изображена на рисунке 20. Данная функция, если из меньшего числа вычитается большее число, выводит результат со знаком «минус» (вычитает из большего числа меньшее и добавляет минус к разности), в противном случае – результат печатается со знаком «плюс».

Рисунок 20. Блок-схема подпрограммы-функции raz

Блок-схема алгоритма (описан в пункте 1.5 настоящей работы) подпрограммы-функции для нахождения частного от деления натуральных шестнадцатеричных (del) изображена на рисунке 21. Остаток от деления вычисляется в основной программе и выводится на экран только если частное и делитель не равны нулю, а рассчитывается он по формуле (5) из пункта 1.5 с использованием ранее описанных функций raz, proiz и del.

Рисунок 21. Блок-схема подпрограммы-функции del

ПРИЛОЖЕНИЕ Б

Работа разработанной программы при ошибочном вводе

Случай, когда введен несуществующий номер операции или номер действия не введен вовсе, приведен на рисунке 22.

Рисунок 22. Работа программы

Случаи, когда исходное число вводится с ошибками (с недопустимыми цифрами, ненужными нулями слева или не введено вовсе), отображен на рисунке 23.

Рисунок 23. Работа программы

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