Как сделать проверку на выход из графика?

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

Поставленная задача:

Разработать консольное приложение, производящее табулирование заданной функции в задаваемом диапазоне с задаваемым числом шагов, а также, определение минимального и максимального из выводимых значений функции. Но преподаватель сказал сделать еще проверки, мне необходимо найти границы графика и как-то их задать, чтобы когда табулирование доходило до этих значений выводило значение не найдено.

Решение:

#include <iostream>
#include <fstream>
using namespace std;


int main()
{
setlocale(LC_ALL, "russian");
double x;
double final;
double Func;
double step;
double max;
double min;
double i;
bool t = false;
ofstream out;

// Проверка на то, что вводится числа, а не другие символы
while (!t) {
    cout << "Введите начальное значение: ";
    cin >> x;
    if (cin.good()) {
        t = true;
    }
    else {
        cout << "Введено неверное значение!" << endl;
        cin.clear();
        cin.ignore();
    }
    if (t == 1) {
        break;
    }
}
//

cout << "Введите конечное значение: ";
cin >> final;
cout << "Введите шаг: ";
cin >> step;
out.open("test.txt");
i = x;

min = (x * x - pow(2.3, x)) * (x + exp(2 * x)) / (x + log(pow(x, x) + 1));
max = min;

while (i <= final) {
    Func = (i * i - pow(2.3, i)) * (i + exp(2 * i)) / (i + log(pow(i, i) + 1));
    if (Func > max) {
        max = Func;
    }
    if (Func < min) {
        min = Func;
    }
    cout << "i= " << i << endl;
    out << "i= " << i << endl;
    cout << "Func= " << Func << endl;
    out << "Func= " << Func << endl;
    i += step;
}
cout << "min= " << min << endl;
out << "min= " << min << endl;
cout << "max= " << max;
out << "max= " << max;
out.close();
}

Ответы (1 шт):

Автор решения: Zhihar

в основном ваш код делает то, что требуется, но..

№1:

не совсем понятна его первая часть:

bool t = true;

// Проверка на то, что вводится числа, а не другие символы
while (!t) {
    cout << "Введите начальное значение: ";
    cin >> x;
    if (cin.good()) {
        t = true;
    }
    else {
        cout << "Введено неверное значение!" << endl;
        cin.clear();
        cin.ignore();
    }
    if (t == 1) {
        break;
    }
}

что это? зачем? почему только для одной переменной?

и кстати зачем так усложнен код - лишние переменные и условия, можно же сделать так:

while (true) {
    cout << "enter: ";
    cin >> x;

    if (cin.good())
        break;

    cout << "wrong!" << endl;
    cin.clear();
    cin.ignore();
}

№2:

теперь вы строите график (вычисляете значение функции) от x до final с шагом step

Так и надо?

Лично я думал, что надо задать 3 параметра left, right, step - левую границу, правую границу и шаг, с которым надо двигаться

№3

теперь касательно области определения функции - посмотрите на свою функцию

Func = (i * i - pow(2.3, i)) * (i + exp(2 * i)) / (i + log(pow(i, i) + 1));

в ней есть

  1. логарифм, у которого есть определённая область определения,
  2. знаменатель, у которого тоже есть особая точка
  3. x^x (pow(i, i)) у которой тоже не все так просто

простой пример - надо построить график функции y = sqrt(x) между точками -10..+10, а функция существует только в точках 0.., значит остальные точки -10..0 надо пропустить

теперь понятно что вам надо сделать?

вам надо определить область определения вашей функции и скорректировать left, right, которые ввел пользователь

№4

ну и зачем усложнять код всякими while когда у вас есть for:

for (double x = left; x <= right; x+= step)
→ Ссылка