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

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

.cpp
Скачиваний:
1
Добавлен:
17.12.2018
Размер:
5.41 Кб
Скачать
// Написать программу табулирования функции с постоянным шагом
// Найти максимальное и минимальное значение функции при х
// Найти интеграл
#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;
}