Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Креневич А.П.,Обвінцев О.В.C в задачах і прикладах

..pdf
Скачиваний:
86
Добавлен:
07.03.2016
Размер:
1.37 Mб
Скачать

Розділ 3. Циклічні програми

41

 

є) Sn =

 

1

+

2

+

4

 

+…+

2n

 

.

1!!

3!!

5!!

(2n +

 

 

 

 

 

1)!!

3.21. Створити програми для обчислення добутків:

а)

б)

в)

д)

n

 

 

1

 

 

 

1

 

 

 

1

 

 

 

 

1

Pn = 1

+

 

 

 

 

= 1

+

 

 

1

+

 

 

 

 

1

+

 

 

 

 

;

i

2

2

2

2

 

n

2

 

i=1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

1

 

 

 

1

 

 

 

 

1

 

 

 

 

1

Pn = 1

-

 

 

 

 

= 1

-

 

 

 

1

-

 

 

 

 

 

1

-

 

 

 

 

 

;

i

2

 

2

2

3

2

 

 

n

2

 

i =2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

1

Pn = 2

+

 

;

 

i=1

 

 

i!

n

Pn = 1 i ; i =1 1+ i

 

 

n

 

 

i +1

 

 

 

 

 

n

1

 

г) Pn =

 

;

 

 

ґ) Pn =

;

 

 

 

 

 

 

i =1

 

i + 2

 

 

 

 

i=1

1 + i!

е) Pn

=

2

 

×

2

×

4

×

4

×

6

×…, n – співмножників.

 

 

 

 

5

 

 

1

 

3

3

 

5

 

 

 

3.22. Створити програми для обчислення ланцюгових дробів:

a) 1 +

 

 

1

 

 

 

;

 

 

 

б) 1 +

 

 

1

 

 

 

 

;

 

 

 

 

 

1

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

1 +

 

 

 

 

 

 

 

 

 

2 +

 

 

 

 

 

 

 

 

1 + +

1

 

 

 

 

 

 

 

2 + +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

в) n +

 

 

 

 

 

1

 

 

 

;

г)1 +

 

 

 

1

 

 

 

 

 

 

.

 

(n -1) +

 

 

 

1

 

 

3 +

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(n - 2) + +

1

 

 

 

 

5 + +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

2n + 1

3.23. Числами трибоначчі називається

 

числова

послідовність

{Tk : k ³ 0} , задана рекурентним співвідношенням третього порядку:

 

 

 

 

T0 = 0,T1 = T2 = 1,Tk = Tk −1 + Tk −2 + Tk −3 , k ³ 3.

 

 

 

Скласти програму для обчислення Tn .

 

 

 

 

 

 

 

 

 

 

 

 

3.24. Послідовністю

Падована

 

називається

числова

послідовність

{Pk : k 0}, задана рекурентним співвідношенням третього порядку:

 

 

 

 

P = P = P = 1, P = P

+ P

, k ³ 3.

 

 

 

 

 

 

0

 

 

1 2

 

 

k

k −1

 

 

k −3

 

 

 

 

 

 

 

 

 

Скласти програму для обчислення Pn.

Для всіх n N

безпосеред-

ньою перевіркою переконатися, що послідовність Падована задовольняє рекурентним формулам:

а)

Pn = Pn−1 + Pn −5 ;

б) Pn = Pn −2 + Pn− 4 + Pn−8 ;

в)

Pn = 2Pn− 2 Pn−7 ;

г) Pn = 4Pn−5 + Pn−14.

3.25. Скласти програму обчислення суми перших n членів: а) послідовності Фібоначчі; б) послідовності трибоначчі; в) послідовності Падована.

42

С у задачах і прикладах

 

3.26. Скласти програми обчислення визначників порядку n:

 

2

3

0 ...

0

 

 

 

 

2

1

0

...

0

 

 

 

3

2

0

...

0

 

 

 

1

2

3 ...

0

 

 

 

 

1

2

1

...

0

 

 

 

1

3

 

2

...

0

 

 

а)

0

1

2 ...

0

;

 

б)

0

1

2

...

0

; в)

0

1

 

3

...

0

;

 

... ... ... ... ...

 

 

 

 

... ... ... ... ...

 

 

 

... ... ... ... ...

 

 

 

0

0

0 ...

2

 

 

 

 

0

0

0

...

2

 

 

 

0

0

 

0

...

3

 

 

 

 

 

 

5

0 ...

0

 

 

 

 

0

 

 

 

1

0

0 ...

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

5 ...

0

 

 

 

 

1

0

1

0 ...

0

0

 

 

 

 

 

 

 

 

 

г)

 

 

 

2

7 ...

0

;

 

ґ)

0

 

 

1

0

1 ...

0

0

 

;

 

 

 

 

 

 

 

 

 

 

 

... ... ... ... ...

 

 

 

... ... ... ... ... ... ...

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0 ...

7

 

 

 

 

0

 

 

 

0

0

0 ...

1

0

 

 

 

 

 

 

 

 

 

 

 

0

1

0

0

...

 

0

0

 

 

 

 

 

 

 

a + b

ab

 

0

0 ...

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

1

0

...

 

0

0

 

 

 

 

 

 

 

1

 

a + b

 

ab

0 ...

 

 

 

0

 

 

д)

 

0

1

0

1

...

 

0

0

 

; е)

 

 

0

 

 

1

 

 

 

a + b

ab ...

 

 

 

0

;

 

 

... ... ... ... ... ... ...

 

 

 

 

 

 

 

...

 

 

...

 

 

...

... ... ...

 

 

 

 

0

0

0

0

...

 

1

0

 

 

 

 

 

 

 

0

 

 

0

 

 

 

0

0 ...

 

a + b

 

 

1

2

0

0

0 ...

0

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

4

3

0

0 ...

0

 

 

0

 

 

 

 

 

 

a

1

 

0

0

...

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

2

5

3

0 ...

0

 

 

0

 

 

 

 

 

 

1

a

1

0

...

0

0

 

 

 

 

 

є)

0

0

2

5

3 ...

0

 

 

0

 

;

 

 

ж)

 

0

1

 

a

1

...

0

0

 

;

 

 

 

 

... ... ... ... ... ... ... ...

 

 

 

 

 

 

... ... ... ... ... ... ...

 

 

 

 

 

 

0

0

0

0

0 ...

5

 

 

3

 

 

 

 

 

 

0

0

 

0

0

...

1

a

 

 

 

 

 

 

0

0

0

0

0 ...

2

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 + x2

 

x

0

 

0

 

 

...

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

1 + x2

 

 

x

 

0

 

 

...

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

з)

 

 

 

0

 

x

1 + x2

x

...

 

 

0

0

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...

 

...

...

 

... ... ...

...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

0

 

0

 

 

...

 

 

 

 

x

1 + x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Розділ 3. Циклічні програми

43

 

3.27. Створити програми обчислення сум:

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а) Sn = 2k ak ,

де a1 = 0, a2 = 1, ak = ak −1 + kak −2 , k ³ 3;

k =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

3

k

 

 

 

 

ak −1

 

 

 

 

 

 

б) Sn =

 

 

 

,

де a1

= 1, a2 = 1, ak

=

 

+ ak −2 , k ³ 3;

 

 

 

 

 

k

k =1 ak

 

 

 

 

 

 

 

 

 

 

n

 

 

k!

 

 

 

 

 

 

 

 

 

 

ak −2

 

 

 

в) Sn =

 

,

де a1

= 1, a2 = 1, ak

= ak −1

+

, k ³ 3;

 

 

 

 

k

k =1

 

 

ak

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ak − 2

 

 

г) Sn = k!ak ,

де a1

= 0, a2 = 1, ak

= ak −1

+

 

, k ³ 3;

 

(k -

1)!

k =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

ak

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ґ) Sn =

,

де a1 = a2 = a3 = 1, ak = ak −1 + ak −3 , k ³ 4;

 

k

k =1

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

2

k

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

д) Sn =

 

 

 

ak ,

де a1

= 1, ak = kak −1

+

, k ³ 2.

 

 

 

 

 

 

 

 

 

 

 

k =1

 

 

k!

 

 

 

 

k

 

 

 

 

 

 

3.28. Створити програми обчислення сум:

 

n

 

 

 

2

k

 

 

а) Sn

=

 

 

 

 

,

a

 

+ b

 

k =1

k

 

 

 

 

 

 

k

 

 

 

n

 

ak bk

 

 

б) S n =

 

,

 

 

 

k =1

(k + 1)!

a1

= 0,a2

= 1,

b1 = 1,b2 = 1,

 

 

 

ak −1

 

k ³ 3;

де ak

=

+ ak −2bk ,

bk = bk −1 + ak −1 ,

 

 

 

 

k

 

 

 

 

 

 

 

 

a1

= u,

 

 

 

b1 = v,

 

 

 

k ³ 2;

де a

k

= 2b

+ a

k −1

,

b = 2a2

+ b

,

 

k −1

 

 

k

k −1

k −1

 

 

u, v – задані дійсні числа;

в)

г)

ґ)

n

2k

a1 =1,

 

 

 

b1 =1,

 

 

 

Sn =

(1+ a2

+ b2 )k!

де a =3b

+2a

,

b = 2a

+b

, k ³ 2;

k =1

k

k

k

k−1

k−1

 

k

k−1

k−1

 

n

 

k

 

 

 

ak

 

,

Sn =

 

k =1

bk

 

 

n

 

ak

 

 

 

Sn =

 

 

 

,

1+ b

k =0

 

 

 

k

 

a0

= 1,a1

= 2,

b0 = 5,b1 = 5,

 

 

 

 

bk

k ³ 2;

де ak

= ak −2

+

, , bk = bk22 - ak −1 ,

 

 

 

 

2

 

 

 

 

 

 

 

 

a0

= 1,

 

 

b0

= 1,

³ 1.

де

= ak −1bk −1 ,

 

k

ak

bk

= ak −1 + bk −1 ,

 

3.29. Створити програми для обчислення добутків:

n

a

 

 

a0 = a1 = 1, a2 = 3,

 

а) Pn =

k

 

 

 

 

 

 

, k ³ 3;

 

,

де

 

ak −2

3

k

= ak −3 +

k =0

 

 

ak

 

 

 

 

 

 

2

k −1

 

 

 

 

 

 

 

 

 

 

44

С у задачах і прикладах

 

n

a1

= 1,

 

 

 

b1 = 1,

 

 

б) Pn = ak bk

 

 

 

 

 

, де a

 

= (

 

+ a

 

) 5

, b

 

+

5a 2 , k ³ 2.

k

b

k −1

2b

k =0

 

 

k −1

 

 

k =

k −1

k −1

3.3. Цикли за умовою

На відміну від циклу з лічильником, цикл за умовою виконується не наперед задану кількість разів, а доки істинною є деяка умова. У С є два типи циклів за умовою:

цикл з передумовою while (F) {

Q;

}

цикл з післяумовою do {

Q;

} while (F);

де F – умова, Q – тіло циклу. Обидва цикли виконують набір інструкцій Q, доки умова F залишається істинною. Різниця полягає лише в тому, що для циклу з передумовою перевірка умови F здійснюється до першого виконання тіла циклу Q. Для циклу ж з післяумовою перевірка умови F здійснюється вже після того, як виконається перший раз тіло циклу Q. Цикли з післяумовою здебільшого використовують у випадках, коли умова F є невизначеною до початку виконання циклу.

Зауважимо, що цикл з післяумовою легко отримується з циклу з пе-

редумовою:

 

 

do {

Q; while (F){

Q;

Q;

 

} while (F);

 

}

До циклів за умовою також належить і цикл з виходом. Окремої конструкції даний тип циклів у С не має. Його моделювання здійснюється за допомогою оператора break. Як тільки програмі трапляється цей оператор, вона припиняє роботу циклу та переходить до виконання наступного оператора, що йде після циклу. Як приклад використання цього оператора наведемо моделювання циклу з виходом з допомогою циклу з передумовою. Нагадаємо, що у С будь-яке ненульове значення арифметичного виразу означає Істину.

do {

while ( 1

){

Q;

Q;

 

 

 

}

 

if (!F)

break;

while (F);

 

}

 

Розділ 3. Циклічні програми

45

 

Приклади розв'язання задач

Приклад 3.16. Задана непорожня послідовність ненульових цілих чисел, за якою йде 0. Визначити кількість змін знака в цій послідовності. Наприклад, у послідовності 1, 34, 8, 14, 5, 0 знак змінюється тричі.

Розв'язок. Оскільки кількість членів послідовності наперед невідома, то очевидно, що для введення членів послідовності необхідно використати цикл з умовою. Умовою продовження циклу є те, що введене з клавіатури число не є нулем. Тут зручніше використати цикл з післяумовою, оскільки до початку виконання циклу невідомо, яке саме число ввів користувач.

У програмі використаємо допоміжну змінну p, у якій будемо запам'я- товувати попередній член послідовності.

#include <iostream.h> void main(){

int a, p = 0, z = 0; do {

cin >> a;

if (a * p < 0) z++; p = a;

} while (a != 0);

cout << ”кількість знакозмін” << z <<'\n';

}

Наведемо модифікацію попередньої програми з використанням циклу з виходом.

#include <iostream.h> void main(){

int a, p = 0, z = 0; do {

cin >> a;

if (a == 0) break; if (a * p < 0) z++; p = a;

} while (1);

cout << ”кількість знакозмін” << z <<'\n';

}

Приклад 3.17. Послідовність задано рекурентним співвідношенням

x0 = 1, x1 = 0, x2 = 1,

xn = xn−1 + 2xn−2 + xn−3 , n ³ 3.

Створити програму для знаходження номера найменшого члена цієї послідовності, який перевищує число a.

Розв'язок. Оскільки послідовність xn задано рекурентним співвідношенням третього порядку, то для обчислення її довільного елементу

46

С у задачах і прикладах

 

потрібні чотири змінні. Нехай змінна x пробігає послідовність {xn : n ³ 1},

тоді умовою завершення циклу є умова x > а, отже, цикл має виконуватися, доки виконується умова x <= a. Таким чином, маємо програму

#include <iostream.h> void main(){

int n, x, x1, x2, x3, a; cin >> a;

x1 = 1; x2 = 0; x3 = 1; n = 2; do {

n++;

x = x1 + 2*x2 + x3; x3 = x2;

x2 = x1;

x1 = x;

} while (x <= a);

cout << "n = " << n <<'\n';

}

Приклад 3.18. Створити програму для "обернення" (запису в оберненому порядку цифр) заданого натурального числа.

Розв'язок. Нехай у цілочисельній змінній n міститься натуральне число. Скористаємося рекурентним співвідношенням

y0 = 0;

yk = 10 yk −1 + ak ,

де ak k-та цифра числа n при розгляді цифр справа наліво. Таким чином, програма матиме вигляд:

#include

<iostream.h>

void main(){

 

int

n,

k =

0;

cin

>>

n;

 

while

(n >

0){

k

=

10 *

k + n % 10;

n

=

n / 10;

}

cout << k <<'\n';

}

Приклад 3.19. Маємо ціле n > 2. Знайти всі прості числа з діапазону [2, n]. Розв'язок. Нехай m послідовно набуває значень цілих чисел із діапа-

зону [2, n]. Тоді m буде простим числом, якщо воно не має дільників у діапазоні [2, m ] . Ураховуючи це, напишемо програму:

#include <iostream.h> void main(){

Розділ 3. Циклічні програми

47

 

int p, k, n, m;

// Операція захищеного введення.

do

cin >> n;

// Запобігає неправильному

while (n <= 2); // введенню даних. cout << 2 << ", ";

m = 3;

while (m <= n){ p = 1;

k = 3;

while (k * k <= m) { if (m % k == 0) {

p = 0; break;

}

k = k + 2;

}

if (p) cout << m <<", "; m = m + 2;

}

cout << "\n";

}

Приклад 3.20. Написати програму, яка визначає, чи є задане натуральне число n досконалим, тобто рівним сумі всіх своїх дільників, крім самого цього числа (напр., числа 6 і 28: 6 = 1 + 2 + 3, 28 = 1 +2 +4 + 7 + 14).

Розв'язок. Шукатимемо суму S усіх дільників заданого числа n. Якщо S = n, то число, яке перевіряємо, є досконалим. Програму можна написати, використовуючи одну з двох ідей. Перша полягає у знаходженні дільників числа n у діапазоні [1, n/2]. Відповідно до другої ідеї пошук проводиться у діапазоні [1, n ] , і якщо дільник знайдено, то до суми S

додаються як дільник, так і частка.

Напишемо програму згідно з першою ідеєю. У змінній S цілого типу підрахуємо суму дільників, числа, що міститься у змінній n. Використаємо змінну k, яка пробігатиме всі цілі значення в проміжку від 1 до n/2.

#include

<iostream.h>

void main(){

 

 

int

S,

k,

n;

 

cin

>>

n;

 

 

S =

0;

 

 

 

k =

1;

 

 

 

while (k <= n / 2) {

if (n %

k == 0) // якщо k - дільник

 

S

= S + k;

// до суми додаємо k

k

= k +

1;

 

}

 

 

 

 

48

С у задачах і прикладах

 

if (S == n) cout << "Число є досконалим\n." ; else cout << "Число не є досконалим.\n";

}

Напишемо програму згідно з другою ідеєю. Цього разу змінна k пробігатиме всі цілі значення в проміжку від 1 до sqrt(n). У програмі слід врахувати окремо граничні випадки k = 1 і k=sqrt(n).

#include

<iostream.h>

 

void main(){

 

 

int S,

k,

n;

 

cin >>

n;

 

 

S = 1;

//

До суми додаємо перший дільник – 1

/* Пошук дільників здійснюємо у

k = 2;

 

діапазоні від 2 до sqrt(n) - 1 */

 

 

 

while (k <= sqrt(n)) {

if (n %

k == 0) {// якщо k - дільник

S

+=

k;

// до суми додаємо дільник

S

+=

n / k;

// до суми додаємо частку

}

k = k + 1;

}

if (k * k == n) S += k; // випадок k = sqrt(n) if (S == n) cout << "Число є досконалим\n."; else cout << "Число не є досконалим.\n";

}

Слід зауважити, що програма, написана згідно з першою ідеєю, має коротший та очевидніший запис, проте друга – виконуватиметься значно швидше, оскільки діапазон пошуку дільників суттєво вужчий.

Приклад 3.21. За допомогою розвинення функції у ряд Тейлора обчислити з точністю ε > 0 її значення для заданого значення x.

y = e x = 1 +

x1

+

x 2

+ ... .

 

 

1!

2!

 

Зауваження. У загальному випадку обчислення значень алгебраїчних функцій перебуває поза межами даного посібника та вимагає від читача додаткових знань із теорії чисельних методів [9].

Розв'язок. Зафіксуємо параметр х. Розглянемо послідовність

yn = n xk . k =0 k!

Очевидно, що yn y якщо n → ∞.

Під наближеним із точністю ε значенням границі послідовності yn розумітимемо такий член yN послідовності, що виконується співвідношення

| yN yN −1 |< ε

(3.6)

Розділ 3. Циклічні програми

49

 

Послідовність yn можна задати рекурентним співвідношенням:

y

0

= a

0

= 1,

 

 

 

ak = ak −1x / k, k ³ 1.

 

 

= yk −1 + ak ,

yk

З огляду на рекурентне співвідношення бачимо, що умова (3.6) для yn набуде вигляду |ak| < e. Члени послідовності yn шукатимемо за допомогою циклу за умовою, яка є запереченням умови (3.6). Тоді програма:

#include <iostream.h> #include <math.h> void main(){

const

float eps = 0.000001;

float

y, x, a;

int

k;

 

 

cin

>> x;

 

y =

a

= 1;

 

k =

0;

 

 

while

(fabs(a) >= eps){

k

=

k +

1;

a

=

a *

x / float(k);

y

=

y +

a;

}

cout << y << '\n';

}

У вищенаведеній програмі було підключено бібліотеку math.h, де міститься реалізація багатьох математичних функцій. Зокрема, там міститься функція fabs, яка обчислює модуль дійсного числа.

Зауваження. З огляду на попереднє зауваження, слід зазначити, що продемонстрований підхід для інших функцій може призводити до хибних результатів. Тому надалі для таких функцій у формулюванні задачі буде вказано, що потрібно розуміти під наближеним значенням.

Приклад 3.22. Знайти корінь рівняння tgx = x на відрізку [0.001, 1.5] із заданою точністю ε, використовуючи метод ділення відрізка навпіл.

Розв'язок. Метод бісекції (або ділення відрізка навпіл) – один із найпростіших чисельних методів розв'язання нелінійних рівнянь вигляду

f (x) = 0,

де від функції f (x) вимагається лише неперервність. Якщо відомо, що на деякому відрізку існує єдиний корінь цього рівняння, то очевидно, що на кінцях відрізка має бути функція з різними знаками. Поділивши відрізок навпіл, візьмемо ту половину, для якої на кінцях функція набуватиме значень різних знаків. Якщо середина відрізка виявиться нулем функції, то процес завершується. Якщо задано точність обчислення ε, то процедуру поділу слід виконувати, доки довжина відрізка не стане меншою за ε, а наближеним значенням вважають середину цього відрізка.

50

С у задачах і прикладах

 

Отже, для розв'язання рівняння tgx = x розглянемо функцію

 

 

 

 

f (x) = tgx x.

Тоді програма матиме вигляд:

#include

<iostream.h>

#include

<math.h>

 

void main(){

 

 

const float eps = 0.000000000000001; // точність

float x,

l, r;

 

l = 0.001;

 

// лівий кінець відрізка

r = 1.5;

 

 

// правий кінець відрізка

// tg(l)

-

l < 0, tg(r) - r > 0

while

(r - l >= eps) {

x = (l

+ r) / 2; //середина відрізка [l,r]

if

(tan(x) – x < 0)

 

l

=

x;

// [l,r] = [x,r]

else

 

 

 

 

r

=

x;

// [l,r] = [l,x]

}

// корінь – середина останнього відрізка [l,r] x = (l + r) / 2;

cout << x << "\n";

}

Задачі для самостійної роботи

3.30.Для довільного цілого числа m > 1 знайти найбільше ціле k, за якого 4k < m.

3.31.Для заданого натурального числа n одержати найменше число

вигляду 2r, яке перевищує n.

3.32.Визначити, зі скількох від'ємних чисел починається задана послідовність чисел.

3.33.Дано непорожню послідовність різних натуральних чисел, за

якою йде 0. Визначити порядковий номер найменшого з них.

3.34.Дано непорожню послідовність різних дійсних чисел, серед яких

єпринаймні одне від'ємне число, за якою йде 0. Визначити величину найбільшого серед від'ємних членів цієї послідовності.

3.35.Дано непорожню послідовність із натуральних чисел, за

якою йде 0. Обчислити суму тих із них, порядкові номери яких – числа Фібоначчі.

3.36. Маємо дійсне число a. Скласти програму обчислення:

а) серед чисел 1, 1+12, 1+12 +13, ... першого, більшого за a;

б) такого найменшого n, що 1+12 +...+1n >a. 3.37. Скласти програми обчислення:

а) найбільшого числа Фібоначчі, яке не перевищує число a;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]