Лабы_по_проге_Берлин / Лабораторная работа 6
.docxЛабораторная работа №6. Функции. Рекурсия
Общие указания. Текст программ должен начинаться комментарием, содержащим: фамилию, имя, группу и условие задачи. Обе задачи решите в одной программе.
Теория 1.
Прочитайте страницы 72-78 учебного пособия по ОаиП.
Задание 1. Функции.
-
Напишите функцию int min (int a, int b, int c, int d), находящее наименьшее из четырех данных чисел.
-
Напишите функцию double power (double a, int n), вычисляющую значение an.
-
Напишите функцию bool Xor (bool x, bool y), реализующую функцию "Исключающее ИЛИ" двух логических переменных x и y. Функция Xor должна возвращать true, если ровно один из ее аргументов x или y, но не оба одновременно равны true.
-
Описать функцию вычисления факториала.
-
Описать функцию, вычисляющую значение "двойного факториала": N!! = 1·3·5·...·N, если N — нечетное, N!! = 2·4·6·...·N, если N — четное (N > 0 — параметр целого типа).
-
Описать функцию, вычисляющую сумму цифр целого числа.
-
Описать функцию вещественного типа, вычисляющую длину отрезка AB на плоскости по координатам его концов:
-
Напишите функцию логического типа, которая проверяет, является ли число простым.
-
Вычислить:
Теория 2.
Прочитайте страницы 86-90 учебного пособия по ОаиП.
Задание 2. Рекурсия.
-
Напишите рекурсивную функцию возведения в степень, пользующуюся следующим свойством: an=a*an-1.
-
Напишите функцию возведения в степень, которая работала бы для отрицательных значений n: a-n=1/an.
-
Напишите функцию быстрого возведения в степень, которая пользовалась бы следующими свойствами: an=(an/2)2 при четном n, an=a*an-1 при нечетном n.
-
Для биномиальных коэффициентов (числа сочетаний из n по k) хорошо известна рекуррентная формула: . Вычислите значение , пользуясь этой формулой и учитывая, что .
-
Описать рекурсивную функцию SqrtK(x,k,n) вещественного типа, находящую приближенное значение корня k-й степени из числа x по формуле: y(0) = 1, y(n+1) = y(n) – (y(n) – x / y(n)k–1) / k, где y(n) обозначает SqrtK(x,k,n) (x — вещественный параметр, k и n — целые; x > 0, k > 1, n > 0).
-
Описать рекурсивную функцию ElArifm(a,d,n) целого типа, находящую значение n-го члена арифметической прогрессии по формуле , d – разность прогрессии.
-
Описать рекурсивную функцию NOD(A,B) целого типа, находящую наибольший общий делитель двух натуральных чисел A и B, используя алгоритм Евклида: NOD(A,B) = NOD(B % A,A), если A <> 0; NOD(0,B) = B. С помощью этой функции найти наибольшие общие делители пар A и B, A и C, A и D, если даны числа A, B, C, D.
-
Описать рекурсивную функцию ElGeom(a,q,n) целого типа, находящую значение n-го члена геометрической прогрессии по формуле , q – знаменатель прогрессии.
-
Вычислить значение полинома степени n по формуле: