1 семестр / Лабароторная работа №6 прога
.docxФГБОУ ВО
«Уфимский государственный авиационный технический университет»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 6
по дисциплине «Программирование»
Вариант № 13
Выполнил: студент гр. ИВТ-127Б
Проверил: доцент каф. ТК
Блинова Д. В.
Уфа 2021
Тема работы: Циклы, использующие рекуррентные соотношения.
Цель работы: Получение навыков реализации программы на языке С++ с использованием рекуррентных соотношений.
Задачи работы:
Составить блок-схему алгоритма работы программы;
Написание программы на языке С++ с использованием рекуррентных соотношений;
Тестирование работоспособности программы для различных исходных данных
Вариант № 13
Задание:
Выполнение задания:
Решение задачи:
Пока очередной член по абсолютной величине меньше eps, выполняются п2 и п3
К сумме прибавляется очередной член последовательности.
Вычисляется новый член последовательности при помощи множителя.
Схема алгоритма работы программы:
Текст программы:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
setlocale(0, "");
double x, eps, sum = 0, p = 1, k = 0;
cout << "При заданном х с точностью eps вычислить сумму ((-1)^k*x^k)/(2k)!" << endl;
cout <<endl<< "Введите x" << endl << "x=";
cin >> x;
cout << endl << "Введите eps" << endl << "E=";
cin >> eps;
while (abs(p) >= eps) {
sum += p;
p = -p * (x / (2 * k + 2));
k++;
}
cout<< endl << "Сумма=" << sum;
return 0;
}
Тестовый пример:
Вычисления представлены в таблице при x=5 и eps= 0.00000001, каждое следующее слагаемое вычисляется по формуле p = -p * (x / (2 * k + 2))
X=
|
5
|
|
|
k |
p |
sum |
|
0 |
1,00000000 |
1,00000000 |
|
1 |
-2,50000000 |
-1,50000000 |
|
2 |
3,12500000 |
1,62500000 |
|
3 |
-2,60416667 |
-0,97916667 |
|
4 |
1,62760417 |
0,64843750 |
|
5 |
-0,81380208 |
-0,16536458 |
|
6 |
0,33908420 |
0,17371962 |
|
7 |
-0,12110150 |
0,05261812 |
|
8 |
0,03784422 |
0,09046234 |
|
9 |
-0,01051228 |
0,07995005 |
|
10 |
0,00262807 |
0,08257812 |
|
11 |
-0,00059729 |
0,08198084 |
|
12 |
0,00012444 |
0,08210527 |
|
13 |
-0,00002393 |
0,08208134 |
|
14 |
0,00000427 |
0,08208561 |
|
15 |
-0,00000071 |
0,08208490 |
|
16 |
0,00000011 |
0,08208501 |
|
17 |
-0,00000002 |
0,08208500 |
|
|
|
|
|
Вывод: В ходе выполнения лабораторной работы были получены навыки реализации циклических программ на языке С++ с использованием рекуррентных соотношений.
Контрольные вопросы:
Рекуррентное соотношение-соотношения вида, когда каждое следующее слагаемое зависит от предыдущего.
Рекуррентное соотношение для вычисления следующего слагаемого выглядит так p(i+1) = p(i) q, где вид множителя q определяется так: 𝑞 = 𝑝(𝑖+1)/ 𝑝(i)
Выигрыш в использовании рекуррентных соотношений состоит в экономии времени работы программы и памяти.
Это означает, что вычисления прекратятся только тогда, когда очередной член по абсолютной величине будет меньше
while(abs(p)>=eps)
{//тело цикла
}
for (i=0; abs(q*p)≥eps; i++)
{//тело цикла
} где q множитель