Введение
Тема моей исследовательской работы «Перевод чисел в различные системы счисления средствами среды программирования Pascal».
Данная научно-исследовательская работа является актуальной в силу четырех обстоятельств:
Она имеет непосредственное практическое отношение к курсу информатики в школе;
Элементы работы могут быть представлены для изучения учащимся 9-11 классов;
Возможность применения разработанного приложения для проверки знаний учащихся, связанных с переводом чисел из одной системы счисления в другую;
Работа имеет прикладной характер и требует углубленного изучения языка программирования Pascal.
Цель научно-исследовательской работы: разработать приложение для перевода чисел из одной системы счисления в другую средствами среды программирования Pascal.
Данной проблемой на протяжении большого времени занимались программисты разных стран. Возможность перевода чисел, в частности представление чисел в двоичной системе счисления, имеет огромное практическое значение. Структура внутренней и внешней памяти компьютерных средств разработана на основе хранения информации в двоичном коде. Решение проблемы процесса перевода чисел из одной системы счисления в другую позволило усовершенствовать современные компьютеры, повысить их производительность, разработать новые устройства внешней и внутренней памяти большей емкости, а также оптимизировать процесс хранения и передачи данных.
Для достижения цели были поставлены следующие задачи:
Изучить процесс перевода чисел из одной системы счисления в другую;
Изучить функционал среды программирования Pascal и ее возможности;
Изучить основы программирования на языке Pascal;
Составить приложение для перевода чисел из одной системы счисления в другую средствами среды программирования Pascal.
Научно-исследовательская работа состоит из: введения, двух глав, заключения и списка литературы.
В введение сформулированы цель, задачи и актуальность научно-исследовательской работы.
В первой главе рассматриваются теоретические основы перевода чисел из одной системы счисления в другую.
Во второй главе рассмотрен процесс разработки приложения для перевода чисел из одной системы счисления в другую средствами среды программирования Pascal.
В заключении отражены достигнутые результаты и перспективы развития приложения.
Глава 1. Правила перевода чисел в различные системы счисления
Текст данной главы взят из учебного пособия «Системы счисления и арифметика ЭВМ». [1, стр. 4-13]
Позиционные системы счисления
Под системой счисления понимают способ представления любого числа с помощью некоторого алфавита символов, называемых цифрами. Существуют различные системы счисления, и от их особенностей зависят наглядность представления числа при помощи цифр и сложность выполнения арифметических операций.
В ЭВМ используются только позиционные системы счисления с различными основаниями. Позиционные системы счисления характеризуются тем, что одна и та же цифра имеет различное значение, определяющееся позицией цифры в последовательности цифр, изображающих число.
Пример:
• Десятичная система счисления – позиционная,
• Римская система счисления – непозиционная.
Количество S различных цифр, употребляющихся в позиционной системе счисления, называется ее основанием. В общем случае, любое число в позиционной системе счисления можно представить в виде полинома от основания S:
X= εiSi + εi −1Si −1 + ... + ε1S1 + ε0S0 + ε−1S−1 + ε−2S−2 + ... .
В качестве коэффициента ε могут стоять любые из S цифр, используемых в системе счисления. Однако для краткости число принято изображать в виде последовательности цифр.
X= εi εi−1...ε1ε0 ε−1ε−2 ....
Позиции цифры, отсчитанные от запятой (точки), отделяющей целую часть от дробной, называются разрядами. В позиционной системе счисления вес каждого разряда больше соседнего в число раз, равное основанию системы S.
Пример: для десятичной системы счисления (основание S = 10) имеем число 6321.564. Веса разряда и коэффициенты ε для этого числа будут следующими:
Веса |
103 |
102 |
101 |
100 |
10-1 |
10-2 |
10-3 |
ε |
6 |
3 |
2 |
1 |
5 |
6 |
4 |
В ЭВМ применяют двоичную, восьмеричную и шестнадцатеричную системы счисления. В дальнейшем систему счисления, в которой записано число, будем обозначать подстрочным индексом, заключенным в круглые скобки. Например: 1101(2), 27(8), 369(10), BF(16) и т. д.
Двоичная система счисления
2.1. Представление двоичных чисел
двоичной системе счисления основание S = 2, т. е. используются всего два символа: 0 и 1. Однако двоичное изображение числа требует большего (для многоразрядного числа примерно в 3,3 раза) числа разрядов, чем его десятичное представление. Тем не менее, применение двоичной системы создает большие удобства для проектирования ЭВМ, так как для представления в машине разряда двоичного числа может быть использован любой простой элемент, имеющий всего два устойчивых состояния. Также достоинством двоичной системы счисления является простота двоичной арифметики.
общем виде двоичное число выглядит следующим образом:
X = εi 2i + εi−1 2i−1 + ... + ε1 21 + ε0 20 + ε−1 2−1 + ε−2 2−2 + ... , где εi ∈ 0,1.
Вес каждого разряда в двоичной системе счисления кратен 2 или 1/2.
Пример: двоичное число – 101101(2).
→ |
32 |
16 |
8 |
4 |
2 |
1 |
|
Веса |
25 |
24 |
23 |
22 |
21 |
20 = 45 (10 ) |
|
ε |
→ |
1 |
0 |
1 |
1 |
0 |
1 |
т. е. 1⋅25+0⋅24+1⋅23+1⋅22+0⋅21+1⋅20=45(10) .
Как и в десятичной, так и в двоичной системе счисления для отделения целой части от дробной используется точка. Значение веса разрядов справа от точки равно основанию двоичной системы (2), возведенному в отрицательную степень. Такие веса – это дроби вида: 1/2, 1/22, 1/23, 1/24, 1/25 или 1/2, 1/4, 1/8, 1/16. Их можно выразить через десятичные дроби: 2-1 = 0.5, 2-2 = 0.25, 2-3 = 0.125, 2-4 = 0.0625. В общем случае двоичное число имеет целую и дробную части, например, 1101101.10111.
Каждая позиция, занятая двоичной цифрой, называется битом. Бит является наименьшей единицей информации в ЭВМ. Наименьшим значащим битом (младшим значащим разрядом – МЗР) называют самый младший двоичный разряд, а самым старшим двоичным разрядом – наибольший значащий бит (старшим значащим разрядом – СЗР). В двоичном числе эти биты имеют соответственно наименьший и наибольший вес. Обычно двоичное число записывают так, что старший значащий бит представляется крайним слева.
2.2. Преобразование двоичных чисел в десятичные
Для преобразования двоичных чисел в десятичные необходимо сложить десятичные веса всех разрядов двоичного числа, в которых содержатся единицы.
2.3. Преобразование десятичных чисел в двоичные
При работе с ЭВМ, особенно с микропроцессорами, очень часто приходится выполнять преобразование десятичных чисел в двоичные.
Для преобразования целого десятичного числа в двоичное необходимо разделить его на основание новой системы счисления (в данном случае S = 2). Полученное частное снова делится на основание новой системы счисления, до тех пор, пока частное, полученное в результате очередного деления, не будет меньше основания новой системы счисления. Последнее частное (являющееся старшим значащим разрядом) и все полученные остатки от деления составляют число в новой системе счисления.
Для перевода дробных чисел (или дробных частей вещественных чисел) требуется другая процедура преобразования.
Рассмотрим ее на следующем примере – необходимо десятичное число 0.375(10) преобразовать в двоичное число:
Умножим дробь на основание новой системы счисления S = 2:2∗0.375 = 0.75.
Если результат умножения меньше единицы, то СЗР присваивают значение 0. Если больше единицы, то присваивают значение 1. Поскольку 0.75<1, то СЗР=0.
Результат предыдущей операции вновь умножаем на основание новой системы счисления 2. Если бы он был больше единицы, то в этой операции умножения участвовала бы только его дробная часть. В данном случае: 2∗0.75=1.5.
Поскольку 1.5>1, то ближайшему разряду справа от СЗР присваивается значение один, а следующая операция умножения производится только над дробной частью числа 1.5, т. е. над числом 0.5: 2∗0.5=1.
Шаги описанной процедуры повторяются до тех пор, пока либо результат умножения не будет точно равен 1 (как в рассматриваемом примере), либо не будет достигнута требуемая точность.
Таким образом, 0.375(10) = 0,011(2).
Если в результате умножения на основание новой системы счисления (в приведенном выше примере S = 2) результат не равен единице, операцию останавливают при достижении необходимой точности, а целую часть результата последней операции умножения используют в качестве значения МЗР.
Следует иметь в виду, что рассмотренные процедуры перевода целых и дробных чисел из десятичных в двоичные и обратно являются общими для перевода чисел в любых позиционных системах счисления (т. е. целое число делится на основание системы счисления, в которую число переводится, а правильная дробь умножается). Притом надо помнить, что при выполнении переводов чисел из одной системы счисления в другую все необходимые арифметические действия выполняются в той системе счисления, в которой записано переводимое число.
Восьмеричная система счисления
восьмеричной системе счисления употребляются всего восемь цифр, т. е. эта система счисления имеет основание S = 8. В общем виде восьмеричное число выглядит следующим образом:
X =εi8i+εi−18i−1+...+ε181+ε080+ε−18−1+ε−28−2+...,
где εi = 0,...,7 .
Восьмеричная система счисления удобна как компактная форма записи чисел и используется программистами (например, в текстах программ для более краткой и удобной записи двоичных кодов команд, адресов и операндов). В восьмеричной системе счисления вес каждого разряда кратен восьми или одной восьмой. Восьмиразрядное двоичное число позволяет выразить десятичные величины в пределах 0–255, а восьмеричное охватить диапазон чисел от 0 до 99999999 (для двоичной это составляет 27 разрядов).
Поскольку 8=23, то каждый восьмеричный символ можно представить трехбитовым двоичным числом. Для перевода числа из двоичной системы счисления в восьмеричную необходимо разбить это число влево (для целой части) и вправо (для дробной) от точки (запятой) на группы по три разряда (триады) и представить каждую группу цифрой в восьмеричной системе счисления. Крайние неполные триады дополняются необходимым количеством незначащих нулей.
Перевод из восьмеричной системы счисления в двоичную осуществляется путем представления каждой цифры восьмеричного числа трехразрядным двоичным числом (триадой).
Шестнадцатеричная система счисления
Эта система счисления имеет основание S = 16. В общем виде шестнадцатеричное число выглядит следующим образом:
= ε i 16i + ε i−116i−1 + ... + ε1161 + ε 0160 + ε −116−1 + ε −216−2 + ...,
Шестнадцатеричная система счисления позволяет еще короче записывать многоразрядные двоичные числа – сокращать запись 4-разрядного двоичного числа, т. е. полубайта. Шестнадцатеричная система так же, как и восьмеричная, применяется в текстах программ для более краткой и удобной записи двоичных чисел.
Для перевода числа из двоичной системы счисления в шестнадцатеричную необходимо разбить это число влево и вправо от точки на тетрады и представить каждую тетраду цифрой в шестнадцатеричной системе счисления.
Для перевода числа из шестнадцатеричной системы счисления в двоичную, необходимо, наоборот, каждую цифру этого числа заменить тетрадой.
заключение следует отметить, что перевод из одной системы счисления в другую произвольных чисел можно осуществлять по общим правилам, описанным в разделе «Двоичная система счисления». Однако на практике переводы чисел из десятичной системы в рассмотренные системы счисления и обратно осуществляются через двоичную систему счисления.
Кроме того, следует помнить, что шестнадцатеричные и восьмеричные числа – это только способ представления больших двоичных чисел, которыми фактически оперирует процессор. При этом шестнадцатеричная система оказывается предпочтительнее, поскольку в современных ЭВМ процессоры манипулируют словами, длиной 4, 8, 16, 32 или 64 бита, т. е. длиной слов, кратной 4. В восьмеричной же системе счисления предпочтительны слова, кратные 3 битам, например архитектура ЭВМ семейства PDP фирмы DEC.
Возможность перевода чисел, в частности представление чисел в двоичной системе счисления, имеет огромное практическое значение. Структура внутренней и внешней памяти компьютерных средств разработана на основе хранения информации в двоичном коде. Решение проблемы процесса перевода чисел из одной системы счисления в другую позволило усовершенствовать компьютерные средства, повысить их производительность, разработать новые устройства внешней и внутренней памяти большей емкости, а также оптимизировать процесс хранения и передачи данных.
Для перевода целых чисел из одной системы счисления в другую существует несколько правил:
«Для преобразования двоичных чисел в десятичные необходимо сложить десятичные веса всех разрядов двоичного числа, в которых содержатся единицы…
Для преобразования целого десятичного числа в двоичное необходимо разделить его на основание новой системы счисления (в данном случае S = 2). Полученное частное снова делится на основание новой системы счисления, до тех пор, пока частное, полученное в результате очередного деления, не будет меньше основания новой системы счисления. Последнее частное (являющееся старшим значащим разрядом) и все полученные остатки от деления составляют число в новой системе счисления.» [1, стр. 6-7]
Аналогичными правилами пользуются для перевода чисел в системы счисления с другими основаниями.
Для разработки представленного в этой работе приложения, первоначально необходимо было реализовать процесс правильного перевода чисел по вышеуказанным правилам в двоичной системе счисления, а потом расширить диапазон оснований систем счислений до 16.
На сегодняшний момент функциональные возможности приложения позволяют переводить целые числа из систем счисления с основаниями от 2 до 9 в системы счисления с основаниями от 2 до 16. Работа над программой продолжается и в дальнейшем ее задачами будет не только перевод не только целых, но и дробных чисел из одной(произвольной) системы счисления в другую, а также выполнение простейших арифметических операций(сложение, вычитание, умножение) в системах счислений отличных от десятеричной.
Использую первое из вышеуказанных правил можно сделать вывод, что для перевода числа в десятеричную систему счислений необходимо найти сумму произведений чисел, находящихся в некотором разряде на основание системы счисления в степени этого разряда. Получим формулу:
Пример 1. Перевести число в десятеричную систему счисления.
Решение: отсчет разрядов начинаем с нуля справа на лево, тогда цифре 0 соответствует разряд 0, 1 разряд 1, 0 разряд 2 и 1 разряд 3. Воспользуемся формулой:
Таким образом
Для реализации данного алгоритма на языке паскаль необходимо понять, как возвести число в некоторую положительную степень. Для этого необходимо использовать безусловный цикл , который позволяет умножить числа само на себя определенное количество раз, что эквивалентно определению степени числа.
Рисунок 1
Рисунок 2
Чтобы возвести число в степень необходимо выполнить следующий код на языке Pascal (Рисунок 2). После выполнения данной программы в переменной получим необходимое нам значение. Для возведения основания системы счисления в степень, равную разряду, в котором находится некоторая цифра числа будем использовать функцию Step (Рисунок 1). Данная функция имеет два входных параметра: разряд ( ) и основание СС ( ), а также нулевому разряду данная функция ставит в соответствие значение 1. Тогда для перевода целых чисел из систем счисления с основаниями от 2 до 9 в десятеричную систему счисления, код программы будет выглядеть следующим образом (Рисунок 3).
Рисунок 3
Теперь необходимо реализовать правило для перевода чисел из десятеричной системы счисления в системы счисления с основаниями от 2 до 16.
В СС с основаниями больше 11 двухзначные числа заменяются на латинские заглавные буквы. Среда программирования Pascal может выполнять арифметические операции только с числами, поэтому для представления латинских букв в виде чисел необходимо ввести строковую константу ( ), которая будет содержать все возможные остатки при делении на основание СС до шестнадцати.
Рисунок 4
Тогда для перевода целых чисел из десятеричной СС в другие СС с основаниями от 2 до 16, код программы будет выглядеть следующим образом (Рисунок 4). После выполнения данного кода в переменную будет записан необходимый нам результат.
Таким образом для перевода целых чисел из одной СС в другую мы будем пользоваться совокупностью вышеизложенных правил. Сначала мы будем переводить число в десятеричную систему счисления, а потом в ту систему счисления, которая нам необходима.
Пример 2. Перевести число в троичную систему счисления.
Решение: воспользуемся разработанной ранее программой. Введем входные данные:
Число, которое необходимо перевести (75648);
Основание СС данного числа (9);
Основание СС, в которую необходимо перевести число (3).
В результате ее работы нами будет получен следующий результат (Рисунок 5)
Рисунок 5
Заключение
Работая над научно-исследовательской работой, мне пришлось изучить учебно-методическую и научную литературу, а также проанализировать материал, изученный мной в школе.
Особенно мне понравилось разрабатывать приложение для перевода чисел из одной системы счисления в другие, так как при его создании возникало много ошибок и проблем, которые приходилось решать, прибегая к помощи преподавателей и одноклассников.
Целью данной работы было создание приложения для перевода чисел из одной системы счисления в другую средствами среды программирования Pascal.
Хоть материал работы и выходит за рамки школьной программы, но он может изучаться в средней и старшей школе.
Я считаю, что цели работы достигнуты, а задачи решены. Результатом решения поставленных задач является приложение программный код которого приведен в приложении 1.
Разработанное приложение позволяет переводить целые числа из одной СС в другую и проверить знания учащихся 9-11 классов. Углубленное изучение языка программирования Pascal и дальнейшая работа над данной программой может расширить ее функциональные возможности, что позволит решать более широкий класс задач.
Список литературы
Системы счисления и арифметика ЭВМ : учеб. пособие / И. Н. Бурдинский. – Хабаровск : Изд-во Тихоокеан. гос. ун-та, 2008. – 79 с. ISBN 978-5-7389-0733-3
Приложение 1. Код приложения на языке Pascal
program perevod;
uses crt;
const zn:string[16]='0123456789ABCDEF';
function Step(x,y:longint):longint;
var
i,st:longint;
begin
if x=0 then Step:=1
else begin
st:=1;
for i:=1 to x do begin
st:=st*y;
step:=st;
end;
end;
end;
var n,m,t,b,d,chis,razryd,star,osnov,otv:longint;
s,isx:string;
begin
clrscr;
writeln('Vvedite isxodnoe chislo');
readln(m);
otv:=m;
Writeln('Vvedite osnovanie SS isxodnogo chisla');
readln(osnov);
chis:=0;
razryd:=0;
repeat
b:=m mod 10;
if b<osnov then begin
d:= m div 10;
chis:=chis+b*Step(razryd,osnov);
razryd:=razryd+1;
m:=d;
end
else begin
writeln('Oshibka, nekkorektnoe osnovanie SS');
readln;
exit;
end;
until d=0;
writeln('Vvedite osnovanie sistemu v kotoryu neobxodimo perevesti chislo');
readln(t);
s:='';
n:=chis;
while n>0 do
begin
s:=zn[n mod t+1]+s;
n:=n div t;
end;
write('Chislo ',otv:4,' v ',osnov:2,' -ichnoi SS ravno ',s,' v ',t:2,' -ichnoi SS');
readln;
end.