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

Methods_AP_LABS_I

.pdf
Скачиваний:
25
Добавлен:
17.03.2016
Размер:
1.53 Mб
Скачать

if (n<0) return 0; if (n==0) return 1;

a =n * fact(n-1); // виклик цієї ж функції

// для n-1

return a;

}

Для від’ємного аргументу факторіала не існує, тому функція в цьому випадку повертає нульове значення. Оскільки факторіал нуля дорівнює 1 за означенням, то в тілі функції передбачений і цей варіант. У випадку коли аргумент функції fact() відмінний від 0 та 1, викликаємо функцію fact()

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

n * (n-l) * (n-2) * ... * 2 * 1 * 1

3.1.5 Класи пам’яті

Кожна змінна і функція в С++ має два атрибути:

тип;

клас пам’яті.

Існує чотири класи пам’яті:

автоматичний – auto;

зовнішній – extern;

регістровий – register;

статичний – static.

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

Приклад (явного використання)

auto int a, b, c;

auto float d = 5.38;

Система виділяє пам’ять для автоматичних змінних при вході в блок в стеку.

Зовнішній. Один із способів передачі інформації між блоками та функціями полягає у використанні зовнішніх змінних. Якщо змінна оголошена ззовні функції – її клас пам’яті extern. Розглянемо наступний приклад (лістинг 3.3).

Лістинг 3.3

Файл circle.cpp.

const double pi = 3.14159; //локальна до файлу circle.cpp змінна

double circle(double radius)

{

return (pi * radius * radius);

}

Файл cir_main.cpp.

#include <iostream.h>

double circle(double); //функція автоматично є зовнішньою

int main()

{

double x = 3.5;

cout << circle(x) << "is area of circle of radius " << x;

}

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

for (register i = 0; i < LIMIT; i++)

{

}

Оголошення register i = 0; рівнозначно register int i =

0;.

Статичний. Змінні, оголошені як static, мають два важливих

застосування:

локальна змінна зберігає значення при повторному вході в блок;

забезпечення механізму закритості (privacy).

Наведемо приклад зберігання значення статичної змінної (лістинг 3.4).

Лістинг 3.4

#include <iostream.h>

int count()

{

static int called = 0; // статична змінна, яка зберігає своє значення при кожному виклику функції count()

++called; return called;

}

main()

{

int call_times;

for (int i = 0; i < 5; ++i) call_times = count();

cout << "\nThe function is called " << call_times << " times\n";

}

Наведемо приклад забезпечення закритості.

static int static_func(int a)

{

...

}

int non_static_func(int a)

{

...

b = static_func(a); //доступно лише в цьому

файлі; в інших – не доступно

...

}

Розглянемо приклад використання функції, яка обчислює максимум з

двох чисел (лістинг 3.5).

Лістинг 3.5

#include<iostream.h>

int max(int, int); // прототип функції

void main()

{

int x, y, z;

cout << "\n почергово введіть x та у \n"; cin >> x;

cin >> у;

z = max(x, y);

cout << "z = " << z;

}

int max (int a, int b) // формальні аргументи

{

int с; /* робоча змінна */ if (a >= b)

c = a;

else

c = b; return c;

}

3.2 Практичні завдання

1.Модифікувати програму обчислення заданої функції з лабораторної роботи №2, написавши функції: введення даних, обчислення результату за формулі, виведення даних.

2.Виконати свій варіант завдання з таблиці 3.1.

Таблиця 3.1

 

Варіанти практичних завдань

 

 

 

 

Варіант

 

Завдання

 

 

 

 

Дано натуральне число n; знайти n!. Використовувати

1

програму, що включає як рекурсивну, так і не рекурсивну

функцію обчислення n!. Чому рекурсивна функція гірше не

 

 

рекурсивної?

 

 

 

Числа Фібоначчі u0, u1, u2, ... визначаються в такий спосіб:

2

u0=0, u1=l, un=un-1+un-2

(n=2,3,...).

Написати програму

обчислення un для даного ненегативного цілого n, що включає

 

 

як рекурсивну функцію,

яка заснована

на безпосередньому

 

використанні співвідношення un=un-1+un-2, так і не рекурсивну

 

функцію.

 

 

 

 

 

 

 

 

Задані

натуральні

числа a,

c,

m.

Одержати f(n),

де

 

 

 

n,0 n 9

 

 

 

 

 

 

f (n)

 

 

 

 

 

 

 

 

3

g(n) f (n 1 g(n)) n, n 9 ,

g(n) – залишок від поділу

 

a(m+с) на 10. Використовувати програму, що включає

 

рекурсивну процедуру обчислення f(n).

 

 

 

Задані

ненегативні

цілі числа

n,

 

m;

обчислити A(n,m),

де

 

 

 

m 1, n 0

 

 

 

 

 

4

 

 

A(n 1,1), n 0, m 0

 

 

 

 

 

A(n, m)

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

A(n 1, A(n, m 1)), n 0, m

.

 

 

 

 

 

 

 

 

 

 

 

 

 

Використати програму, що включає рекурсивну функцію.

 

 

Скласти процедуру, результатом роботи якої є дійсне

 

значення, якщо символ, заданий при звертанні до процедури, -

5буква, і помилкове значення в іншому випадку. Обчислити, використовуючи написану функцію, кількість букв і символів, що не є буквами в заданому рядку.

Скласти функцію, результатом роботи якої є символ, заданий

6при звертанні до функції, якщо цей символ не є буквою, і відповідна рядкова (мала) буква в іншому випадку. Обробити введений рядок, використовуючи написану функцію.

Скласти функцію "стиснення" вихідної послідовності символів: кожна послідовність, що складається з декількох

7входжень того самого символу, заміняється на текст х(k), де х - символ, а k - рядок, що є записом числа входжень символу х у вихідну послідовність. Обробити введений рядок, використовуючи написану функцію.

Задані дійсні числа x1, y1, x2, y2,…, xn, yn. Знайти периметр

8десятикутника, вершини якого мають відповідно координати (x1, y1), (x2, y2), …, (xn, yn). Написати функцію обчислення відстані між двома точками, заданими своїми координатами.

 

Задані

дійсні

числа

a,b,c,d. Знайти

 

 

a

b

 

площу п'ятикутника,

зображеного на

1

2

9

малюнку.

Написати

функцію

 

 

2,5

 

 

 

 

 

 

 

 

 

 

 

 

обчислення

площі

трикутника по

 

 

 

 

 

 

 

 

 

 

 

 

трьом його сторонам.

 

 

 

 

d

c

 

 

 

 

 

 

 

 

 

 

 

 

 

Задані

натуральне число n, дійсні числа x1, y1, x2, y2,…, xn, yn.

 

Знайти

площу

n-косинця,

вершини

якого при

деякому

10послідовному обході мають координати (x1, y1), (x2, y2), …, (xn, yn). Написати функцію обчислення площі трикутника за координатами його вершин.

Задані дійсні числа s, t.

11

Одержати h(s,t) max( h2 (s t, st), h4 (s t, s t) h(1,1)) , де

 

 

a

 

 

b

 

 

 

 

h(a,b)

 

 

 

(a b)3

 

 

 

 

 

 

 

 

 

b2

1 a2

 

1

 

 

 

 

 

Задані дійсні числа u1,u2,v1,v2,w1,w2.

 

 

 

 

3u

 

3uv

 

5

 

 

 

 

 

12

Одержати

4 2w v

, де u,v,w – комплексні числа u1+iu2,

 

v1+iv2, w1+iw2. Написати функції обчислення арифметичних

 

операцій над комплексними числами.

13

Задані дійсні числа а0,...,а6. Одержати для х=1,3,4 значення

p(x+1)-p(x), де p(y)=a6 y6+a5 y5+…+a0.

Задані натуральне число n, дійсне число х.

Обчислити значення суми ряду, використовуючи рекурсивну

14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

(2i)!

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функцію обчислення значення

(i

2

)! .

 

 

 

 

 

 

 

j 1

 

 

 

 

 

Задані натуральне число n, дійсне число х.

 

 

 

15

Обчислити значення суми ряду, використовуючи рекурсивну

 

 

 

 

 

 

 

 

 

 

 

1

 

 

n

 

 

 

 

 

xk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n!

 

 

( 1)k

 

(k! 1)

 

 

 

функцію обчислення значення

 

 

k 1

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дано натуральне число n.

 

 

 

 

 

 

 

 

 

 

 

 

 

16

Обчислити значення суми ряду, використовуючи рекурсивну

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

( 1)i (2i 1)!

 

 

функцію обчислення значення n!

.

 

 

i 1

 

 

 

 

 

 

 

Дане натуральне число n. Одержати f0, f1,…,fn, де

17

fi

 

1

 

 

 

1

...

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i 2

1

i 2

2

i 2

i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задані дійсні числа x1, y1, x2, y2,…, x6, y6. Точки з

 

координатами (x1,y1), (x2,y2), (x3,y3), розглядаються як вершини

 

першого трикутника, точки з координатами

(x4,y4), (x5,y5),

 

(x6,y6), - другого трикутника. З'ясувати, чи вірно, що перший

 

трикутник цілком мітиться в другому, і якщо так, визначити

 

площу області, що належить зовнішньому трикутнику й не

 

належить внутрішньому (на рисунку область заштрихована).

 

(Визначити процедуру, що дозволяє з'ясувати, лежать чи дві

18точки в одній півплощині щодо заданої прямої, процедуру обчислення відстані між двома точками, а також процедуру обчислення площі трикутника за трьома сторонами).

19Задані натуральне число n, символи si,...,sn. Обчислити скільки

 

раз серед даних символів зустрічається символ + і скільки раз

 

символ *.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задані дійсні числа s, t.

 

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (a, b, c)

2a b

 

sin c

 

Одержати f(t, -2s, 1.17)+f(2.2, t, s-t), де

5

 

c

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задані дійсні числа s, t.

 

 

 

 

 

 

 

 

 

 

 

 

 

21

Одержати g(1.2, s)+g(t, s)-g(2s-1,st),

 

 

 

 

 

 

 

 

 

 

де g(a,b)

 

a 2 b2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a 2 2ab 3b2 4

.

 

 

 

 

 

 

 

 

 

 

 

Задані натуральне число n, символи si,...,sn.

 

 

 

 

 

 

 

22

Обчислити загальну кількість входжень символів «+», «-«, «*»

 

у послідовність si,...,sn.

 

 

 

 

 

 

 

 

 

 

 

 

 

23

Задані натуральне число n, символи si,...,sn.

 

 

 

 

 

 

 

Визначити найбільшу кількість пробілів, що йдуть підряд.

 

 

 

 

 

 

 

100

50

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i j

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обчислити i 1

j 1

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

60

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

25

 

 

 

 

sin(i3 j 4 )

 

 

 

 

 

 

 

 

 

 

 

 

Обчислити i 1

j 1

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

26

 

 

 

 

j i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100 100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обчислити i 1

j 1

i j .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

i

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 j i .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обчислити i 1

j 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задані дійсні числа ai,...,an, bi,...,bm. У послідовності ai,...,an і в

28

послідовності bi,...,bm всі члени, що

йдуть за 3-м членом з

найбільшим значенням (за першим по порядку, якщо їх

 

 

декілька), замінити на 0.5.

 

 

 

 

 

 

 

 

 

 

 

 

Задані

цілі числа ai,...,an, bi,...,bm, k. Якщо в послідовності

 

ai,...,an

немає жодного члена зі значенням k, то перший по

29

порядку член цієї послідовності, не менший всіх інших членів,

 

замінити на значення k. По такому ж принципу перетворити

 

послідовність bi,...,bm стосовно значення 10.

 

 

 

 

 

 

 

 

Задані натуральне число n, дійсні числа х, у, аn, bn, an-i, bn-i,...,

 

a0, b0. Обчислити за схемою Горнера значення багаточлена з

30

комплексними коефіцієнтами

 

 

 

 

 

 

 

 

 

 

(a

 

ib

)(x iy)n (a

n 1

ib

n 1

)(x iy)n 1 ... (a

 

ib )

.

 

 

 

 

 

 

 

 

n

n

 

 

 

 

 

 

 

 

 

0

0

 

 

 

 

 

 

 

Визначити процедури виконання арифметичних операцій над

 

комплексними числами.

 

 

 

 

 

 

 

 

 

 

 

 

 

3.3 Контрольні запитання і завдання

 

 

 

 

 

 

 

 

 

 

1.Поясніть значення прототипу функції.

2.Який зв’язок між параметрами функції і аргументами?

Поясніть механізм передачі аргументів по значенню.

3.Яким чином можна забезпечити отримання за допомогою функції декількох результатів?

4.Які змінні називаються глобальними?

5.У чому відмінність глобальних та локальних змінних?

6.Поясніть призначення різних класів пам’яті.

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

8.Наведіть приклад перевантаження функції.

9.У чому перевага використання вбудованих функцій?

10.Які правила використання аргументів за замовчуванням?

11.Дано натуральне n. Обчислити 1!+2!+3!+......+n! Визначити функцію обчислення факторіала числа (факторіал числа n – це добуток всіх натуральних чисел від 1 до n, тобто n!=1*2*3*…*n).

12.Для заданих х та n обчислити значення виразу:

 

1

 

x

 

 

x2

...

xn

 

13.

1!

2!

n! .

 

 

 

14.Для заданих х та n обчислити значення виразу:

 

 

12

 

22

 

32

...

n2

 

15.

1 32

2 32

3 32

n 32

.

16.Для заданого n обчислити значення виразу

 

1

 

 

4

 

 

9

 

...

n * n

 

 

 

 

 

 

 

 

 

.

17.

1 3*3

2 3*3

3 3*3

n 3*3

18.Знайти всі прості числа із заданого інтервалу. Використайте функцію, яка визначає, чи є число простим.

19.Дано відрізки а, b, c, d. Для кожної трійки відрізків, із яких

можна побудувати трикутник, знайдіть площу даного

трикутника. Використайте функції визначення можливості

побудови трикутника та обчислення площі.

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

21.Написати функцію, яка перевіряє, чи є число паліндромом

(паліндромом – це число, що читається однаково зліва направо та справа наліво, наприклад 12421.

22.Написати функцію, яка перевіряє, чи є число автоморфним

(число автоморфне, якщо квадрат цього числа закінчується цим же числом, наприклад, числа 6 та 25, так як квадрати цих чисел

36 та 625).

23.Написати функцію, яка перевіряє, чи є число досконалим,

тобто чи дорівнює воно сумі своїх дільників, за винятком самого себе.

24.Написати функцію знаходження суми цифр числа.

25.Написати програму пошуку найбільшого з трьох чисел,

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

 

 

 

 

 

 

 

 

f(x2, y, x2y)

 

26.

Дано дійсні числа x, y. Обчислити f(x - y, x2, y) , де

 

f (a, b, c)

 

2a b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 c .

27.Дано дійсні числа x, y. Обчислити g(x, y) + g(1.5x, y2) - g(2x, 5y)

 

 

5

 

ai bi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g(a, b)

i 0 ai 2ab 4i2

 

 

 

5

a2i b2i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

, де

 

i 0

.

 

 

 

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