
7.4 Завдання
1. Визначити функцiю (-iї), що реалiзують заданий алгоритм.
2. Визначити кiлькiсть крокiв рекурсiї, необхiдних для рiшення завдання.
Додатковi завдання для варiантiв 1-35:
1. При необхiдностi вивести рекурентнi спiввiдношення, що зв'язують наступний i попереднiй елементи формули, що програмується.
2. При програмуваннi алгебраїчних виразiв використати визначення бiльш примiтивних функцiй i на їх основi одержати iєрархiю визначень. Конструювання цiльової функцiї виконати методом композицiї ранiше визначених функцiй. Варiанти завдань наведенi в табл. 7.1 [1].
3. Записати виклик визначеної функцiї для заданих значень аргументiв.
4. Провести тестування програми для заданих значень аргументiв; визначити кiлькiсть крокiв рекурсiї, необхiдних для досягнення заданої точностi.
5. Порiвняти роботу визначеної функцiї i вiдповiдної бiблiотечної.
Варiанти завдань 36-97.
36. Описати рекурсивну функцiю sum (x, n), що знаходить суму елементiв дiйсного вектору x довжини n.
37. Дано n рiзноманiтних натуральних чисел. Згенерувати всi перестановки цих чисел (див. приклад в [3], с. 265-266).
38. Правильний дужковий вираз одержується з деякого математичного виразу, що мiстить круглi дужки, викреслюванням всiх знакiв, крiм круглих дужок. Наприклад, iз виразу x-y (a+3 (b+c (d-5)))+x(a+b) одержується правильний дужковий вираз ((( ))) ().
Опис синтаксису для правильних дужкових виразiв:
a) ( ) - правильний дужковий вираз;
б) якщо P - правильний дужковий вираз, то (P) - правильний дужковий вираз;
в) якщо P i Q - правильнi вирази, то PQ - правильний дужковий вираз.
Данi натуральне число n i послiдовнiсть символiв c1, c2, ... c2n, кожний iз яких - кругла дужка. Визначити функцiю для вiдповiдi на питання: «Чи є послiдовнiсть c1, c2,... c2n правильним дужковим виразом? "
7.4.1 Варианты задания 1 - 35
Таблица 7.1 – Варианты задания 1 - 35
№ ва-рiа-нта |
Функцiя, що обчислюється |
Обчислювальнi формули |
Значен-ня аргумен-тiв |
1 |
x² е |
∞ k 2k y = Σ (-1) *( x / k!) k = 0 |
x =2 ε=0.01 |
2 |
th x |
∞ k -2kx y = 1 + 2* Σ (-1) * ( e ) k = 1 [ x > 0 ] |
x =3 ε=0.01 |
3 |
sech x |
∞ k - (2k+1)x y = 2* Σ (-1) * ( e ) k = 0 [ x > 0 ] |
x =1.5 ε=0.1 |
4 |
cosech x |
∞ - (2k+1)x y = 2* Σ e k = 0 [ x > 0 ] |
x =2.5 ε=0.2 |
5 |
sin x |
∞ k 2k+1 y = Σ (-1) * ( x / (2k+1)! ) k = 0 |
x =2 ε=0.01 |
6 |
cos x |
∞ k 2k y = Σ (-1) * ( x / (2k)! ) k = 0 |
x =1.2 ε=0.01 |
7 |
sh x |
∞ 2k+1 y = Σ ( x / (2k+1)! ) k = 0 |
x =1.3 ε=0.01 |
8 |
ch x |
∞ 2k y = Σ ( x / (2k)! ) k = 0 |
x =2 ε=0.01 |
9 |
2 sin x |
∞ k+1 2k-1 2k y = Σ (-1) * (2 * x / (2k)! ) k = 1 |
x =3 ε=0.1 |
10 |
2 cos x |
∞ k+1 2k-1 2k y = 1 - Σ (-1) * (2 * x / (2k)! ) k = 1 |
x =2 ε=0.01 |
11
|
3 sin x |
∞ k+1 2k+1 2k+1 y = 1/4 Σ (-1) * (3 - 3) * x / (2k+1)!) k = 1 |
x =1.5 ε=0.1 |
Продовження таблицi 7.1
№ ва-рiа-нта |
Функцiя, що обчислюється |
Обчислювальнi формули |
Значен-ня аргумен-тiв |
12 |
cos 3 x |
∞ k 2k 2k y = 1/4 Σ (-1) * (3 + 3) * x / (2k)! ) k = 0 |
x =1.7 ε=0.1 |
13 |
ln (1+x) |
∞ k+1 k y = Σ ( -1 ) * ( x / k ) k =1 [ -1< x ≤ 1 ] |
x =0.8 ε=0.01 |
14 |
ln x |
∞ k+1 k y = Σ ( -1 ) * ( ( x - 1) / k ) k =1 [ 0< x ≤ 2 ] |
x =1.1 ε=0.1 |
15 |
ln x |
∞ 2k - 1 y = 2 Σ ( 1 / (2k -1) ) * ( ( x-1) / (x +1) ) k =1 [ 0 < x ] |
x =-0.3 ε=0.1 |
16 |
ln x |
∞ k y = Σ ( 1 / k ) * ( ( x - 1) / x ) k =1 [ x ≥ 1/2 ] |
x =0.7 ε=0.1 |
17 |
ln ((1+x)/ (1-x)) |
∞ 2k - 1 y = 2 Σ ( 1 / ( 2k -1 ) ) * x k =1 [ x² < 1 ] |
x =0.09 ε=0.01 |
18 |
ln ((x+1)/(x-1))
|
∞ 2k - 1 y = 2 Σ 1 / ( ( 2k -1 ) * x ) k =1 [ x² > 1 ] |
x =1.44 ε=0.01 |
19 |
ln ( x / (x-1) ) |
∞ k y = Σ 1 / ( k x ) k =1 [ x² > 1 ] |
x =2 ε=0.01 |
20 |
ln ( 1 / (1-x) ) |
∞ k y = Σ ( x / k ) k =1 [ x² < 1 ] |
x =0.7 ε=0.01 |
Продовження таблицi 7.1
№ ва-рiа-нта |
Функцiя, що обчислюється |
Обчислювальнi формули |
Значен-ня аргумен-тiв |
21
|
(1-x) / x*ln (1/(1-x)) |
∞ k y = 1 - Σ x / ( k * ( k+1 ) ) k =1 [ x² < 1 ] |
x =0.8 ε=0.01 |
22 |
arctg x |
∞ k 2k+1 y = Σ (-1) * x / ( 2k+1 ) k=0 |
x =0.9 ε=0.01 |
23 |
Arth x |
∞ 2k+1 y = Σ x / ( 2k+1 ) k =0 [ x² < 1 ] |
x =0.75 ε=0.01 |
24 |
Arth (1/x) |
∞ -(2k+1) y = Σ x / ( 2k+1 ) k =0 [ x² > 1 ] |
x =2 ε=0.01 |
25 |
ln (x+ √1+x²)/√1+x² |
∞ k 2k 2 2k+1 y = Σ (-1) * 2 * ( k! ) * x / (( 2k+1 )!) k =0 [ x² < 1 ] |
x =0.8 ε=0.01 |
26
|
sh t / ( ch t - cos x ) [ t > 0 ] |
∞ -kt y = 1 + 2 Σ e cos kx k = 1 [ t > 0 ] |
x =0.1 ε=0.01 t=1.0 |
27
|
1/2 ln tg ( /4 + x/2 ) |
∞ k-1 y = Σ (-1) sin(2k-1) x / (2k-1) k =1 [-/2 < x < /2 ] |
x =0.8 ε=0.01 |
28 |
1/2 ln ctg (x/2 ) |
∞ y = Σ cos(2k-1) x / (2k-1) k =1 [ 0 < x < ] |
x =0.9 ε=0.01 |
29
|
ln ( 2 cos (x/2) ) |
∞ k-1 y = Σ (-1) cos (kx) / k k =1 [ - < x < ] |
x =1 ε=0.01 |
30
|
1/2 ln ( 1 / ( 2*(1- cos x) ) |
∞ y = Σ cos (kx) / k k =1 [ 0 < x < 2 ] |
x =1 ε=0.01 |
Кiнець таблицi 7.1
№ ва-рiа-нта |
Функцiя, що обчислюється |
Обчислювальнi формули |
Значен-ня аргумен-тiв |
32 |
Arcth x |
∞ -(2k+1) y = Σ x / ( 2k+1 ) k =0 [ x² > 1 ] |
x =1.5 ε=0.01 |
33 |
ex ( 1+x )
|
∞ k y = Σ x ( k+1 ) / ( k! ) k =0 |
x =3 ε=0.01 |
34 |
sin x |
∞ k y = x cos ( x / 2 ) k = 1 [ | x | < 1 ] |
x =0.7 ε=0.01 |
35 |
th (x / 2) |
∞ 2 2 y = 4x/ Σ 1 / ( ( 2k-1 ) + x ) k =1 |
x =2.5 ε=0.01 |
39. Пiдрахувати кiлькiсть рiзноманiтних подань заданого натурального числа n у виглядi суми двох попарно рiзних додатних доданкiв. Подання, що розрiзняються лише порядком доданкiв, рiзними не вважаються.
40. Послiдовнiсть чисел Фiбоначчi утворюється по закону u0 = 0;
u1 =1; ui = ui-1 + ui-2; i = 2, 3, ... . Визначити функцiю обчислення i-го числа Фiбоначчi.
41. В вхiдному рядку задано текст, за яким слiдує крапка. Перевiрити, чи задовольняє його структура такому визначенню:
<текст> ::= <елемент> ¦ <елемент> <текст>
<елемент> ::= a ¦ b ¦ ( <текст> ) ¦ [ <текст> ] ¦ { <текст>}
42. Завдання про "вiсiм ферзiв": на шаховiй дошцi розмiстити 8 ферзiв так, щоб вони не "били" один одного. Описати функцiю, що дає одне таке розмiщення.
43. Визначити функцiю обчислення значення
1
-
+
- ... +
-
послiдовно злiва направо. Порiвняти результат її роботи з роботою аналогiчних функцiй iз варiантiв 53, 63, 73. Пояснити, чому при обчисленнi на ЕОМ кожним iз цих способiв одержуються такi результати.
44. Реалiзувати для стека операцiю "в". Розмiстити в стеку n елементiв (початково стек пустий). Стек промоделювати масивом, а "верхiвку стеку" - покажчиком зайнятостi цього масиву.
45. Надрукувати в зворотному порядку заданий в вхiдному рядку текст. Текст завершується крапкою, знаком оклику або знаком питання.
46. Описати рекурсивну функцiю min_pol(x, n), що знаходить мiнiмальний з додатних елементiв цiлочисельного вектору x довжини n.
47. Знайти середнє арифметичне додатних i вiд’ємних елементiв цiлочисельного вектору заданого розмiру. Операцiї визначення знаку числа реалiзувати як функцiї, якi передаються аргументом в рекурсивну функцiю, що визначається.
48. В вхiдному рядку записана (без помилок) формула такого виду:
<формула> :: = <цифра> ¦ (<формула> <знак> <формула> )
<знак> ::= + ¦ - ¦ *
<цифра> :: = 0 ¦ 1 ¦ 2 ¦ 3 ¦ 4¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9
Ввести цю формулу i обчислити її значення. Наприклад, по рядку "5" вираховується значення 5, а по рядку "2-4*6 " - значення -22.
49. Пiдрахувати кiлькiсть рiзних подань заданого натурального числа n у виглядi добутку двох попарно рiзних додатних множникiв. Подання, що розрiзняються лише порядком множникiв, вважаються рiзними.
50. Бiномiальний
коефiцiєнт
:
= (
) =
;
= 1.
Визначити функцiю C(n, m) для обчислення бiномiальних коефiцiєнтiв.
51. В вхiдному рядку заданий текст, за яким слiдує крапка. Перевiрити, чи задовольняє його структура слiдуючому визначенню:
<iдентифiкатор> ::= <буква>
<iдентифiкатор> ::= <буква><продовження iдентифiкатору>
<продовження iдентифiкатору> ::= <буква> <продовження
iдентифiкатору>
<продовження iдентифiкатору> ::= <цифра> <продовження
iдентифiкатору>
<буква> ::= a | b | c | ... | z
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
52. Описати рекурсивну функцiю max_sim(x, n), що знаходить максимум iз рiзниць елементiв, якi симетричнi щодо його середини (x - цiлочисельний вектор довжини n ).
53. Визначити функцiю обчислення значення
1 -
+
- ... +
-
спочатку послiдовно
злiва
направо вираховується
сума 1+
+ ... +
, потiм
злiва
направо
+
+ ... +
, пiсля
цього з першої
суми вiднiмається
друга. Порiвняти
результат її
роботи з роботою аналогiчних
функцiй
iз
варiантiв
43, 63, 73. Пояснити, чому при обчисленнi
на ЕОМ кожним з цих способiв
одержуються такi
результати.
54. Реалiзувати для черги операцiю "в". Розмiстити в черзi n елементiв (початково черга пуста). Чергу промоделювати масивом, а "початок" i "кiнець" черги - покажчиками зайнятостi цього масиву.
55. Описати функцiю digits, що пiдраховує кiлькiсть цифр в текстi, заданому у вхiдному рядку. Текст завершується крапкою, комою або крапкою iз комою.
56. Описати рекурсивну функцiю max_otr(x, n), що знаходить максимальний iз вiд’ємних елементiв дiйсного вектору x довжини n.
57. Знайти середнє геометричне парних i непарних елементiв цiлочисельного вектору заданого розмiру. Операцiї визначення парностi числа реалiзувати як функцiї, якi передаються аргументом в рекурсивну функцiю, що визначається.
58. Обчислити
1
1
1 + 1
3
+ 1
5
+ ...
1
51 + 53
59. Дано натуральне
число n.
Обчислити додаток перших n множникiв:
.
.
....
60. Визначити функцiю знаходження
(
)
=
(
) ,
використовуючи формулу для бiномiальних коефiцiєнтiв (варiант 50).
61. Перетворити вираз (тобто текст спецiального виду), складений iз цифр i знакiв арифметичних операцiй додавання i вiднiмання, в постфiксну форму. В постфiкснiй формi спочатку записуються операнди, а пiсля цього знак операцiї. Наприклад,
звичайний (iнфiксний) запис постфiсний запис
3+4 34+
(5-4)+2 54-2+
2-(3+4)-6 234+-6-
62. Описати рекурсивну функцiю min_el(x, n), що знаходить мiнiмальний iз ненульових елементiв, якi мають непарнi номери (x - дiйсний вектор довжини n).
63. Визначити функцiю обчислення значення
1 -
+
- ... +
-
послiдовно справа налiво. Порiвняти результат її роботи з роботою аналогiчних функцiй iз варiантiв 43, 53, 73. Пояснити, чому при обчисленнi на ЕОМ кожним iз цих способiв одержуються такi результати.
64. Реалiзувати для стека операцiю "iз". Взяти iз стека n елементiв (початково в стеку m елементiв). Стек промоделювати масивом, а "верхiвку стеку" - покажчиком зайнятостi цього масиву.
65. Дана послiдовнiсть ненульових цiлих чисел, за якими слiдує 0. Надрукувати спочатку всi вiд’ємнi числа цiєї послiдовностi, а пiсля цього всi додатнi (в порядку злiва направо). Операцiї перевiрки знака реалiзувати як функцiї, якi передаються аргументом в рекурсивну функцiю, що визначається.
66. Описати рекурсивну функцiю proiz(x, n), що знаходить додаток тих елементiв цiлочисельного вектору x довжини n, якi парнi 3.
67. Знайти кiлькiсть парних i непарних елементiв цiлочисельного вектору заданого розмiру. Операцiї визначення парностi числа реалiзувати як функцiї, якi передаються аргументом в рекурсивну функцiю, що визначається.
68. Дано дiйсне
число x
0. Обчислити
x
2
x2 + 4
x2
+ 8
x2
+ ...
256
x2 + x2
69. Дано натуральне
число n.
Обчислити добуток перших n
множникiв:
.
.
. ........
70. Iснує n населених пунктiв, якi перенумерованi вiд 1 до n (n=10). Деякi пари пунктiв з'єднанi дорогами. Визначити, чи можна потрапити по цим дорогам iз першого пункту в n-ий. Iнформацiя про дороги задається у виглядi послiдовностi пар чисел i та j (i<j ), зазначаючих, що i-й та j-й пункти з' єднанi дорогою; признак кiнця цiєї послiдовностi - пара нулiв.
71. Перетворити вираз (тобто текст спецiального виду), складений iз цифр i знакiв арифметичних операцiй множення i дiлення, в префiксну форму. В префiкснiй формi спочатку записується знак операцiї, а пiсля цього операнди. Наприклад,
звичайний (iнфiксний) запис префiксний запис
3*4 *34
(5/4)*2 */542
2/(3*4)/6 //2*346
72. Завдання про "вiсiм ферзiв": на шаховiй дошцi розмiстити 8 ферзiв так, щоб вони не "били" один одного. Визначити функцiю, що генерує всi такi розмiщення.
73. Визначити функцiю обчислення значення
1
-
+
- ... +
-
спочатку послiдовно
справа налiво
вираховується
сума 1 +
+ ... +
,
пiсля
цього справа налiво
+
+ ... +
, пiсля
цього iз
першої
суми вiднiмається
друга. Порiвняти
результат її
роботи з роботою аналогiчних
функцiй
iз
варiантiв
43, 53, 63. Пояснити, чому при обчисленнi
на ЕОМ кожним iз
цих способiв
одержуються такi
результати.
74. Знайти таку розстановку дванадцятi коней на шаховiй дошцi, при якiй кожне поле буде знаходитися пiд ударом одного iз них.
75. Одержати всi перестановки елементiв 1, 2... 6.
76. Реалiзувати для черги операцiю "iз". Взяти iз черги n елементiв (початково в черзi m елементiв). Чергу промоделювати масивом, а "початок" i "кiнець" черги - покажчиками зайнятостi цього масиву.
77. Вказати маршрут коня, що починається на одному заданому полi шахової дошки i закiнчується на iншому заданому. Нiяке поле не повинне зустрiчатися в маршрутi двiчi.
78. Лабiринт може бути заданий матрицею з'єднань, в якому для кожної пари кiмнат вказано, чи з'єднанi вони коридором. Дана матриця з'єднань лабiринту iз n кiмнат i номери кiмнат i, j (1<=i<=n, 1<=j<=n). Збудувати шлях iз кiмнати з номером i в кiмнату з номером j.
79. Iснує n мiст. Деякi iз них з' єднанi дорогами вiдомої довжини. Вся система дорiг задана квадратною матрицею порядку n, елемент aij якої рiвний деякому вiд’ємному числу, якщо мiсто i не з'єднано дорогою безпосередньо з мiстом j, та рiвний довжинi дороги в противному випадку (i, j = 1, 2... n ). Для першого мiста знайти найкоротшi маршрути в iншi мiста.
80. Одержати всi
повнi
перестановки 10 елементiв
1,2...10, (перестановка P1,
... , Pn
елементiв
1, 2, ... n
називається
повною, якщо Pi
i для i=1, 2...
n
).
81. Знайти таку розстановку пяти ферзiв на шаховiй дошцi, при якiй кожне поле буде знаходитися пiд ударом одного iз них.
82. Дано натуральне число n (n<=99 ). Одержати всi способи виплати суми n за допомогою монет вартiстю 1, 5, 10 i 20 коп.
83. Збудувати всi правильнi дужковi вирази довжини 10, тобто такi, що мiстять по п'ять лiвих i по п'ять правих круглих дужок.
84. Одержати всi розмiщення iз 9 елементiв 1, 2... 9 по п'ять елементiв в кожному.
85. Назвемо натуральне число палiндромом, якщо його запис читається однаково iз початку i iз кiнця (як, наприклад, 4884, 393, 1). Знайти всi натуральнi числа, якi меншi 100, що при зведеннi в квадрат дають палiндром.
86. В данiй послiдовностi дiйсних чисел a1,a2....,a20 обрати зростаючу послiдовнiсть найбiльшої довжини.
87. Iснує n предметiв, ваги яких рiвнi A1, A2... , An. Подiлити цi предмети на двi групи так, щоб загальнi ваги двох груп були максимально близькi.
88. Одержати послiдовнiсть A1, A2... , An. iз цифр 0, 1, 2, в яких немає сумiжних однакових дiльниць (наприклад, послiдовнiсть 2, 0, 1, 1, ... не годиться, бо поряд розмiщенi двi однаковi цифри 1; послiдовнiсть 2, 1, 0, 1, 2, 1, 0, 1 не годиться, бо рядом розмiщенi двi однаковi дiльницi 2, 1, 0, 1 i т.д.).
89. Два натуральних числа називають дружнiми, якщо кожне iз них дорiвнює сумi всiх дiльникiв iншого, крiм самого цього числа. Знайти всi пари дружнiх чисел, що лежать в дiапазонi вiд 200 до 300.
90. Знайти таке розмiщення восьми слонiв на шаховiй дошцi, при якiй кожне поле буде знаходитися пiд ударом одного iз них.
91. Дано натуральне число n. Серед чисел 1,. 2... n знайти всi такi, запис яких спiвпадає з останнiми цифрами запису їх квадрату (наприклад, 62 = 36, 252 =625 i. т.д.).
92. Назвемо натуральне число палiндромом, якщо його запис читається однаково iз початку i iз кiнця (наприклад, 4884, 393, 1). Знайти всi меншi 100 числа-палiндроми, що при зведеннi в квадрат дають палiндроми.
93. Дано натуральне число n. З'ясувати, чи можна представити n! у виглядi добутку трьох послiдовних чисел.
94. Знайти всi простi дроби, що не скорочуються, укладенi мiж 0 i 1, знаменники яких не перевищують 7 (дрiб задається двома натуральними числами - чисельником i знаменником ).
95. Дано натуральне число m. Вставити мiж деякими цифрами 1, 2, 3, 4, 5, 6, 7, 8, 9, записаними саме в такому порядку, знаки "+ " i "-" так, щоб значенням вислова, що одержався, було число m. Наприклад, якщо m=122, то пiдiйде таке розмiщення знакiв: 12+34-5-6+78+9.
96. Дано натуральне число n. Одержати в порядку зростання n перших натуральних чисел, що не дiляться анi на якi простi числа, крiм 2, 3 i 5.
97. Одержати всi сполучення iз 10 елементiв 1, 2... 10 по чотири елементи в кожному.
7. 5 Контрольнi питання до лабораторної роботи
1) Як реалiзувати рiшення Вашого варiанту завдання за допомогою iтерацiйного процесу?
2) Як в мовi Ci передати функцiю аргументом в iншу функцiю?
3) Реалiзувати обчислення xn у виглядi рекурсивної функцiї.
7.6 Змiст звiту
1. Для варiантiв 1-35:
-
Умова завдання i виведення рекурентних спiввiдношень, якi зв'язують наступний i попереднiй елементи формули, що програмується.
-
Ручне тестування програми для заданих значень аргументiв.
Для iнших варiантiв :
-
Умова завдання.
-
Математичнi розрахунки i виведення формул для роздiлу "Зв’язок" постановки завдання.
-
Постановка завдання.
-
Метод рiшення завдання.
-
Алгоритми (допомiжнi i основний ) i їх iєрархiя.
-
Таблиця трасування програми.
-
Графiна iнтерпретацiя тестових прикладiв (з зображенням масивiв, що формуються, рядкiв, їх покажчикiв).
2. Для всiх варiантiв :
-
Текст програми на мовi Сi.
-
Висновки.
-
Програмний документ "Опис програми".