Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум Фортран и С++.pdf
Скачиваний:
17
Добавлен:
23.03.2015
Размер:
1.39 Mб
Скачать

Додаток Б. Завдання для розрахункової роботи

Мета завдання

використання динамічних структур даних;

використання процедурних типів;

закріплення навиків роботи з типом “запис”.

Постановка задачі

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

Теоретичні відомості

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

Приклади груп:

1)Вікно в інтерактивній програмі, яке містить такі елементи, як поля введення і редагування даних, кнопки, списки вибору, діалогові вікна і так далі.

2)Агрегат, що складається з дрібніших вузлів.

3)Город, що складається з рослин, системи поливу і плану вирощування.

4)Деяка організаційна структура (наприклад, ФАКУЛЬТЕТ, КАФЕДРА, СТУДЕНТСЬКА ГРУПА).

Реалізувати групу можна таким чином. Створюється зв'язаний список записів типу TItem:

Type

PItem=^TItem;

TItem=record

next :PItem; item :PObject;

end;

Поле item вказує на об'єкт, включений в групу. Група містить поле last типа PItem, яке вказує на початок зв'язаного списку об'єктів, включених в групу.

Для роботи з групою мають бути визначені такі процедури і функції:

1)Procedure GroupInsert(var group:TGroup;p:PObject);

Включає в групу group структуру, на яку вказує р.

2)Procedure GroupShow(group:TGroup);

Дозволяє проглянути групу.

3)Function GroupEmpty(group:TGroup):boolean;

Показує, чи є хоча б один елемент в групі.

4)Procedure GroupDelete(var group:TGroup; p:PObject);

Видаляє елемент з групи.

52

un = knun1 , u0 =1, n=1,2,…,

де kn = xn – коефіцієнт рекурентності.

Дійсно, при n=1,2…

u

= u

 

x

= x ;

u

 

= u

x

=

x2

; u

 

= u

 

x

=

x3

;…

 

1

 

0

1

 

 

2

1 2

2

 

3

 

2

3

6

 

Початок

Введіть x i eps

x, eps

n=0

u=1

s=1

|u|>=eps

так

n=n+1

n>m

ні

u=u*x/n

Блок-схема алгоритму

ні ‘Cума ряду S=’, S, ‘при n=’, n

Кінець

так

‘Точність не досягнуто за‘,

 

m, ‘ітерацій’

s=s+u

13

Лістинг програми (мова Фортран)

*Використання циклу з передумовою (DO WHILE)

Program SUMM

*Надання константи, що обмежує кількість ітерацій

PARAMETER (M=100) WRITE(*, *) ‘Введить x i eps’ READ(*, *) x, eps

N=0

U=1.

S=1.

*Перевірка умови виходу із циклу

DO WHILE (ABS(U).GE.EPS) N=N+1

*Запобігання “зациклювання”

IF (N>M) THEN

WRITE(*, *) ‘Точність не досягнуто за’, m, ‘ітерацій’

STOP ELSE U=U*X/N S=S+U

ENDIF

ENDDO

WRITE(*, 33) S, N

33FORMAT(‘Cума ряда S=’, F15.9, ‘при n=’, I3) STOP

END

Лістинг програми (мова C/C++)

// Застосування циклу з передумовою (while)

#include <iostream> #include <math.h> #include <locale> #include <conio.h> #include <iomanip.h> #include <stdlib.h> using namespace std; int main(){

// Надання константи, що обмежує кількість ітерацій const int m=100;

float x, eps;

//Підключення кирилиці setlocale(LC_ALL, “rus”);

//Введення-вивід в стилі С++

cout<<"Введіть X: "; cin>>x; cout<<endl; cout<<"Введіть EPS: "; cin>>eps;

//Опис та ініціалізація змінних int n=0; float u=1, s=1;

//Перевірка умови виходу із циклу while (fabs(u)>=eps) {

n++;

//Запобігання «зациклювання»

if (n>m) {

14

Bn = cos xBn1 , B0 = cos x, n =1,2,3...

Cn =( 2n +1)2nCn1 , C0 =1, n =1,2,3...

Загальний член ряду дорівнює un =( An Bn )Cn .

Тестування проведемо при x = 2π . В результаті обчислення шості перших складових бачимо низпадання їх значень

u0 = 1, u1 = -0.1666667, u2 = 0.0083333, u3 = -0.0001984, u4 = 0.0000028, u5 = -0.000000025455,

при цьому отримаємо S = 0.0841471.

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

4. Інструкція щодо експлуатації програми

Програма summ.срр знаходиться на дискеті у кореневому каталозі.

Вхідні дані:

x – аргумент; EPS – задана точність ε .

Вихідні дані:

S – значення обчисленої суми ряду; N – кількість складових ряду при зданої точності.

На екран вхідні та вихідні дані виводяться у вигляді

 

x =

, EPS =

 

 

 

 

S =

,

N=

 

 

 

 

5. Результати розрахунків і аналіз

x = 2π , знайдених для рі-

 

Значення суми ряду і кількість складових при

зних значень EPS, надано у табл. 1.

 

Таблиця 1

 

 

 

 

 

 

 

 

EPS

 

S

 

N

 

 

 

 

 

 

 

 

 

 

 

0.001

 

0.8416667

 

2

 

 

 

 

 

 

 

 

 

 

 

0.0001

 

0.8414682

 

3

 

 

 

 

 

 

 

 

 

 

 

0.00001

 

0.8414710

 

4

 

 

 

 

 

 

 

 

 

 

 

0.000001

 

0.8414710

 

4

 

 

 

 

 

 

 

 

 

Із табл. 1 видно, що при зростанні EPS зростає кількість складових і стабілізується значення суми S.

51

ЗМІСТ

Анотація………………………………………………………………………...………..............2 Основна частина…………………………………………………………..........................2

1.Постановка задачі………………………………………………………………...3

2.Аналіз задачі………………………………………………………………………...4

3.Структурна блок-схема алгоритму………………………………………….6

4.Інструкція щодо експлуатації програми…………………..................6

5.Результати розрахунків і аналіз……………………………...................7 Список використаної літератури…………………………………………….................8 Додаток. Лістинг програми…………………………………………………….................8

АНОТАЦІЯ

1. Постановка задачі

 

n

n+1

x

 

Обчислити суму нескінченого ряду

S =

( 1) cos

 

зі заданою точ-

( 2n +1)!

 

 

n=0

 

 

ністю ε і видати значення S і n.

2. Тип комп’ютера. Операційна система

Програма розрахована для ПК типу Pentium IV. Реалізована в ОС Windows XP.

3. Мова програмування –С/С++.

4. Допоміжні програми – немає.

5. Стан програми – відлагоджена.

ОСНОВНА ЧАСТИНА

1. Постановка задачі Розробити структурну схему алгоритму і програму обчислення суми не-

скінченного ряду

 

cos

2

x

 

cos

3

x

 

cos

4

x

n

n+1

x

S = cos x

 

+

 

 

+... =

( 1) cos

 

 

 

 

 

 

 

 

 

 

( 2n +1)!

 

3!

 

5!

 

7!

 

n=0

 

зі заданою точністю ε ( ε =10-3; 10-4; 10-5; 10-6 ) вважаючи, що задана точність досягнута, якщо чергова складова за абсолютним значенням стане менше, ніж ε, і видати вхідні дані – x i ε , та вихідні дані – S і N на екран.

2. Аналіз задачі Для зменшення витрат машинного часу на визначення суми нескінче-

ного ряду S чергову складову будемо обчислювати за рекурентними залежностями. Введемо позначки:

An =( 1)n , Bn = cosn+1 x , Cn =( 2n +1)!

Рекурентні формули мають вигляд

An = −An1 , A0 =1, n =1,2,3...

50

cout<<" Точність не досягнута за <<"<<m<<" ітерацій "<<endl; return 0;

}

else { u*=x/n; s+=u;

}

}

cout<<" Сума ряду S= "<<setprecision(9)<<setiosflags(ios::fixed | ios::showpoint)<<s<<endl<<" при N= "<<n<<endl;

getch(); return 0;

}

Приклад 5. Розглянемо наведене завдання для нескінченного ряду:

( 1)n+1 x2 cosn+2 x

 

S =

 

 

 

.

(2)

( n +1)(2n)!+n

2

2n+1

n=0

 

3

 

 

Для організації циклічної структури алгоритму застосуємо оператор безумовного переходу GOTO.

З метою зменшення витрат комп’ютерного часу на визначення суми ряду (2) чергову складову будемо обчислювати за рекурентними залежностями. Введемо позначення:

A =( 1)n+1 x2

,

B =( 2n )!,

C

n

= cosn+2

x,

D = 32n+1.

n

 

n

 

 

 

n

Рекурентні залежності набувають вигляд:

A

=( 1)A

1

,

 

A

 

= −x2 , n =1,2...;

 

n

n

 

 

0

 

 

 

 

Bn

= 2n( 2n 1)Bn1 ,

B0 =1,

n =1,2...;

C

n

= cos x C

n1

,

C

0

= cos2 x,

n =1,2...;

 

 

 

 

 

 

 

Dn

= 9 Dn1 ,

 

D0

= 3,

n =1,2... .

Загальний член ряду обчислюється за формулою

un =

AnCn

, n = 0,1,2... .

( n +1)B

+n2 D

 

n

n

 

15

 

Блок-схема алгоритму

 

Додаток А. Зразок оформлення звіту

Початок

про виконання лабораторних робіт

 

 

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

Введіть

Дніпропетровський національний університет імені Олеся Гончара

x i eps

Механіко-математичний факультет

 

Кафедра обчислювальної механіки і міцності конструкцій

x, eps

 

З В І Т

про виконання лабораторної роботи № m=100, n=0, s=0, A=-x*x, <НАЗВА>

B=1, cs=cos(x), C=cs*cs, D=3, u=(A*C)/((n+1)*B+n*n*D), s=s+u

 

 

 

 

 

ШИФР <номер>

 

 

 

‘Cума ряду S=’, S,

Виконавець: студент групи МХ-08-1

<П.І.Б>

 

 

 

 

 

 

|u|<eps

Прийняв:

<П.І.Б викладача>

 

 

та

‘при n=’, n

 

 

 

 

ні

 

 

 

 

 

 

 

 

 

Завдання отримано

<дата>

 

n=n+1

 

 

 

 

 

 

 

Звіт здано

<дата>

 

 

 

 

Кінець

 

 

 

Точність не досягнута

 

 

 

n>m

 

 

 

 

 

 

 

 

та

за‘, m, ‘ітерацій’

 

 

 

ні

A=-A, B=2*n*(2*n-1)*B, C=cs*C, D=9*D, u=(A*C)/((n+1)*B+n*n*D) u=u*x/((2*n-1)*(2*n))

s=s+u

16

Дніпропетровськ

2012

49