![](/user_photo/2706_HbeT2.jpg)
Лабораторная работа №1
Представление числовой информации с помощью систем счисления. Программирование линейных алгоритмов. Запись и считывание данных из файла последовательного доступа
Цель работы
Изучить представление числовой информации с помощью систем счисления (с/с) и методику перевода чисел из одной системы счисления в другую. Выработать практические навыки работы с оболочкой компилятора Visual Basic системы Visual Studio. Научиться создавать и отлаживать простейшие программы, реализующие линейные алгоритмы на языке Visual Basic. Изучить процедуру записи и считывания информации в файл.
Программа работы
Ознакомиться с описанием лабораторной работы.
В соответствии с вариантом задания (табл. 1) выполнить перевод из данной с/с в остальные (2 с/с, 8 с/с, 10 с/с и 16 с/с).
Создать программу в среде Visual Studio на языке C++ калькулятора, основанного на линейном алгоритме и производящего перевод чисел из одной системы счисления в другую.
Создать событийную процедуру записи результата преобразования в файл.
Основные сведения
Представление числовой информации с помощью систем счисления
Система счисления — знаковая система, в которой числа записываются по определенным правилам с помощью символов некоторого алфавита, называемых цифрами.
Все системы счисления делятся на две большие группы: позиционные и непозиционные системы счисления. В позиционных системах счисления значение цифры зависит от положения в числе (десятичная, двоичная и т.д.), а в непозиционных – не зависит (римская система счисления).
Каждая позиционная система имеет определенный алфавит цифр и основание. Основание системы равно количеству цифр (знаков в ее алфавите) и определяет, во сколько раз различается значения одинаковых цифр, стоящих в соседних позициях числа.
Десятичная система счисления имеет алфавит цифр, состоящий из десяти арабских цифр, и основание, равное 10, двоичная — две цифры и основание 2, восьмеричная — восемь цифр и основание 8, шестнадцатеричная – шестнадцать цифр (в качестве цифр используются и буквы латинского алфавита) и основание 16.
В общем случае в десятичной системе счисления запись числа А10, которое содержит n целых разрядов числа и m дробных разрядов числа, выглядит следующим образом:
A10=an-1∙10n-1+…+a0∙100+a-1∙10-1+…+a-m∙10-m
В общем случае в двоичной системе счисления запись числа А2, которое содержит n целых разрядов числа и m дробных разрядов числа:
A2=an-1∙2n-1+ an-2∙2n-2+…+a0∙20+a-1∙2-1+…+a-m∙2-m
В системах счисления с основанием q числа в развернутой форме записываются в виде суммы степеней основания q с коэффициентами, в качестве которых выступают цифры 0, 1, q-1:
Aq=an-1∙qn-1+ an-2∙qn-2+…+a0∙q0+a-1∙q-1+…+a-m∙q-m
Перевод чисел из одной системы счисления в другую
Перевод чисел в 10 с/с
Для перевода числа из q-ичной системы в десятичную необходимо записать его в развернутой форме и произвести вычисления.
Из 2 с/с в 10 с/с: 10,112=1∙21+0∙20+1∙2-1+1∙2-2=1∙2+0∙1+1∙1/2+1∙1/4=2,7510.
Из 8 с/с в 10 с/с: 67,58=6∙81+7∙80+5∙8-1=6∙8+7∙1+5∙1/8=55,62510.
Из 16 с/с в 10 с/с: 19F16=1∙162+9∙161+F∙80=1∙256+9∙16+15∙1=41510.
Перевод чисел из 10 с/с в 2 с/с, 8 с/с и 16 с/с
Алгоритм перевода целых десятичных чисел в 2 с/с, 8 с/с и 16 с/с:
Последовательно выполнять деление исходного целого десятичного числа и получаемых целых частных на основание системы (на 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно) до тех пор, пока не получится частное, меньшее делителя (т.е. меньшее 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно).
Записать полученные остатки в обратной последовательности.
Рассмотрим алгоритм перевода целых чисел на примере перевода целого десятичного числа А10=42410 в 16 с/с, т.е. из с/с с основанием р=10 в с/с с основанием q=16.
В процессе выполнения алгоритма все действия осуществляются в исходной с/с (здесь 10 с/с), а полученные остатки записываются цифрами новой с/с (здесь 16 с/с).
В результате получаем шестнадцатеричное число: A16=1A816.
Алгоритм перевода правильных десятичных дробей в 2 с/с, 8 с/с и 16 с/с:
Последовательно выполнять умножение исходной десятичной дроби и получаемых дробных частей произведений на основание системы (на 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно) до тех пор, пока не получится нулевая дробная часть или не будет достигнута требуемая точность вычислений.
Записать полученные целые части произведения в прямой последовательности.
Рассмотрим перевод дробных чисел на примере перевода десятичной дроби А10=0,40625 в 8 с/с, то есть из с/с с основанием р=10 в с/с с основанием q=8.
В результате получаем восьмеричную дробь: А8=0,328.
Перевод чисел, содержащих и целую, и дробную части, производится в два этапа: отдельно переводится по соответствующему алгоритму целая часть и отдельно — дробная. В итоговой записи полученного числа целая часть от дробной отделяется запятой.
Перевод чисел из с/с с основанием p в с/с с основанием q
Чтобы перевести произвольное число из с/с с основанием р = 2m в с/с с основанием q = 2n, необходимо:
В р-ичном числе объединить разряды влево и вправо от запятой в группы по m разрядов в каждую.
Если крайние группы окажутся неполными, то необходимо дополнить их нулями до полных групп.
Рассмотреть каждую группу как n-разрядное q-ичное число и заменить его на соответствующую цифру системы счисления с основанием q.
Пример.
0001 1011 1111 0000 , 0110 10002 = 1BF0