Главная страница
Навигация по странице:

  • Решение ( использование программы )

  • Решение (использование программы в среде Pascal ABC . NET , А. Агафонцев)

  • Позиционные системы счисления


    Скачать 0.83 Mb.
    НазваниеПозиционные системы счисления
    Дата18.04.2022
    Размер0.83 Mb.
    Формат файлаdoc
    Имя файлаege14 3.doc
    ТипДокументы
    #483521
    страница2 из 14
    1   2   3   4   5   6   7   8   9   ...   14

    Пример задания:


    Р-25. (демо-2021) Значение арифметического выражения: 497 + 721 – 7 – записали в системе

    счисления с основанием 7. Сколько цифр 6 содержится в этой записи?

    Решение:

    1. приведём все числа к степеням семерки, учитывая, что 49 = 72

    714 + 721 – 71

    1. расставим степени в порядке убывания:

    721 + 714 – 71

    1. Очевидно, что «шестёрки» в семеричной записи значения выражения возникнут только за счёт вычисления разности 714 – 71, их количество равно 14-1=13

    2. Ответ: 13.

    Решение (использование программы):

    1. язык Python позволяет работать с большими числами, не задумываясь о том, что для их хранения требуется больше памяти, чем для «обычного» целого числа (когда значение не помещается в 4 байта, интерпретатор автоматически переходит на представление числа в виде массива с «длинной арифметикой»)

    2. поэтому может быть написана программа, которая вычисляет нужное значение и методом деления в столбик определяет все цифры его записи в семеричной системе счисления; шестёрки считаем с помощью счётчика count6:

    x = 49**7 + 7**21 - 7

    count6 = 0

    while x:

    if x % 7 == 6: count6 += 1

    x //= 7

    print( count6 )

    1. Ответ: 13.

    Решение (использование программы в среде Pascal ABC.NET, А. Агафонцев):

    1. Pascal ABC.NET за счет использования фреймворка .NET позволяет воспользоваться типом System.Numerics.BigInteger (предназначенным для произвольно больших целых со знаком) и связанными с ним функциями.

    2. Таким образом, программа получается во многом схожей с программами на Python. Особо отметим, что использование функций возведения в степень не связанных с типом BigInteger для систем с основанием, не являющимся степенью двойки, приводит к неверным результатам из-за использования вещественных чисел. Например, BigInteger(power(9,34)) или BigInteger(9 ** 34) преобразуют вещественное число в целое произвольно большой длины, но еще при операции возведения в степень потеряется часть идеальной, математической мантиссы.

    3. В связи с вышесказанным допустимо только использование записей вида BigInteger.Pow(9,34).

    4. Полная программа:

    var

    a: BigInteger;

    k: int64;

    begin

    a := BigInteger.Pow(49, 7) + BigInteger.Pow(7, 21) - 7;

    k := 0;

    while (a > 0) do

    begin

    if (a mod 7 = 6) then

    k := k + 1;

    a := a div 7;

    end;

    writeln(k);

    end.

    1. Ответ: 13.

    Решение (использование программы на Java, М. Коротков):

    1. язык Java позволяет работать с большими числами с помощью типа BigInteger;

    2. может быть написана программа, которая вычисляет значение арифметического выражения и методом деления в столбик определяет все цифры его записи в семеричной системе счисления; шестёрки считаем с помощью счётчика amt6:

    3. полная программа:

    import java.math.BigInteger;
    public class Main {
    public static void main(String[] args) {
    final BigInteger SIX = BigInteger.valueOf(6);
    final BigInteger SEVEN = BigInteger.valueOf(7);
    final BigInteger NUM1 = BigInteger.valueOf(49).pow(7);
    final BigInteger NUM2 = BigInteger.valueOf(7).pow(21);

    BigInteger num = NUM1.add(NUM2).subtract(SEVEN);


    BigInteger amt6 = BigInteger.ZERO;
    while (!num.equals(BigInteger.ZERO)) {
    if (num.mod(SEVEN).equals(SIX)) {
    amt6 = amt6.add(BigInteger.ONE);
    }
    num = num.divide(SEVEN);
    }
    System.out.println(amt6);
    }
    }


    1. Ответ: 13.

    Ещё пример задания:


    Р-24. (М.В. Кузнецова) Значение арифметического выражения: 6410 + 290 - 16 записали в системе счисления с основанием 8. Сколько цифр «7» содержится в этой записи?

    Решение:

    1. Приведём все числа к степеням восьмерки, учитывая, что 16 = 64 - 48 =82-6∙81

    6410 + 290 - 16 = (82)10 + 23∙30 – (82 – 48) = 820 + 830 – 82 + 6∙81

    1. Перепишем выражение, располагая степени восьмёрки в порядке убывания:
      820 + 830 – 82 + 6∙81 = 830 + 820 – 82 + 6∙81

    2. Очевидно, что «семёрки» в восьмеричной записи значения выражения возникнут только за счёт вычисления разности 820 – 82, их количество равно 20-2=18

    3. Ответ: 18.

    Решение (использование программы в среде Pascal ABC.NET, А. Агафонцев):

    1. В среде Pascal ABC.NET при использовании типа BigInteger задача может быть решена с помощью программы:

    var

    a: BigInteger;

    k: int64;

    begin

    a := BigInteger.Pow(64, 10) + BigInteger.Pow(2, 90) - 16;

    k := 0;

    while (a > 0) do

    begin

    if (a mod 8 = 7) then

    k := k + 1;

    a := a div 8;

    end;

    writeln(k);

    end.

    1. Ответ: 18.

    Решение (программа на Python, Б.С. Михлин):

    1. если доступна среда программирования на Python, можно написать программу, которая использует встроенную арифметику длинных чисел:

    x = 64**10 + 2**90 - 16

    print( oct(x).count('7') )

    1. ответ: 18.
    1   2   3   4   5   6   7   8   9   ...   14


    написать администратору сайта