Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Приклад. Програма обчислення ряду



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

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

Насамперед, знайдемо рекурентне співвідношення між найближчими членами ряду:

,

звідки:

Обчислення ряду починаємо з оголошення й ініціалізації наступних змінних: n (номер поточного члена ряду; ураховуємо, що початкове значення і ), an (значення поточного члена), sum (сума членів). Оголошуємо змінну delta, у якій зберігається значення точності обчислень, і символьну змінну cont, яка буде містити символ, що означає відповідь на запит про продовження обчислень. Далі програма пропонує ввести delta, і користувач уводить значення delta. Запускається цикл while для обчислення поточного члена ряду й додаванню його до змінної sum. Обчислення спадного ряду з додатними членами припиняються, коли поточний член виявляється менше delta. Сума ряду, а також точність обчислень і кількість врахованих членів ряду виводяться на екран. Потім формується запит, чи потрібно продовжити обчислення даного ряду при іншому значенні delta. Якщо користувач натискає клавішу «y» (yes), програма пропонує знову ввести delta. Якщо ж натиснута будь-яка інша клавіша, обчислення припиняються. Обробка запиту реалізується за допомогою циклу do...while. Алгоритм обчислень подається у вигляді наступної блок-схеми (мал. 4.1):

Мал. 4.1. Блок-схема функції main() обчислення ряду

Відповідно до цієї блок-схеми складаємо програму:

#include <stdio.h>

void main(){

int n=0;

//Ініціалізація змінних значенням 1-го члену ряду

double an=1., sum=1.;

char cont; //Змінна відгуку на запит

float delta; //Змінна точності

do {

//Завдання точності обчислень

printf ("Enter accuracy\n");

scanf("%f", &delta);

//Обчислення членів ряду (n>1) и додавання їх в sum

while (an>delta) {

an*=(double)(n+1)/(2*(2*n+1));

sum+=an;

n++;

};

//Виведення результату

printf ("Accuracy: %.2e ", delta);

printf ("Quantity of terms: %d\n", n);

printf ("Sum of series: %-12.8f\n", sum);

//Запит на продовження обчислень

printf ("Continue? (y/any key)");

scanf("%1s", &cont);

}

while (cont=='y'); //Перевірка результату запиту

}

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

Скласти програму для знаходження суми членів ряду, починаючи с першого скінченного члена. Обчислення суми виконати з різною точністю від 0.1 до
10-6 (не менше трьох значень ). Передбачити введення значення по запиту й можливість багаторазового обчислення ряду.

4.3. Варіанти

Загальний член ряду Загальний член ряду
   
   
   
   
   
   
   
   
   
   
   
   
     

4.4. Методичні вказівки

1. При складанні програми обчислення ряду використати рекурентну формулу для одержання наступного члена ряду.

2. При необхідності користуватись бібліотекою math, наприклад, для обчислення логарифму (бібліотечна функція log(x)).

4.5. Зміст звіту

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

2. Варіант завдання.

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

4. Код програми.

5. Скріншот вікна з результатами обчислень при різних .

6. Висновки.


5. Лабораторна робота 4.
«Функції. Ітераційні процеси» (4 год.)

Ціль роботи: Одержати навички у визначенні й використанні функцій, в організації ітераційних процесів.

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

5.1.1.Ступеневі ряди

Дійсна функція називається аналітичною в точці , якщо в деякій околиці цієї точки функція розкладається в ступеневий ряд (ряд Тейлора):

(1)

При одержуємо ряд Маклорена:

Різниця

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

Для ряду Маклорена

, де 0<q<1.

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

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

5.1.2. Функції в С/С++

Функцію в С/C++ можна розглядати:

– як один з похідних типів даних;

– як мінімальний модуль, що виконує програма.

Всі функції мають єдиний формат визначення:

<тип><ім'я_функції>(<список_формальних_параметрів>)

<тіло_функції>,

де <тип> – або void, якщо функція не повертає значення, або тип значення, що повертається функцією;

<ім'я_функції> – або main для основної функції, або довільний ідентифікатор, що не збігається зі службовими словами й іменами інших об'єктів програми;

<список_формальних_параметрів> – або порожній (), або список, кожний елемент якого має вигляд:

<позначення_типу><ім'я_параметра>

Приклади списків формальних параметрів:

(int k)

(char i, char j, int z)

<тіло_функції> – це частина функції, обмежена фігурними дужками
{ }. Тіло функції може бути або складеним оператором, або блоком. Визначення функцій не можуть бути вкладеними.

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

return;

– завершує функцію, що не повертає ніякого значення (тобто перед ім'ям функції зазначений тип void)

return <вираз>;

– повертає значення виразу, вираз повинен мати тип, зазначений перед ім'ям функції.

Якщо програміст не пише оператор return явно, то компілятор автоматично дописує return у кінець тіла функції перед закриваючою фігурною дужкою }.

Виклик функції здійснюється в такий спосіб:

<позначення функції>(<список фактичних параметрів>);

де <позначення функції> – або ім'я функції, або покажчик на функцію;

<список фактичних параметрів> – список виразів, кількість яких дорівнює числу формальних параметрів функції. Між формальними й фактичними параметрами повинна бути відповідність за типами і порядком слідування.

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

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

Для , яке змінюється від до із кроком , де – кількість точок, обчислити функцію , використовуючи її розклад в ступеневий ряд для двох випадків: для заданого і для заданої точності =0.0001. Для порівняння знайти точне значення функції.

5.3. Варіанти

Функція Діапазон зміни аргументу n Сума
   
   
   
   
   
   
   
   
   
   
   
   
   
   
     
   
   
   
   
   
   
   
   
   
   

5.4. Методичні вказівки

1. Виконання роботи зводиться до обчислення при фіксованому аргументі наступних величин: точного значення функції ; суми ряду при фіксованому ; суми ряду , що апроксимує c заданою точністю .

2. Функція main працює за наступним алгоритмом (мал. 5.1). Спочатку оголошуються змінні: x (значення аргументу), n (число членів ряду, що враховуються), delta (величина членів, що відкидаються). За запитом користувачем уводяться значення n і delta. Потім виводиться на екран заголовок таблиці й ініціюються інтервали зміни аргументу: x1 і x2. Щоб обчислити ряд і функцію y при x, що змінюється, запускається цикл for із параметром j. Для даного j визначається поточне х, викликаються функції sum1 і sum2, які розраховують ряд при фіксованому і при заданій точності . Значення, що повертаються цими функціями, присвоюються відповідно змінним sn і se. За допомогою функції форматного виведення printf на екрані відображаються значення x, sn, se і y. Після цього інкрементується j і за умови j<=10 цикл повторюється (у даному алгоритмі 10 – це кількість значень x).

3. Крім функції main, у програмі повинні використатися функції:

double sum1(double x, int n);

double sum2(double x, float eps);

double term(double x, int k);

double y(double x);

sum1 и sum2 записуються у вигляді:

double sum1(float x, int n){

double z=0.;

for(int k=0; k<=n; k++)

z+=term(x, k);

return z;

}

double sum2(float x, float eps){

double z=0., ak=1.;

int k=0;

while(fabs(ak)>eps){

ak=term(x, k);

z+=ak;

k++;

}

return z;

}

fabs – це функція бібліотеки math, що повертає значення модуля числа із плаваючою крапкою. Функція term(x,k) призначена для обчислення k-го члена ряду при заданому x.

Мал. 5.1. Блок-схема обчислення ряду

4. Результати обчислення необхідно вивести на екран у наступному виді:

x Sn Se y

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

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

5.5. Зміст звіту

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

2. Варіант завдання.

3. Математична модель (формули, за якими обчислюються доданки ряду).

4. Код програми.

5. Скріншот вікна з результатами обчислень.

6. Порівняння й аналіз результатів, висновки.


6. Лабораторна робота 5.
«Масиви й покажчики.
Введення й виведення елементів» (2 год.)

Ціль роботи: Навчитися описувати, ініціалізувати масиви, уміти роздруковувати вміст масиву, виконувати прості операції над масивами. Одержати навички використання покажчиків для звертання до масиву і його елементів.

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





Дата публикования: 2015-04-07; Прочитано: 3644 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.021 с)...