Преобразование двоичных триад

Двоичные триады
Восьмеричные цифры

 

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

Таблица 1.4

Преобразование

Двоичные триады
Восьмеричные цифры

 

Получаем: А8 = 0,658. Перевод чисел из двоичной системы счисления в шестнадцатеричную. Для записи шестнадцатеричных чисел используются шестнадцать цифр, то есть в каждом разряде числа возможны 16 вариантов записи. Решаем показательное уравнение: 16 = 2i . Так как 16 = 24, то i = 4 бита. Каждый разряд шестнадцатеричного числа содержит 4 бита информации. Таким образом, для перевода целого двоичного числа в шестнадцатеричное его нужно разбить на группы по четыре цифры (тетрады), начиная справа, и, если в последней левой группе окажется меньше четырех цифр, дополнить ее слева нулями. Для перевода дробного двоичного числа (правильной дроби) в шестнадцатеричное необходимо разбить его на тетрады слева направо и, если в последней правой группе окажется меньше четырех цифр, то необходимо дополнить ее справа нулями. Затем надо преобразовать каждую группу в шестнадцатеричную цифру, воспользовавшись для этого предварительно составленной таблицей соответствия двоичных тетрад и шестнадцатеричных цифр (табл. 1.5). Переведем целое двоичное число А2 = 1010012 в шестнадцатеричное:

Таблица 1.5

Таблица соответствий

Двоичные триады
Шестнадцатеричные цифры

 

В результате имеем: . Переведем дробное двоичное число в шестнадцатеричную систему счисления (табл. 1.6):

Таблица 1.6

Таблица соответствий

Двоичные триады
Восьмеричные цифры D

 

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

Двоичная арифметика

Мы будем рассматривать двоичную систему счисления с цифрами 0,1. Именно эта система счисления получила широкое применение в вычислительных машинах. Начало исследования этой системы относится к XVI веку. Удобство и простоту выполнения арифметических операций в двоичной системе счисления отмечали еще Б. Паскаль, Г. Лейбниц и др. Рассмотрим правила выполнения арифметических операций с двоичными числами.

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

Последняя сумма представляет собой двузначное число. Это следует понимать как перенос одной двоичной единицы в соседний старший разряд. Это можно записать так: + перенос единицы в соседний старший разряд.

Пример: Сложить двоичные числа: и .

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

+ 110,1011

10111,10101

10001,00011 – поразрядная сумма без учета переносов

 

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

Вычитание. Таблица вычитания имеет вид

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


II. РЕАЛИЗАЦИЯ ПРОЕКТА

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

В процедуре Menu реализуется выбор одного из пунктов:

1. Теоретический раздел (показывает нам теоретический материал перевода чисел из одной систему в другую и операций над двоичными числами);

2. Практический счет

- Перевод из двоичной в десятичную систему.

- Перевод из десятичной в двоичную систему.

- Сложение двоичных чисел.

- Вычитание двоичных чисел.

3. Выход из программы.

В разработанной процедуре Menu первоначально используется процедура стандартного в Turbo Pascal модуля Graph – initGraph, которая инициализирует графическую систему и переводит видеокарту в графический режим. Затем используется еще одна стандартная процедура модуля GraphSetcolor, которая устанавливает текущий цвет, используя палитру, а Setcolor(5) делает пятый цвет в палитре, цветом текущего рисунка. Процедура OutTextXY посылает строку на устройство вывода. OutTextXY, в отличие от OutText позволяет вывести текст в любой точке экрана. И процедура GotoXY используется для перемещения курсора в заданную позицию экрана.

Код процедуры:
procedure Menu; begin initGraph(a,b,''); Setcolor(5); outtextxy(100,10,'GLAVNOE MENU'); outtextxy(100,30,'1-Teoriticheski material'); outtextxy(100,40,'2-Prakticheskii schet'); outtextxy(100,50,'3-vihod'); Gotoxy(25,7); outtextxy(100,100,'Vash vibor:'); read(men); Readln; closegraph; end;

 

Процедуры PERdectodva и PERdvatodec представляет собой диалог с пользователем, в котором осуществляется переводят числа из десятичной системы счисления в двоичную и наоборот, используя при этом процедуры: DectoDvoиProcedure DvatoDec.

Процедуры PERdectodva подключает стандартный модуль Graph. Далее выводит строку «Введите десятичное число» в точке с координатами 10 и 5. Подключает процедуру DvatoDec, которая позволяет осуществить перевод числа из десятичной системы счисления в двоичную систему.

 

Код процедуры:
procedure PERdectodva; begin initGraph(a,b,''); outtextxy(10,5,'Vvedite desiatichnoe chislo '); gotoxy(30,1); readln(CHIS); DvatoDec(CHIS); outtextxy(10,20,'dvoichnoe chislo'); outtextxy(200,20,D); Readln; closegraph; end;

 

В данной процедуре DvatoDec представлен цикл с предусловием. Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществится, если логическое выражение или его результат окажется ложным. Верность логического выражения проверяется в начале: while CH<>0do.

Код процедуры:
procedure DvatoDec(CH:integer); var LS,sl,n:integer; DD:string; begin DD:=''; while CH<>0 do begin ls:=CH mod 2; ch:=ch div 2; if ls=1 then DD:='1'+DD; if ls=0 then DD:='0'+DD; end; D:=DD; end;

 

Процедура DectoDvo предназначена для переводачисла из двоичной системы счисления в десятичную систему.

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

В процедуре Slojenie используется стандартный модуль Graph. Программа выводит запрос пользователю для ввода первого двоичного числа, далее подключается процедура DectoDvo, которая переводит двоичное число в десятичное и переменной TMP присваивается значение числа полученного после перевода из двоичного кода в десятичный. Затем пользователь вводит второе двоичное число, и программа снова переводит его в десятичное число. Далее выполняется сложение TMP:=CHIS+TMP. Полученная сумма переводится в двоичный код с помощью процедуры DvatoDec и ответ сложения двух двоичных чисел выводится на экран.

 

Код процедуры:
procedure Slojenie; var TMP:integer; begin initGraph(a,b,''); outtextxy(10,5,'Vvedite pervoe dvoichnoe chislo'); gotoxy(35,1);readln(D); DectoDvo(D); TMP:=CHIS; outtextxy(10,20,'Vvedite vtoroe dvoichnoe chislo'); gotoxy(35,2);readln(D); DectoDvo(D); TMP:=CHIS+TMP; DvatoDec(TMP); Outtextxy(10,35,'otvet '); Outtextxy(100,35,D); Readln; closegraph; end;

 

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

 

Код процедуры:
procedure Vichit; var TMP:integer; begin initGraph(a,b,''); outtextxy(10,5,'Vvedite pervoe dvoichnoe chislo'); gotoxy(35,1);readln(D); DectoDvo(D); TMP:=CHIS; outtextxy(10,20,'Vvedite vtoroe dvoichnoe chislo'); gotoxy(35,2);readln(D); DectoDvo(D); TMP:=TMP-CHIS; DvatoDec(TMP); Outtextxy(10,35,'otvet '); Outtextxy(100,35,D); Readln; closegraph; end;

 

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

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

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

- перевод из десятичной системы счисления в двоичную систему и наоборот;

- перевод из десятичной системы счисления в шестнадцатеричную систему;

- перевод из двоичной системы в восьмеричную систему;

- перевод из десятичной системы в восьмеричную систему счисления;

- перевод из шестнадцатеричной системы в двоичную систему счисления;

- сложение и вычитание двоичных чисел.

 

Код процедуры:
procedure Praktika; begin initGraph(a,b,''); SPISOK1; while RAZDEL<>9 do begin case RAZDEL of 1: PERdvatodec; 2: PERdectodva; 3: Slojenie; 4: Vichit; end; SPISOK1; end; closegraph; end;

 

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

Rectangle(х1,у2;х2,у2) -рисует прямоугольник, используя текущий цвет и тип линии. Точка с координатами (х1,у1) определяет верхний левый угол прямоугольника, а точка с координатами (х1,у2) определяет нижний правый угол.

SetColor(color: word) - используя палитру устанавливает текущий цвет рисунка согласно значению параметра Color.

Circle(х,у:integer;R:word) - рисует окружность с радиусом R. Точка (х,у)считается центром окружности.

Line(х1,у1,х2,у2:integer)– рисует прямую линию из точки (X1,Y1) в точку (X2,Y2) , толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor.

Settextstyleстиль заполнения текста.