МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ
(НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСТИТЕТ)
«МАИ»
Лабораторная работа №3
по дисциплине: «Информатика»
на тему:
«Табулирование функции, заданной с помощью ряда Тейлора »
Выполнил:
студент гр. М4О-111Б-19
Проверил: Чечиков Ю.Б.
г.Москва
2019
Содержание
Оглавление
Содержание……………………………….….…………………….….…….2
Задание…………………………….….….……………………………….….3
Блок-схема…………………….………………………..……………………4
Псевдокод……………….….….…………………………………………….5
Код С++………………………………………………………………………7
Тесты…………………………….……………………………………….…11
Вывод…………………………….………….….…………………………..16
Задание
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с количеством интервалов N, с шагом dx, с точностью eps.
Блок-схема
Псевдокод
функция вещ ln(арг вещ x, вещ eps, рез вещ 2*Sum)
перечисление вещ: Sum, n, slag, chisl, znam, step
chisl = x -1
znam = x + 1
n = 0
slag = chisl / znam
Sum = slag
пока (модуль(slag) > eps) делать
нц
если n!= 0
то
Sum + = slag
Конец если
n += 1
step = 2n + 1
slag = chisl step / (step * znam step)
кц
вывод 2*Sum
Начало
перечисление вещ: A, B, x, h, F_x, N, eps
ввод A, B
если А>B
то
сообщение об ошибке «А не может быть больше Б»
выход из программы
Конец если
если А=В
то
h = 0
N = 0
Иначе
ввод N
если N<=0 или округл(N)!= N
то
сообщение об ошибке «Количество интервалов число целое и >0»
Выход из программы
Конец если
h = (B-A)/N
Конец если
ввод eps
если eps <= 0
то
сообщение об ошибке «Эпсилон строго > 0»
Выход из программы
Конец если
цикл по i=0,N,1
нц
x = A + i*h
если x <= 0
то
печатать x, «F_x not defined»
Иначе
F_x = ln(x, eps);
печатать x, F_x
кц
Конец
Код С++
/******************************************************
* КАФЕДРА № 304 1 КУРС ИНФОРМАТИКА *
*-----------------------------------------------------*
* Project Type: Console Application *
* Project Name: LabWork3 *
* File Name: theThird.cpp *
* Language: C/C++ *
* Programmer(s): *
* Modified By: *
* Created: 14.11.19 *
* Last Revision: 15.11.19 *
* Comment(s): Табулирование функции, заданной при * * помощи ряда Тейлора *
******************************************************/
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
/*****************************************************/
/* О С Н О В Н А Я П Р О Г Р А М М А */
/*****************************************************/
//Будем вычислять сумму ряда через отдельную функцию
Double ln(double x, double eps)
{ //инициализация переменных
double Sum = 0; //сумма
double n = 0; //количество членов
double slag = 0; //слагаемое
double chisl = x - 1; //Замена повт. элемента
double znam = x + 1;
double step; //степень
slag = chisl / znam;
Sum = slag; //Если следующее условие ложно,то сумма соответствует 1-му слагаемому
while (fabs(slag) > eps)
{
if (n!= 0) //Не считаем дважды первое слагаемое
{
Sum += slag;
}
n++;
step = 2 * n + 1;
slag = pow(chisl, step) / (step * (pow(znam, step)));
}//end of while
return 2 * Sum; //Наша сумма вдвое меньше необходимой
}//end of ln-function
Int main()
{
setlocale(LC_ALL, "RUSSIAN"); //подключаем русский язык
system("color F0"); //Буквы черные,фон белый
//setlocale(LC_ALL, "C"); //отключение русского языка
//объявление переменных
double A; //начало отрезка
double B; //конец отрезка
double x; //аргумент
double h; //шаг
double N; //количество интервалов
double F_x; //функция
double eps; //точность для ряда
//от какого значения и до какого табулировать функцию
cout << "Введите начало отрезка: А = ";
cin >> A;
cout << "Введите конец отрезка: В = ";
cin >> B;
cout << "Эхопечать: А = " << A << " B = " << B << endl;
//входной контроль 1
if (A > B)
{
cout << "Некорректные введенные данные" << endl;
system("pause");
return 1;
}
if (A == B)
{
N = 0; //точка
h = 0; //шаг отсутствует
}
else
{ //Получаем количество интервалов
cout << "Введите количество интервалов: ";
cin >> N;
cout << "Эхопечать N = " << N << endl;
//Входной контроль 2
if ((N <= 0) || (round(N)!= N))
{
cout << "Количество интервалов - строго целое и положительное число,большее 0" << endl;
system("pause");
return 1;
}
//инициализация шага
h = (B - A) / N;
cout << "Эхопечать h = " << h << endl;
}
//получаем eps
cout << "Введите eps = ";
cin >> eps;
cout << "Эхопечать eps: eps = " << eps << endl;
//входной контроль 3
if (eps <= 0)
{
cout << "Эпсилон - строго положительное число, большее нуля" << endl;
system("pause");
return 1;
}
//оформление таблицы
setlocale(LC_ALL, "C"); //отключение русского языка
cout << char(218) << setfill(char(196)) << setw(15) << char(194) << setfill(char(196)) << setw(15) << char(191) << endl;
cout << char(179) << setfill(char(0)) << setw(14) << "x" << char(179) << setw(14) << "F" << char(179) << endl;
//основной цикл
for (int i = 0; i <= N; i++)
{
x = A + i * h;
if (x <= 0) //Функция при х<=0 не определена
{
cout << char(195) << setfill(char(196)) << setw(15) << char(197) << setfill(char(196)) << setw(15) << char(180) << endl;
cout << char(179) << setfill(char(0)) << setw(14) << x << char(179) << setw(14) << "not defined" << char(179) << endl;
}
else
{
F_x = ln(x, eps); //вычисляем значение
cout << char(195) << setfill(char(196)) << setw(15) << char(197) << setfill(char(196)) << setw(15) << char(180) << endl;
cout << char(179) << setfill(char(0)) << setw(14) << x << char(179) << setw(14) << F_x << char(179) << endl;
}
}
//оформление таблицы в конце программы
cout << char(192) << setfill(char(196)) << setw(15) << char(193) << setfill(char(196)) << setw(15) << char(217) << endl;
system("pause");
return 0;
} //end main
/********* End of theThird.cpp file***************/
Тесты
I. Тестирование некорректных режимов
1.1) Цель: проверить работоспособность программы при A>B
2) Исходные данные: A = 10000000, B = 1
3) Ожидаемый результат: ERROR! A > B
4) Полученный результат:
5) Полученный результат совпал с ожидаемым.
Вывод по тесту: тест ошибку не обнаружил.
2.1) Цель: проверить работоспособность программы при N<0
2) Исходные данные: A = 1, B = 10, N=-0.1
3) Ожидаемый результат: ERROR! N<=0
4) Полученный результат:
5) Полученный результат совпал с ожидаемым.
Вывод по тесту: тест ошибку не обнаружил.
3 .1) Цель: проверить работоспособность программы при N=0
2) Исходные данные: A = 1, B = 10, N=0
3) Ожидаемый результат: ERROR! N<=0
4) Полученный результат:
5) Полученный результат совпал с ожидаемым.
Вывод по тесту: тест ошибку не обнаружил.
4 .1) Цель: проверить работоспособность программы при eps=0
2) Исходные данные: A = 0, B = 1, N=1, eps = 0
3) Ожидаемый результат: ERROR! eps<=0
4) Полученный результат:
5) Полученный результат совпал с ожидаемым.
Вывод по тесту: тест ошибку не обнаружил.
5 .1) Цель: проверить работоспособность программы при eps<0
2) Исходные данные: A = 0, B = 1, N=1, eps = -0.1
3) Ожидаемый результат: ERROR! eps<=0
4) Полученный результат: