МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Оси и плоскости тела человека Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Лабораторна робота № 1 (2 сем.)





Тема: Покажчики на функції; передача покажчика на функцію в якості аргументу у викликах іншої функції.

 

Ціль : Придбання умінь та навичок у таких питаннях:

- використання покажчика на функцію;

- реалізація ітераційних алгоритмів уточнення кореня рівняння.

Вимоги до реалізації:

1)Перевірити умови збігання та записати розрахункові формули для знаходження кореня рівняння з точністю ε = 10 -4.

2)Скласти блок-схему алгоритму.

3)Вибрати початкове наближення до кореня на заданому проміжку.

4)Скласти програму розв`язання задачі. Вимоги:

а)Програма повинна складатися не менш ніж з 3-х функцій:

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

б)Всі вхідні дані передавати у допоміжні функції через список формальних параметрів.

в)Функція, що реалізує метод знаходження (уточнення) кореня рівняння, повинна мати у списку параметрів:

- межі проміжку, де знаходиться корінь,

- точність, з якою треба наблизитися до значення кореня,

- максимальна кількість ітерацій,

- покажчик на функцію, яка буде здійснювати обчислення рівняння у точці,

- кількість ітерацій, що зроблено для наближення до кореня із заданою точністю.

г)Функція повинна вибирати початкове наближення до кореня на заданому проміжку.

5)У головній функції передбачити: запрошення і введення меж проміжку, значення точності наближення, максимальної кількості ітерацій; виклик функції уточнення значення кореня, відображення результату. Також програмно виконати перевірку, чи є знайдене значення коренем рівняння (шляхом підстановки у рівняння). Якщо так, вивести результати на екран з відповідним коментарем (з точністю 4 знаки після крапки), інакше – значення для аналізу ситуації (з коментарем).

6)Програма супроводжується коментарем, якій містить в собі: П.І.Б., шифр групи, умову завдання, примітки (якщо необхідно). Допоміжні функції повинні супроводжуватися коментарем, якій містить в собі: пояснення щодо призначення результату та аргументів функції, назву їх типів та розподіл аргументів на вхідні, вихідні та(або) вхідні-вихідні (тобто ті, що змінюються).

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

8)Перед здачею завдання викладачу в зошиті автора необхідно підготувати:

a)повний текст умови індивідуального завдання,

b)алгоритм розв`язання задачі у вигляді функціональної схеми із зазначенням параметрів кожної функції,

c)результати не менш ніж 3-х різних тестів програми (з визначенням для кожного тесту початкових даних і аналізу результатів виконання).

Індивідуальні завдання:

 

№ варианта Уравнение Отрезок, содержащий корень Метод численного решения Приближенное значение корня
1 - a) arccos (x) – (1 – 0.3 * x 3) 1 / 2 = 0 [ 0 ; 1 ] итераций 0.56291
1 - б) 1.8*x4-sin(10*x)=0 [0.5 ; 0.75] итераций 0.664
2 - a) – 3 * x + 4 * ln (x) + 5 = 0 [ 2 ; 4 ] Ньютона 3.2300
2 - б) e x – e x – 2 = 0 [ 0 ; 4 ] Ньютона 0.8814
3 - a) cos (x/2) – 2 * sin (1/x) + 1/x = 0 [ 1 ; 2.5 ] половинного деления 2.3
3 - б) 1.8*x4-sin(10*x)=0 [0.25 ; 0.45] половинного деления 0.3125
4 - а) (1 – 0.4 * x 2) 1 / 2 – arcsin (x) = 0 [ 0 ; 1 ] итераций 0.7672
4 - б) -x + x 2 = 0 [ 0.5 ; 1.5 ] итераций 1.0
5 - а) e x – e - x – 2 = 0 [ 0 ; 1 ] Ньютона 0.8814
5 - б) 1.8*x4-sin(10*x)=0 [-0.5 ; -0.2] Ньютона -0.316
6 –a) cos (ln (x)) – sin (ln(x)) – 2 * ln (x)=0 [ 1 ; 3 ] половинного деления 1.3749
6 – б) 3* sin(x) + 2*cos(3*x) = 0 [ 5.5 ; 6.5 ] половинного деления  
7 – a) х – 2 + sin (1/x) = 0 [ 1.2 ; 2 ] итераций 1.3077
7 – б) e x – 2 * x2 = 0 [ 1 ; 2 ] итераций 1.49
8 – a) e x + ln (x) – 10 * x = 0 [ 3 ; 4 ] Ньютона 3.5265
8 – б) 3 * ln 2 (x) + 6 * ln (x) – 5 = 0 [ 1 ; 3 ] Ньютона 1.8832
9 – а) cos (x) – e x * x / 2 + x – 1 = 0 [ 1 ; 2 ] половинного деления 1.0804
9 – б) 3 * ln 2 (x) + 6 * ln (x) – 5 = 0 [ 1 ; 3 ] половинного деления 1.8832
10 - а) 1 – x + sin (x) – ln (1 + x) = 0 [ 0 ; 1.5 ] итераций 1.1474
10 – б) x3 –2*x2 + x - 3 = 0 [ 0.5; 2.8 ] половинного деления 2.17456
11 - а) 3 * x – 14 + e x – e - x = 0 [ 1 ; 3 ] Ньютона 2.0692
11 - б) 2 * x * sin ( x ) – cos ( x ) = 0 [ 2.5 ; 5 ] Ньютона 3.29
12 – а) (1 – x) 1 / 2 – tg (x) = 0 [ 0 ; 1 ] половинного деления 0.5768
12 – б) x3 –2*x2 + x - 3 = 0 [ 0.5; 2.8 ] половинного деления 2.17456
13 – a) x + cos (x 0.52 + 2) = 0 [ 0.5 ; 1 ] итераций 0.9892
13 – б) e x – e x – 2 = 0 [ 0 ; 4 ] итераций 0.8814
14 ­– а) 3 * ln 2 (x) + 6 * ln (x) – 5 = 0 [ 1 ; 3 ] Ньютона 1.8832
14 –б) 1.8*x4-sin(10*x)=0 [ 0.1 ; 1 ] Ньютона 0.22
15 – а) sin (x 2) + cos (x 2) – 10 * x = 0 [ 0 ; 1 ] половинного деления 0.1010
15 – б) sin(x2) – 0.5 = 0 [1 ; 2] половинного деления 1.55
16 –а) x 2 – ln (1+x) – 3 = 0 [ 2 ; 3 ] итераций 2.0267
16 –б) z3-z-0.8=0 [ 0 ; 2 ] итераций 0.5
17 – a) 2* x * sin (x) – cos (x) = 0 [ 0.4 ; 1 ] Ньютона 0.6593
17 – б) x3 –2*x2 + x - 3 = 0 [ 0.5; 2.8 ] Ньютона 1.5
18 –a) e x + (1 + e 2 * x) 1 / 2 – 2 = 0 [ -1 ; 0 ] половинного деления –0.2877
18 - б) 2* x * sin (x) – cos (x) = 0 [ 0.4 ; 1 ] половинного деления 0.6593
19 – а) ln (x) – x + 1.8 = 0 [ 2 ; 3 ] итераций 2.8459
19 – б) z3-z-0.9=0 [ 0 ; 2 ] итераций 0.5
20 – а) x * tg (x) – 1/3 = 0 [ 0.2 ; 1 ] Ньютона 0.5472
20 – б) sin(x2) – 0.5 = 0 [1 ; 2] Ньютона 1.618
21 – a) tg (x/2) – ctg (x/2) + x = 0 [ 1 ; 2 ] половинного деления 1.0769
21 – б) х2 – 3 = 0 [ 1 ; 2,5 ] половинного деления 1.75
22 –а) 0.4 + arctg (x 1 / 2) – x = 0 [ 1 ; 2 ] итераций 1.2388
22 – б) z3-z-1.1=0 [ 0 ; 2 ] итераций 0.5
23 – а) (1 – x) 1 / 2 – cos ( (1 – x) 1 / 2 ) = 0 [ 0 ; 1 ] Ньютона 0.4538
23 – б) 3 * ln 2 (x) + 6 * ln (x) – 5 = 0 [ 1 ; 3 ] Ньютона 1.8832
24 – а) 0.6 * 3 x – 2.3 *x – 3 = 0 [ 2 ; 3 ] половинного деления 2.4200
24 – б) e x – e x – 2 = 0 [ 0 ; 4 ] половинного деления 0.8814
25 –а) x 3 – x – 1 = 0 [ 0 ; 2 ] половинного деления 1.1
25 –б) sin(x)-x+0.15=0 [ 0.5 ; 1 ] половинного деления 0.7
26 – а) e x – e x – 2 = 0 [ 0 ; 4 ] Ньютона 0.8814
26 – б) x * tg (x) – 1/3 = 0 [ 0.2 ; 1 ] Ньютона 0.5472
27 – а) x * ln ( x * x + 1 ) – 2 = 0 [ 1 ; 2 ] итераций 1.52
27 –б) 1.8 * x 4 – sin ( 10 * x ) = 0 [ 0.2 ; 0.3 ] итераций 0.24
28 – а) sin ( x ) – x + 0.15 = 0 [ 0.5 ; 1 ] половинного деления 0.7
28 –б) 3 * x – 14 + e x – e - x = 0 [ 1 ; 3 ] половинного деления 2.0692
29 – а) 2 * x * sin ( x ) – cos ( x ) = 0 [ 0.4 ; 1 ] Ньютона 0.6593
29 –б) x3 – x - 1.1 =0 [ 0 ; 2 ] Ньютона 1.1
30 – а) 1.8 * x 4 – sin ( 10 * x ) = 0 [ 0.2 ; 0.3 ] итераций 0.24
30 –б) x + cos (x 0.52 + 2) = 0 [ 0.5 ; 1 ] итераций 0.9892

 

Література

1. Г.И. Светозарова, Е.В. Сигитов, А.В. Козловский. Практикум по программированию на алгоритмических языках. Краткое теоретическое введение. – стр. 35.

2. С/С++. Программирование на языке высокого уровня / Т.А. Павловская. – СПб.: Питер, 2001. – 464 с.: ил.

 

Додаток 1

Из кн. «С/С++. Программирование на языке высокого уровня / Т. А. Павловская. – СПб.: Питер, 2001. – 464 с.: ил.»:

 

Указатели – с.51

«Итак, указатели предназначены для хранения адресов областей памяти. В С++ различают три вида указателей – указатели на объект, на функцию и на void, отличающиеся свойствами и набором допустимых операций. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом. Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тип «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»:

 

тип (*имя) ( список_типов_аргументов );

 

Например, объявление:

 

int (*fun) (double, double);

 

Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов).

Указателю на void можно присвоить значение указателя любого типа, а также сравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом.

с.231:

Операция приведения типов в стиле С может записываться в двух формах:

тип (выражение)

(тип) выражение

Явное преобразование типа является источником возможных ошибок, поскольку вся ответственность за его результат возлагается на программиста. Поэтому в С++ введены операции, позволяющие выполнять частичный контроль выполняемых преобразований или сделать намерения программиста более явными для понимания: const_cast, dynamic_cast, reinterpret_cast, ststic_cast.

 

с.80:





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.