Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Лабораторная работа №9. ver. 2. Вариант 19

.docx
Скачиваний:
2
Добавлен:
17.12.2018
Размер:
253.77 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе №9

Тема: Выполнение индивидуального задания по табулированию функции в среде оболочки MS Visual C 2010.

Студента гр. 8202

Преподаватель

Санкт-Петербург

2018

Цель работы

Разработать программу по табулированию заданной функции в среде оболочки MS Visual C 2010.

Задание

Разработать программу, обеспечивающую табулирование (вычисление

значений функции) с постоянным шагом по аргументу α функции:

по заданным – интервалу и числу точек табулирования.

Область определения функции:

Число точек табулирования – не более 100.

Относительная погрешность вывода результатов – не более 10−3

  1. Вывести таблицу значений функции вместе с соответствующими значениями аргумента;

  1. Найти максимальное и минимальное значения функции из рассчитанных

значений на интервале табулирования;

  1. Вычислить интеграл функции для заданных нижней и верхней границ интегрирования Lн , Lв .

Блок-схема

Код

// Написать программу табулирования функции с постоянным шагом

// Найти максимальное и минимальное значение функции при х

// Найти интеграл

#include <iostream>

#include <cmath>

#include <cstdlib>

#include <iomanip>

using namespace std;

int main()

{

double x, B, h, A, C, s, i, m, v, Fmax, Fmin, Lmax, Lmin, a, b, n, integral;

setlocale (0, "");

system("color 0F");

cout << "Программа табулирования функции с постоянным шагом по аргументу функции," << endl;

cout << "нахождения максимального и минимального значения функции и вычисления интеграла." << endl << endl;

cout << "f(x)=(B*x-sin(A))^2+C*B*x*sin(A)" << endl;

cout << "|A| <= 1000" << endl;

cout << "|x| <= 100" << endl;

cout << "0 < B <= 100" << endl;

cout << "|C| <= 1000" << endl;

cout << "Число шагов табулирования не более 100" << endl;

cout << "Относильная погрешность вывода результатов не более 0,001" << endl << endl;

do

{

cout << "Введите значение A: ";

cin >> A;

if (A > 1000 || A < -1000) {

system("color 04");

cout << "ОШИБКА! ЗНАЧЕНИЕ НЕ КОРРЕКТНО! |A| <= 1000" << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

}

while (A > 1000 || A < -1000);

do

{

cout << "Введите значение B: ";

cin >> B;

if (B > 100 || B <= 0) {

system("color 04");

cout << "ОШИБКА! ЗНАЧЕНИЕ НЕ КОРРЕКТНО! 0 < B <= 100" << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

}

while ((B > 100 || B <= 0));

do

{

cout << "Введите значение C: ";

cin >> C;

if (C > 1000 || C < -1000) {

system("color 04");

cout << "ОШИБКА! ЗНАЧЕНИЕ НЕ КОРРЕКТНО! |C| <= 1000" << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

}

while (C > 1000 || C < -1000);

cout << " " << endl << endl;

cout << "ВНИМАНИЕ! КОНЕЧНОЕ ЗНАЧЕНИЕ ДОЛЖНО БЫТЬ БОЛЬШЕ НАЧАЛЬНОГО!" << endl << endl;

system("pause");

cout << " " << endl << endl;

do

{

cout << "Введите начальное значение: ";

cin >> x;

if (x < -100 || x > 100 ) {

system("color 04");

cout << "ОШИБКА! ЗНАЧЕНИЕ НЕ КОРРЕКТНОЕ! |x|<=100 " << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

}

while (x < -100 || x > 100 );

do

{

cout << "Введите конечное значение: ";

cin >> m;

if (m < x) {

system("color 04");

cout << "ОШИБКА! КОНЕЧНОЕ ЗНАЧЕНИЕ ДОЛЖНО БЫТЬ БОЛЬШЕ НАЧАЛЬНОГО!" << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

}

while (m < x);

do {

cout << "Введите шаг табулирования: ";

cin >> h;

cout << " " << endl << endl;

v = (m-x)/h; // количество точек табулирования

cout << "Количество точек табулирования: " << v << endl << endl;

cout << setprecision (3) << fixed; //Даёт три числа после запятой

if (v >= 100) {

system("color 04");

cout << "КОЛИЧЕСТВО ТОЧЕК ТАБУЛИРОВАНИЯ НЕ ДОЛЖНО ПРЕВЫШАТЬ 100!" << endl << endl;

system("pause"); }

system("color 0F");

cout << " " << endl << endl;

} while ( v >= 100);

system ("pause");

s = (B*x - sin(A))*(B*x - sin(A)) + C*B*x*sin(A);

Fmax = s;

Fmin = s;

Lmax = x;

Lmin = x;

for (i = x; i <= m; i += h) {

s = (B*i - sin(A))*(B*i - sin(A)) + C*B*i*sin(A);

if (s < Fmin) {

Fmin = s;

Lmin = i;

}

if (s > Fmax) {

Fmax = s;

Lmax = i;

}

cout << " " << endl << endl;

cout << "x = " ;

cout << i << endl;

cout << "f(x) = " ;

cout << s << endl << endl;

}

system("pause");

cout << " " << endl << endl;

cout << setprecision (0) << fixed;

cout << "Минимальное значение функции: " << Fmin << " при x = " << Lmin << endl;

cout << "Максимальное значение функции: " << Fmax << " при x = " << Lmax << endl;

cout << " " << endl << endl;

system("pause");

cout << " " << endl << endl;

cout << "ВЫЧИСЛЕНИЕ ИНТЕГРАЛА" << endl << endl;

system("pause");

cout << " " << endl << endl;

cout << "Верхняя граница интегрирования: ";

cin >> b;

cout << "Нижняя граница интегрирования: ";

cin >> a;

double z = 1;

n = (b - a) / z;

//интеграл ищется через формулму Симпсона

integral = z * ((B*a - sin(A))*(B*a - sin(A)) + C*B*a*sin(A) + (B*b - sin(A))*(B*b - sin(A)) + C*B*b*sin(A)) / 6.0;

for(i = 1; i <= n; i++)

integral = integral + 4.0 / 6.0 * z * ((B*(a + z * (i - 0.5)) - sin(A))*(B*(a + z * (i - 0.5)) - sin(A)) + C*B*(a + z * (i - 0.5))*sin(A));

for(i = 1; i <= n-1; i++)

integral = integral + 2.0 / 6.0 * z * (B*(a + z * i) - sin(A))*(B*(a + z * i) - sin(A)) + C*B*(a + z * i)*sin(A);

cout << "Интеграл функции от " << b << " до " << a << " равен: " << integral << "\n";

cout << " " << endl << endl;

system("pause");

return 0;

}

Скриншоты

Вывод

Мы выполнили табулировние функции с постоянным шагом по аргументу функции в среде MS Visual C 2010.