Загрузка...

HELP FOR SI

Thread in C/C++ created by cladiksj Oct 14, 2021. 199 views

  1. cladiksj
    cladiksj Topic starter Oct 14, 2021 1 Apr 20, 2021
    [IMG] 1. Реализовать функцию вычисления log2 для целочисленного аргумента: определить, в какую степень требуется возвести число 2, чтобы получить целочисленное число, передаваемое функции в виде параметра. Функция должна возвращать вычисленное значение логарифма. Если число не является степенью двойки, возвращать -1. Если аргумент находится вне области определения функции,возвращать -2.

    2. Реализовать рекурсивную и нерекурсивную функциинахождения наибольшего общего делителя (НОД) для двух целых чисел, передаваемых в виде параметров.Возвращаемое функциями значение – НОД.

    Пояснение. Рекурсивной называют функцию, которая в своём теле вызывает саму себя. Перед вызовом необходима проверка условия прекращения рекурсии.


    Одним из алгоритмов нахождения НОД с использованием рекурсии является бинарный алгоритм Евклида. Он основан на использовании следующих свойств НОД:

    - НОД(2m, 2n) = 2 НОД(m, n),
    - НОД(2m, 2n+1) = НОД(m, 2n+1),
    - НОД(-m, n) = НОД(m, n)

    Алгоритм:

    1. НОД(0, n) = n; НОД(m, 0) = m; НОД(m, m) = m;
    2. НОД(1, n) = 1; НОД(m, 1) = 1;
    3. Если m, n чётные, то НОД(m, n) = 2*НОД(m/2, n/2);
    4. Если m чётное, n нечётное, то НОД(m, n) = НОД(m/2, n);
    5. Если n чётное, m нечётное, то НОД(m, n) = НОД(m, n/2);
    6. Если m, n нечётные и n > m, то НОД(m, n) = НОД((n-m)/2, m);
    7. Если m, n нечётные и n < m, то НОД(m, n) = НОД((m-n)/2, n);

    Одним из алгоритмов нахождения НОД без рекурсии является геометрический алгоритм Евклида:

    1. Из большего числа вычитается меньшее.
    2. Если разность равна 0, то значит, что числа равны друг другу и являются НОД (следует выйти из цикла).
    3. Если результат вычитания не равен 0, то большее число заменяется результатом вычитания.
    4. Переход к пункту 1.

    Ещё один нерекурсивный алгоритм нахождения НОД делением:

    1. Большее число делится на меньшее.
    2. Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).
    3. Если есть остаток, то большее число заменяетсяостатком от деления.
    4. Переход к пункту 1.

    3. Реализовать вычисление с точностью ε функции с вещественным параметром f(x), заданной с помощью разложения в ряд Тейлора (см. Пояснение).
    Вывести на экран (или в строку) в виде таблицы значения функции на интервале xÎ[a,b], изменяющегося cшагом dx. Таблицу снабдить шапкой. Каждая строка таблицы должна содержать значение аргумента x, значение функции (вычисленное как сумма членов ряда Тейлора), количество просуммированных членов ряда (n) для обеспечения заданной точности ε, значение функции (вычисленное с помощью вызова функции стандартной библиотеки).

    Пояснение. Для достижения заданной точности ε при вычислении суммы ряда

    C0, C1, C2, …, Cn, Cn+1, …

    требуется суммировать члены ряда Cn, абсолютная величина которых не меньше ε. Для сходящегося ряда абсолютная величина члена ряда Cn при увеличении n стремится к нулю. При некотором n неравенство перестаёт выполняться,и вычисление суммы необходимо прекратить.

    Для уменьшения количества выполняемых действий и повышения точности вычислений следует воспользоваться рекуррентной формулой получения последующего члена ряда через предыдущий:

    Cn = T*Cn-1,где T – некоторый множитель.

    Например, при вычислении функции гиперболического косинуса в виде суммы ряда (здесь C0 = 1):


    Получим выражение для определения T:

    .

    Следовательно, очередной член ряда можно вычислить, зная предыдущий:

    ,

    Сам пример на скрине. Буду премного благодарен за помощь, господа.
     
Top
Loading...