Перевод чисел из одной системы счисления в другую Представление числовой информации с помощью систем счисления. Программирование линейных алгоритмов. Запись и считывание данных из файла последовательного доступа Цель работы Изучить представление числовой информации с помощью систем счисления (с/с) и методику перевода чисел из одной системы счисления в другую. Выработать практические навыки работы с оболочкой компилятора Visual Basic системы Visual Studio. Научиться создавать и отлаживать простейшие программы, реализующие линейные алгоритмы на языке Visual Basic. Изучить процедуру записи и считывания информации в файл. Программа работы 1. Ознакомиться с описанием лабораторной работы. 2. В соответствии с вариантом задания (табл. 1) выполнить перевод из данной с/с в остальные (2 с/с, 8 с/с, 10 с/с и 16 с/с). 3. Создать программу в среде Visual Basic калькулятора, основанного на линейном алгоритме и производящего перевод чисел из одной системы счисления в другую. 4. Создать событийную процедуру записи результата преобразования в файл. Основные сведения Представление числовой информации с помощью систем счисления Система счисления — знаковая система, в которой числа записываются по определенным правилам с помощью символов некоторого алфавита, называемых цифрами. Все системы счисления делятся на две большие группы: позиционные и непозиционные системы счисления. В позиционных системах счисления значение цифры зависит от положения в числе (десятичная, двоичная и т.д.), а в непозиционных – не зависит (римская система счисления). Каждая позиционная система имеет определенный алфавит цифр и основание. Основание системы равно количеству цифр (знаков в ее алфавите) и определяет, во сколько раз различается значения одинаковых цифр, стоящих в соседних позициях числа. Десятичная система счисления имеет алфавит цифр, состоящий из десяти арабских цифр, и основание, равное 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 с/с: 1. Последовательно выполнять деление исходного целого десятичного числа и получаемых целых частных на основание системы (на 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно) до тех пор, пока не получится частное, меньшее делителя (т.е. меньшее 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно). 2. Записать полученные остатки в обратной последовательности. Рассмотрим алгоритм перевода целых чисел на примере перевода целого десятичного числа А10=42410 в 16 с/с, т.е. из с/с с основанием р=10 в с/с с основанием q=16. В процессе выполнения алгоритма все действия осуществляются в исходной с/с (здесь 10 с/с), а полученные остатки записываются цифрами новой с/с (здесь 16 с/с).  В результате получаем шестнадцатеричное число: A16=1A816. Алгоритм перевода правильных десятичных дробей в 2 с/с, 8 с/с и 16 с/с: 1. Последовательно выполнять умножение исходной десятичной дроби и получаемых дробных частей произведений на основание системы (на 2, 8 или 16 для 2 с/с, 8 с/с или 16 с/с соответственно) до тех пор, пока не получится нулевая дробная часть или не будет достигнута требуемая точность вычислений. 2. Записать полученные целые части произведения в прямой последовательности. Рассмотрим перевод дробных чисел на примере перевода десятичной дроби А10=0,40625 в 8 с/с, то есть из с/с с основанием р=10 в с/с с основанием q=8.  В результате получаем восьмеричную дробь: А8=0,328. Перевод чисел, содержащих и целую, и дробную части, производится в два этапа: отдельно переводится по соответствующему алгоритму целая часть и отдельно — дробная. В итоговой записи полученного числа целая часть от дробной отделяется запятой. Перевод чисел из с/с с основанием p в с/с с основанием q Чтобы перевести произвольное число из с/с с основанием р = 2m в с/с с основанием q = 2n, необходимо: 1. В р-ичном числе объединить разряды влево и вправо от запятой в группы по m разрядов в каждую. 2. Если крайние группы окажутся неполными, то необходимо дополнить их нулями до полных групп. 3. Рассмотреть каждую группу как n-разрядное q-ичное число и заменить его на соответствующую цифру системы счисления с основанием q. Пример. 0001 1011 1111 0000 , 0110 10002 = 1BF0 , 6816 |