You are on page 1of 7

Лабораторна робота № 4

Тема роботи: Програмування рекурсивних функцій

Мета роботи:  практично закріпити теоретичні знання про рекурсивні


функції;  навчитися застосовувати рекурсивні функції для реалізації
різноманітних задач;  порівняти рекурсивний та нерекурсивний (ітераційний)
варіанти програми (функцій) за складністю, наочністю і швидкодією.

Завдання лабораторної роботи


1. Перед початком роботи повторити теоретичний матеріал про організацію
рекурсивних обчислень, структуру, форми запису, схеми виконання, переваги та
недоліки рекурсивних функцій.
2. Розробити алгоритм розв’язування задачі з індивідуального завдання.
3. Написати ітераційний (нерекурсивний) варіант (або кілька варіантів)
заданої функції. У процесі роботи ця функція може звертатися до інших
допоміжних функцій. Якщо ітераційну версію функції написати складно, то
можна опустити цей крок завдання, зосередивши увагу на рекурсивній функції.
4. Записати основну програму, в якій забезпечити введення вхідних даних
для перевірки правильності роботи розробленої функції та зручне відображення
результатів на екрані. Якщо це сприятливо для програми, то розробити відповідні
допоміжні функції, наприклад, для введення та виведення даних, виконання
певних перетворень або перевірок тощо.
5. Реалізувати програму для декількох наборів вхідних даних і занотувати
результати.
6. Написати рекурсивний варіант реалізації заданої функції. У ряді випадків
доцільно, щоб рекурсивна функція викликалася з іншої додаткової нерекурсивної
функції. Можливі рішення, коли рекурсивна функція буде виконувати тільки
якусь частину з того завдання, яке має виконувати задана функція. Обов’язково
треба звернути увагу на базис – умову завершення рекурсії та на коректне задання
параметрів і запис рекурсивних викликів. Яку рекурсію – хвостову чи внутрішню
– краще застосувати в рекурсивній функції? Яка між ними різниця?
7. Якщо рекурсивна функція має формувати масив або символьний рядок, то
можна зробити такий масив (рядок) глобальним, щоби зменшити кількість
параметрів функції. Там, де це доцільно, можна також скористатися статичними
локальними змінними функції.
8. Реалізувати програму з рекурсивною функцією для тих самих вхідних
даних, що застосовувалися при виконанні п.5, і порівняти отримані результати.
Записати у звіт текст рекурсивної версії програми і результати його реалізації.
9. Доповнити рекурсивну функцію операторами виведення номера виклику
функції. Для цього можна скористатись одним із параметрів функції, а якщо
відповідного немає, то доповнити список таким параметром. Можна також
застосувати відповідно оголошену глобальну або статичну змінну. Значення цього
контрольного параметра треба виводити перед рекурсивним викликом і після
нього з відповідним текстовим повідомленням. Запустити програму для рекурсії
невеликої глибини (3..5). Проаналізувати виведені значення і занести їх у звіт
після тексту відповідно доповненої версії рекурсивної функції.
10. Оформити звіт з лабораторної роботи. У висновках до роботи порівняти
рекурсивний та ітераційний (нерекурсивний) варіанти реалізації заданих функцій.

Варіанти індивідуальних завдань


1. Розробити функцію, яка перевіряє, чи задане беззнакове ціле число є степенем
числа 2 (у функції не застосовувати операцій множення, ділення чи остачі).
Згенерувати масив із заданої кількості цілих випадкових чисел з діапазону
1..256. На основі розробленої функції визначити, чи є серед цих чисел степені
2, та надрукувати їх або зазначити, що таких чисел не згенеровано.
2. Розробити функцію, яка визначає кількість n-розрядних десяткових чисел,
сума цифр яких дорівнює заданому значенню sc (1  n 5, 1  sc  9n). Протес-
тувати роботу функції на підготованому наборі вхідних значень. Підказка: у
функції доцільно скористатися циклом перебору цифр числа.
3. Розробити функцію, яка перевіряє, чи входить у заданий символьний рядок
вказана трисимвольна комбінація (бібліотечну функцію strstr() не застосову-
вати). З клавіатури у масив ввести декілька символьних рядків і комбінацію з
трьох символів. Використовуючи розроблену функцію, вказати, в які з
введених рядків входить задана комбінація.
4. Розробити функцію, яка здійснює пошук заданого числа у впорядкованому за
зростанням значень масиві цілих чисел, використовуючи метод половинного
ділення. Функція має повертати номер цього елемента (починаючи з 1) або 0,
якщо такого елемента в масиві нема. З клавіатури ввести цілочислову матрицю
і задане число. На основі розробленої функції визначити рядки матриці, в які
входить це число, і вказати номер числа в рядку.
5. Розробити функцію для порівняння двох українських слів за абетковим
порядком. З клавіатури по одному ввести набір українських слів і занести їх у
масив символьних рядків. Використовуючи розроблену функцію, відсортувати
введені слова за абетковим порядком.
6. Розробити функцію, параметром якої є символьний рядок, що зберігає
арифметичний вираз виду: n1 ± n2 ± n3 ± n4 ± … , де n1, n2, n3, n4 … – цілі нату-
ральні числа; ± – знак арифметичної операції (плюс або мінус). Функція має
обчислити та повернути значення заданого виразу. З клавіатури ввести
декілька рядків із виразами. Використовуючи розроблену функцію, обчислити
та надрукувати значення кожного з них. Підказка: у рекурсивній функції
доцільно замість операції віднімання змінювати знак наступного доданка.
7. Розробити функцію, яка визначає та виводить на екран всі можливі розклади
заданого натурального числа N (10  N  1000) на k (1  k 5) різних ненульо-
вих доданків. З клавіатури ввести беззнакове ціле число, що належить
вказаному діапазону. Використовуючи розроблену функцію, подати можливі
варіанти розкладу введеного числа на задану кількість доданків. Підказка: у
функції доцільно скористатися циклом перебору можливих доданків.
8. Розробити функцію, яка обчислює найменше спільне кратне (НСК) двох
заданих натуральних чисел. З клавіатури ввести матрицю беззнакових цілих
чисел. Використовуючи розроблену функцію, визначити НСК елементів
кожного рядка введеної матриці.
9. Розробити функцію, яка вставляє в масив дійсних чисел, відсортований за
порядком зростання значень елементів, додаткове число, зберігаючи загальну
впорядкованість. З клавіатури ввести матрицю дійсних чисел, в якій елементи
кожного рядка відсортовані за зростанням значень, та додаткове число.
Використовуючи розроблену функцію, вставити це число в кожен рядок
матриці на відповідне місце як додатковий елемент. Надрукувати доповнену
матрицю.
10.Розробити функцію, яка перевіряє, чи заданий символьний рядок є
паліндромом, тобто, однаково читається зліва направо і справа наліво (великі й
малі літери у паліндромах не розрізняються, пробіли та розділові знаки
пропускаються). З клавіатури ввести послідовність символьних рядків.
Використовуючи розроблену функцію, вказати для кожного з рядків, чи є він
паліндромом. Результат подати у формі таблиці.
11.Розробити дві функції, 1) для перевірки, чи останній елемент заданого масиву
дійсних чисел є найменшим у цьому масиві; 2) для вилучення із заданої
матриці дійсних чисел всіх рядків, в яких найменший елемент не є останнім
(вилучення рядка полягає в підтягуванні всіх наступних рядків угору). З
клавіатури ввести матрицю дійсних чисел. На основі розроблених функцій
перевірити рядки введеної матриці та вилучити ті, що не відповідають умові
мінімального останнього елемента. Надрукувати скорочену матрицю.
12.Розробити функцію, параметром якої є символьний рядок, що зберігає
арифметичний вираз виду: n1n2n3n4 … , де n1, n2, n3, n4 … – довільні дійсні
числа. Функція має обчислити та повернути дійсне число, що дорівнює
значенню заданого добутку. З клавіатури ввести декілька рядків із виразами
добутків. Використовуючи розроблену функцію, обчислити та надрукувати
значення кожного з цих виразів.
13.Розробити функцію, яка знаходить усі прості дільники заданого натурального
числа N, вказуючи кількість повторень кожного з них,наприклад:
792 = 2 × 2 × 2 × 3 × 3 × 11
З клавіатури ввести масив довгих цілих чисел. Використовуючи розроблену
функцію, подати розклад кожного з введених чисел на прості множники.
14.Розробити функцію, яка перетворює задане речення так, щоб усі слова
починалися з великої літери. З клавіатури в масив символьних рядків ввести
декілька речень. Використовуючи розроблену функцію, перетворити введені
речення і надрукувати результат.
15.Розробити дві функції, 1) для обчислення середнього значення елементів
заданого масиву дійсних чисел; 2) для переставляння елементів одновимірного
масиву дійсних чисел у зворотному порядку. З клавіатури ввести матрицю
дійсних чисел заданої розмірності. На основі розроблених функцій
прореверсувати всі рядки введеної матриці і вказати, в якому рядку середнє
значення елементів найбільше.
16.Розробити функцію, яка здійснює пошук заданого елемента у впорядкованому
за спаданням значень масиві цілих чисел, використовуючи метод половинного
ділення. Функція має повертати вказівник на знайдений елемент або NULL,
якщо такого елемента в масиві нема. З клавіатури ввести матрицю цілих чисел
і число для пошуку. Використовуючи розроблену функцію, визначити і вказати
номери рядків, які містять задане число, або зазначити, що таких немає.
17.Розробити функцію, яка здійснює сортування заданого масиву дійсних чисел за
порядком зростання значень, використовуючи т. зв. лінійний метод (вибіркове
сортування). На основі розробленої функції відсортувати за порядком
зростання значень, кожен рядок введеної з клавіатури матриці дійсних чисел.
Надрукувати отриману матрицю.
18.Розробити функцію, яка обчислює кількість можливих двійкових комбінацій,
що складаються із рівно k одиниць та m нулів (k та m – натуральні числа,
значення яких не перевищує 30). Протестувати роботу функції на підготова-
ному наборі вхідних значень.
19.Розробити функцію, яка формує символьний рядок, що відповідає коду
заданого цілого числа в системі числення з основою В (10 < В  36). У масив
занести послідовність введених з клавіатури цілих натуральних чисел –
введення має завершуватись довільним символом. На основі розробленої
функції надрукувати таблицю введених чисел та їхніх В-кодів.
20.Задано безмежну послідовність, що складається з натуральних чисел, кожне з
яких повторюється кількість разів, що дорівнює значенню цього числа:
1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5… Розробити функцію, яка знаходить і повертає
значення числа, яке є n-м (1  n  100 000) у цій послідовності (масив чисел не
сворювати, бо послідовність безмежна). Протестувати роботу розробленої
функції для різних заданих значень параметра n.
21.Розробити функцію, яка визначає, чи слово, що перевіряється, відповідає
заданому шаблону. Шаблон складається із набору літер та знаків * і ?. Літери в
шаблоні вказують, що саме такий символ має бути в цьому місці слова, *
позначає довільну кількість (або відсутність) будь-яких літер, а ? – одну
довільну літеру. З клавіатури в масив символьних рядків ввести декілька
різних слів та шаблон для перевірки. Використовуючи розроблену функцію,
вказати, які з цих слів відповідають шаблону.
22.Розробити функцію, яка обчислює т. зв. цифровий корінь заданого довгого
натурального числа (цифровий корінь знаходять так: додають всі цифри цього
числа, потім всі цифри знайденої суми і повторювати цей процес доти, поки в
результаті не буде однорозрядне число – цифра). Згенерувати масив з N
випадкових довгих беззнакових цілих чисел (кожне число сформувати з двох
частин – випадкових цілих чисел). Використовуючи розроблену функцію,
знайти цифровий корінь кожного з цих чисел.
23.Розробити функцію, яка формує символьний рядок, що відповідає п’ятірко-
вому коду заданого цілого числа (не звертатись до відповідних бібліотечних
функцій). Згенерувати масив з N випадкових беззнакових цілих чисел. На
основі розробленої функції надрукувати таблицю введених чисел та їхніх
п’ятіркових кодів.
24.Розробити функцію, яка обчислює цілочисловий степінь заданого дійсного
аргумента, використовуючи т. зв. швидкий індійський метод:

1, якщо n  0

x n  ( x n / 2 ) 2 , якщо n парне
 x  ( x ) , якщо n непарне
n / 2 2

Сформувати масив з K випадкових дійсних чисел у діапазоні 1..100 (окремо
згенерувати цілу і дробову частини числа). На основі розробленої функції
надрукувати таблицю згенерованих чисел та їхніх степенів (щонайменше
трьох-чотирьох).
25.Розробити функцію, параметром якої є символьний рядок – речення. Функція
має надрукувати всі слова з цього речення, в яких перша й остання літери
збігаються (незалежно від регістрів літер) та повернути кількість знайдених
слів. З клавіатури ввести декілька різних речень. Використовуючи розроблену
функцію, надрукувати всі слова з цих речень з однаковими першою та
останньою літерами.
26.Розробити функцію, яка формує та виводить на екран всі неоднакові
послідовності з N нулів та одиниць, що містять рівно K одиниць (N і K – два
цілі числа, K  N  25 ). Протестувати роботу функції для різних вхідних
значень.
27.Розробити функцію, яка переставляє у зворотному порядку цифри заданого
довгого цілого числа (наприклад, число 5321 перетворюється у 1235 ). З
клавіатури ввести масив довгих цілих чисел. Використовуючи розроблену
функцію, замінити (прореверсувати) всі числа цього масиву і надрукувати
результат заміни.
28.Розробити функцію, яка обчислює значення полінома степеня n ( n  0 ):
y  an x n  an 1 x n 1  ...  a1 x  a0 для заданого значення x0 ( x0 – дійсне число),
не використовуючи операції піднесення до степеня. Коефіцієнти полінома є
дійсними числами і зберігаються у масиві, починаючи з an. З клавіатури ввести
матрицю дійсних чисел розмірності m  (n  1) . Використовуючи розроблену
функцію, визначити значення поліномів вказаного степеня n, для коефіцієнтів,
що задаються елементами кожного з m рядків матриці.
29.Розробити функцію, яка здійснює сортування заданого масиву дійсних чисел за
порядком спадання значень, використовуючи метод т. зв. сортування
вставленням. На основі розробленої функції відсортувати за порядком
спадання значень, кожен рядок введеної з клавіатури матриці дійсних чисел.
Надрукувати отриману матрицю.
30.Розробити функцію, яка перетворює заданий символьний рядок, в якому
записано двійковий код числа, у відповідне десяткове число і повертає
значення цього числа (або -1 у разі помилкових символів). З клавіатури ввести
декілька рядків із двійковими кодами чисел. На основі розробленої функції
обчислити десяткове значення кожного з них. Надрукувати таблицю введених
двійкових кодів та їхніх десяткових значень, відзначивши коди з помилками.
31.Розробити функцію, яка визначає кількість натуральних (цілих, додатних)
розв’язків нерівності 𝑥 2 + 𝑦 2 ≤ 𝑛 для заданого натурального числа n (кількість
можливих значень x та y, що відповідають умові). Протестувати роботу функції
для різних заданих значень параметра n.

You might also like