ЗАДАНИЕ 1. СИСТЕМЫ СЧИСЛЕНИЯ

Правило 2 Перевод целой части числа

Целую часть числа, записанную в р-йчной с/с, делят на основание новой с/с q до получения целого частного (все операции выполняются по правилам Р-ичной с/с). В остатке получается число, являющееся последней (младшей) цифрой записи числа в q-ичной с/с (эта цифра записана в Р-ичной с/с, надо перейти в q-ичную с/с). Полученное частное снова делят на основание q; в остатке будет число, являющееся предпоследней цифрой искомой записи, и т.д. Операцию деления повторяют до тех пор, пока в частном не получат число, меньшее чем q. Это и будет первая (старшая) цифра записи переводимого числа в q-ичную с/с.

Правило 3. Перевод дробной части числа.

Правило 2 Перевод целой части числа

Целую часть числа, записанную в р-йчной с/с, делят на основание новой с/с q до получения целого частного (все операции выполняются по правилам Р-ичной с/с). В остатке получается число, являющееся последней (младшей) цифрой записи числа в q-ичной с/с (эта цифра записана в Р-ичной с/с, надо перейти в q-ичную с/с). Полученное частное снова делят на основание q; в остатке будет число, являющееся предпоследней цифрой искомой записи, и т.д. Операцию деления повторяют до тех пор, пока в частном не получат число, меньшее чем q. Это и будет первая (старшая) цифра записи переводимого числа в q-ичную с/с.

Правило 3. Перевод дробной части числа.

Дробную часть числа, записанную в Р-ичной. с/с, умножают в Р-ичной системе на основание q. Целая часть произведения будет первой (старшей) цифрой изображения дроби в q-ичной с/с. Дробную часть произведения снова умножают на q. Целая часть произведения будет следующей цифрой записи дроби в q-ичной с/с. Процесс продолжают до тех пор, пока дробная часть произведения не будет нулевой, или пока не получат требуемое количество знаков записи дроби в q-ичной с/с.

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

Правило 4. Перевод чисел в 10 с/с.

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

R=asPs+ as-1Ps-1+…+ a2P2+a1P1+a0P0+a-1P-1+….+a-kP-k

где Р – основание системы счисления.

Выражение в правой части вычисляют в 10 с/с.

При переводе чисел в двоичную систему счисления проще сначала десятичное число перевести по общему правилу в восьмеричную систему счисления и далее каждую цифру представить триадами двоичной системы счисления.

Алгоритм  перевода из 8-ной в 2-ную:

Начало алгоритма

1. Введем:         i; j - переменные цикла

                       l - счетчик триад

                       y – переменная для целого восьмеричного числа

                       y1 - целое двоичное

                       char *z1,*z2; - указатели на начало строк

2. Вводим массив с данными для замены

       s2[8][3]={“000”,”001”, ”010”, ”011”, ”100”, ”101”, ”110”, “111”};

3. Вводим целочисленное восьмеричное число y

4. Преобразовываем число в строку

               itoa(y,z1,10);

               k=strlen(z1);  - длина строки = числу разрядов

5.  Цикл перебора «символов цифр» строки

               i=0 до i<k шаг по i=1

       Цикл (выбор: какая цифра в текущем разряде)

               j=’0’ до j<=’9’ шаг по j=1

Если z1[i] есть j, копируем соответствующую триаду (двоичную) в строку z2

       strcat(z2,&s2[j-‘0’-1][3]);  l+=3;

6. По завершении циклов z2[l]=’\0’; - устанавливаем конец строки

7. Переводим строку в число

               y1=atoi(z2);

       печатаем результат у1.

Конец алгоритма.

Алгоритм перевода дробной части числа

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

Начало алгоритма

1. Подключаем необходимые заголовочные файлы

2. Объявляем

       double i1, y - целая и дробная части числа

       z2[100] -

       int p,k - основание системы и число знаков после запятой

3. Вводим число y=0,xxx и точность перевода

4. Выполняем от i=0 до i<k с шагом i=1

       а) y=y*p - последовательное умножение только целой части

       б) выделение целой части и дробной

               y= modf(y,&i1); 

функция modf(double x, double *i) - выделяет целую и дробную части числа типа double, дробная часть возвращается функцией, а целая записывается по адресу указателя i;

       в) заносим целую часть в массив z2[i]=i1, если y=0, то прервать!

5. Печать дробной части:

       printf (“ y1 = 0.”);

       Меняя j от 0 до i с шагом 1 выводим z2[j]

Конец алгоритма.

Алгоритм перевода целой части

       Должны выделять остаток от деления <p на текущем шаге и запоминать его. Потом запомнить частное от деления и вывести в обратном порядке

Начало алгоритма

1. Подключаем необходимые заголовочные файлы

2. Объявляем: целые

       j=0 - переменная цикла

       i=0 - счетчик разрядов нового числа

       p - основание новой с\с

       y - число для перевода

       z2[100] - массив с разрядами нового числа

3. Вводим y и p

4. Выполнять пока y>=p                         

  (начало цикла)

       а) занесение остатка от текущего шага деления

               z2[i]=y%p;

       б) y=y/p; - выделяем  частное, полученное на текущем шаге, использовали тот факт, что в С целое на целое= целое

       в) i увеличили на единицу

  (конец цикла)

  i увеличили на единицу и запоминаем последнее частное от деления z2[i]=y;

5. Печатаем массив в обратном порядке

               j от i-1 до j>=0 шаг уменьшаем на 1

               печать z2[j];

Конец алгоритма.

Варианты заданий

Создать программу с пунктами меню:

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

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

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

№ вАРИАНТА. ИсХОДНАЯ сИСТЕМА СЧИСЛЕНИЯ

  ИсходнЫе числА

1.  Перевести из С/С с основанием (2)в С/С с основанием (3)

и наоборот

11001.1101112

111.0213

2. Перевести из С/С с основанием (2) в С/С с основанием (4)

и наоборот

1001111.001112

203.2324

3. Перевести из С/С с основанием (2) в С/С с основанием (5)

и наоборот

1010011.101000112

300.12335

4. Перевести из С/С с основанием (2) в С/С с основанием (6)

и наоборот

100101.00011112

152.31236

5. Перевести из С/С с основанием (2) в С/С с основанием (7)

и наоборот

1011001.011112

104.12217

6. Перевести из С/С с основанием (2) в С/С с основанием (8)

и наоборот

11110111.0112

1336.7278

7. Перевести из С/С с основанием (2) в С/С с основанием (9)

и наоборот

1001001.001012

130.3779

8. Перевести из С/С с основанием (2) в С/С с основанием (11) и наоборот

111111.10000012

170.8411

9. Перевести из С/С с основанием (2) в С/С с основанием (12) и наоборот

11101010.00101112

D0.BA6812

10. Перевести из С/С с основанием (2)  в С/С с основанием (13) и наоборот

100000001.1101012

AC.48A13

11. Перевести из С/С с основанием (2) в С/С с основанием (14 и наоборот

101100100.01001012

88.5A514

12. Перевести из С/С с основанием (2) в С/С с основанием (15 и наоборот

110110101.1001012

84.A53B15

13.Перевести из С/С с основанием (2) в С/С с основанием (16) и наоборот

101100111.1001112

1BD.BAE16

14. Перевести из С/С с основанием (2) в С/С с основанием (18) и наоборот

100001001.11000012

8D.8EDC18

15.Перевести из С/С с основанием (2) в С/С с основанием (19) и наоборот

101111000.111000112

D4.HG6819

Таблицы соответствия

10

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

~

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

G

H

I

J

K

1/2

  1/4

  1/8

  1/16

  1/32

  1/64

  1/128

  1/256

0,5

0,25

0,125

0,0625

0.03125

0,0156

  0,0078

0,0039

Вы здесь: