Лабораторная работа №2. Функции и циклы.

Требования к выполнению заданий

  • Перед выполнением скачать заготовку Lesson2.cpp и ознакомиться с ней.
  • Все задачи требуется решать в виде функций.
  • Функции следует проверять при помощи функции Test(), убирая комментарий с нужных тестов.
  • Все функции должны сопровождаться комментариями, содержащими описание задачи.
  • Не использовать функции pow, ln, exp.

Циклы с фиксированным числом повторений

  1. [Функция int sqr(int n)] Дано целое число N. Найти его квадрат, пользуясь формулой \[ N^2=1+3+5+...+(2N-1) \]

  2. [Функция double harmonicNumber(int n)] Найти сумму \[1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{N}\]

  3. [Функция double progressionSum(double a, int n)] Дано вещественное число A и целое число N. Используя один цикл, найти значение выражения \[ 1-A+A^2-A^3+...+(-1)^N A^N \] 

  4. [Функция double factorial(int n)] Дано целое число. Найти произведение \[ N!=1*2*3*...*N \]

  5. [Функция int Fibonacci(int n)]  Последовательность чисел Фибоначчи \( F_k \) целого типа определяется формулой \[ F_1=1,\,F_2=1,\,....F_k=F_{k-1}+F_{k-2} \] Найти элемент \( F_n \)

Условные циклы

  1. [Функция void digitsCountAndSum(int n, int &count, int &sum)] Дано целое число. Найти количество его цифр и их сумму.

    Указание. Реализацию алгоритма обработки всех цифр числа на C++ можно посмотреть в примере 6 второй части разговорника.

  2. [Функция void maxDigit(int n, int &max, int &position)] Дано целое число. Определить значение наибольшей цифры в записи этого числа и номер ее разряда, считая от разряда единиц.

  3. [Функция int invertTheNumber(int n)] Дано целое число N. Используя операции деления нацело и взятия остатка от деления, найти число, полученное при прочтении числа N справа налево  invertTheNumber(123)==321. Число должно сохранить знак.
  4. [Функция bool isFibonacciNumber(int n)] Дано целое число N. Установить, является ли оно числом Фибоначчи.
  5. Вычисления с заданной точностью в большинстве наших задач предполагают приближённое вычисление бесконечной суммы \[ \sum\limits_{i=0}^\infty a_i \] с помощью вычисления конечного отрезка этой суммы: \[ S(n)=\sum\limits_{i=0}^n a_i \]

    ×

    Вычисления с заданной точностью останавливаются, когда модуль разности между двумя последовательно вычисленными значениями, S(n) и S(n–1), становится меньше некоторого небольшого положительного значения eps. Однако не следует явно вычислять эту разность, благодаря тому, что она равна последнему слагаемому. То есть: \[\begin{array}{rcl} S(n-1) & = & a_1 + a_2 + \ldots + a_{n-1}, \\ S(n) & = & a_1 + a_2 + \ldots + a_{n-1} + a_n. \end{array}\] Вычисление останавливается, когда \[|S(n) - S(n-1)| = |a_n| < eps.\]

[Функция double myExp(double x, double eps=0.1e-6)] С точностью eps вычислить значение выражения \[ S=1+x+\frac{x^2}{2!}++\frac{x^3}{3!}+...=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!} \].