Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- const double MIN_VALUE = -23170;
- const double MAX_VALUE = 23170;
- const double MIN_STEP = 0.0001;
- const double MAX_STEP = 0.1;
- using namespace std;
- double * inputIntervalFromConsole()
- {
- double interval[2];
- bool isIncorrect;
- string input;
- do {
- isIncorrect = false;
- cout << "\nВведите A из следующего диапазона [" << MIN_VALUE << ";" << MAX_VALUE << "]: " << endl;
- try {
- cin >> input;
- interval[0] = stod(input);
- if ((interval[0] < MIN_VALUE) || (interval[0] > MAX_VALUE)) {
- cout << "Введено число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- }
- catch (...) {
- cout << "Ошибка! Введено не число! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- } while (isIncorrect);
- do {
- isIncorrect = false;
- printf("Введите B из следующего диапазона [%5.3f; %5.3f]: ", interval[0], MAX_VALUE);
- try {
- cin >> input;
- interval[1] = stod(input);
- if ((interval[1] < MIN_VALUE) || (interval[1] > MAX_VALUE)) {
- cout << "Введено число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- if (interval[1] < interval[0]) {
- cout << "Введено число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- }
- catch (...) {
- cout << "Ошибка! Введено не число! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- } while (isIncorrect);
- return interval;
- }
- double* inputIntervalFromFile() {
- double interval[2];
- string path;
- ifstream file;
- bool isIncorrect = true;
- do {
- do {
- cout << "Введите путь к файлу с интервалом" << endl;
- cin >> path;
- try
- {
- isIncorrect = false;
- file.open(path);
- }
- catch (...)
- {
- isIncorrect = true;
- cout << "Файл не найден" << endl;
- }
- } while (isIncorrect);
- try {
- file >> interval[0];
- file >> interval[1];
- }
- catch (...) {
- isIncorrect = true;
- }
- if ((interval[1] < MIN_VALUE) || (interval[1] > MAX_VALUE)) {
- cout << "В файле находилось число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- if (interval[1] < interval[0]) {
- cout << "В файле находилось число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- } while (isIncorrect);
- return interval;
- }
- double* inputInterval()
- {
- bool isInCorrect;
- string input;
- double* interval = new double[2];
- do {
- isInCorrect = true;
- cout << "Выберите режим ввода (1 - файл, 2 - консоль)" << endl;
- cin >> input;
- if (input == "1") {
- interval = inputIntervalFromFile();
- isInCorrect = false;
- }
- else if (input == "2") {
- interval = inputIntervalFromConsole();
- isInCorrect = false;
- }
- } while (isInCorrect);
- printf("Указанный промежуток: [%5.3f; %5.3f]", interval[0], interval[1]);
- return interval;
- }
- static double inputStep() {
- bool isIncorrect;
- string input;
- double step = 0;
- do {
- isIncorrect = false;
- printf("\nВведите шаг поиска значения из следующего диапазона [%6.4f; %3.1f]: ", MIN_STEP, MAX_STEP);
- try {
- cin >> input;
- step = stod(input);
- if ((step < MIN_STEP) || (step > MAX_STEP)) {
- cout << "Введено число не из диапазона! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- }
- catch (...) {
- cout << "Ошибка! Введено не число! Пожалуйста, повторите попытку" << endl;
- isIncorrect = true;
- }
- } while (isIncorrect);
- return step;
- }
- // 4 cycle
- static double findMaxValue(double interval[], double step) {
- double y, x, max = 0;
- x = interval[0];
- y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
- max = y;
- while (x < interval[1]) {
- y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
- if (y > max) {
- max = y;
- }
- x = x + step;
- }
- return max;
- }
- static void writeOutputToFile(double max) {
- ofstream file("output.txt");
- file<<"Наибольшее значение данной функции на заданном промежутке = "<< max;
- file.close();
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- double step, max;
- cout << "Данная программа находит наибольшее значение y = (2 * x + 3) / (2 * x^2 - 3 * x + 4) функции на промежутке [a; b]." << endl;
- double* interval = inputInterval();
- step = inputStep();
- max = findMaxValue(interval, step);
- printf("Наибольшее значение данной функции на заданном промежутке = %5.3f", max);
- writeOutputToFile(max);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement