Функциональный алгоритм Branch – вычисление условного алгоритма
Алгоритм использует вложенные разветвления с базовыми алгоритмами нахождения наибольшего и наименьшего значений без использования библиотечных функций. (рис. 1)
Рисунок 1 – Схема алгоритма Branch, использующая базовые алгоритмы минимального и максимального значения
Функциональный алгоритм Pred – вычисление условного выражение решения задачи
Этот алгоритм использует предопределённые алгоритмы вычисления максимума и минимума двух переменных – maximum и minimum (рис. 2).
Рисунок
2 – Схема
алгоритма Pred,
использующая предопределённые алгоритмы
maximum
и minimum.
Схема алгоритма главной функции main
Эта схема отображает главную функцию main. (рис. 3)
Рисунок
3 – Схема Алгоритма главной функции
main.
Разработка программного кода проекта
Разработан программный код для трёх файлов: GetAndPut.cpp, Solve.cpp и Main.cpp.
Программный код GetAndPut.cpp представлен на Листинге 1
//Файл GetAndPut.cpp
#include <iostream>
//Директива iostream для вывода и ввода данных
//Функция ввода значений getABX
void getYZXC(double& y, double& z, double& x, double& c)
{
setlocale(LC_ALL, "RUS");
std::cout << "[y] Введите значение для переменной y: ";
std::cin >> y;
std::cout << "[z] Введите значение для переменной z: ";
std::cin >> z;
std::cout << "[x] Введите значение для переменной x: ";
std::cin >> x;
std::cout << "[c] Введите значение для переменной c: ";
std::cin >> c;
std::cout << "\n";
}
//Функция вывода значений putRetN
void putRetN(double ret, short n)
{
setlocale(LC_ALL, "RUS");
std::cout << "[ret] Ответ: " << ret << "\n";
std::cout << "[#] Использованный номер ветки: " << n << "\n";
}
Листинг 1 – Программный код файла GetAndPut.cpp.
Программный код Solve.cpp представлен на Листинге 2:
// Файл Solve.cpp
#include <cmath>
// Директива cmath, которая даёт возможность использования математических функций
// Функция Branch с вложенными разветвлениями
double ret;
double Branch(double y, double z, double x,double c, short& n)
{
if (x > 0)
{
if (y*z > 0)
{
double ret1 = c*y;
double ret2 = sqrt(x);
if (ret1 > ret2)
{
double ret3 = y;
double ret4 = z;
double ret5 = ret1;
if (ret3 > ret4)
{
if (ret4 > ret5)
{
ret = ret5;
n = 1;
}
else
{
ret = ret4;
n = 1;
}
}
else
{
ret4 = ret3;
if (ret4 > ret5)
{
ret = ret5;
n = 1;
}
else
{
ret = ret4;
n = 1;
}
}
}
else
{
double ret3 = y;
double ret4 = z;
double ret5 = ret2;
}
}
else
{
double ret1=tan(x);
double ret2=pow(z,3);
if (ret1 > ret2)
{
ret = ret2;
n = 2;
}
else
{
ret = ret1;
n = 2;
}
}
}
else
{
ret = 15;
n = 3;
}
return ret;
}
// Описание прототипов maximum и minimum
double minimum(double a, double x);
double maximum(double a, double x);
// Определение функции Pred, используйющей предопределённые алгоритмы minimum и maximum
double Pred(double y, double z, double x,double c, short& n)
{
if (x > 0)
{
if (y*z > 0)
{
n = 1;
return minimum(minimum(y,z),maximum(sqrt(x),c*y));
}
else
{
n = 2;
return minimum(tan(x),pow(z,3));
}
}
else
{
n = 3;
ret = 15;
}
}
// Определение minimum
double minimum(double a, double x)
{
double f;
if (a < x)
{
f = a;
}
else
{
f = x;
}
return f;
}
// Определение maximum
double maximum(double a, double x)
{
double f;
if (a > x)
{
f = a;
}
else
{
f = x;
}
return f;
}
Листинг 2 – Программный код файла Solve.cpp.
Программный код main.cpp представлен на Листинге 2:
// Файл main.cpp
#include <iostream>
//Директива iostream для вывода и ввода данных
void getABX(double& a, double& b, double& x);
void putRetN(double ret, short n);
double Branch(double a, double b, double x, short& n);
double Pred(double a, double b, double x, short& n);
int main()
{
double a, b, x, ret;
short n;
getABX(a, b, x);
short methodChoosing;
std::cout << "[1] С вложенными разветвлениями;\n";
std::cout << "[2] Со своими функциями minimum и maximum.\n";
std::cout << "\n";
std::cout << "[#] Каким способом вы хотите решить эту задачу? Напишите 1 или 2: ";
std::cin >> methodChoosing;
std::cout << "\n";
switch (methodChoosing)
{
case 1:
ret = Branch(a, b, x, n);
putRetN(ret, n);
std::cout << "[#] Выбранный вами метод: " << methodChoosing << "\n";
break;
case 2:
ret = Pred(a, b, x, n);
putRetN(ret, n);
std::cout << "[#] Выбранный вами метод: " << methodChoosing << "\n";
break;
default:
std::cout << "[!] Вы ввели неверное значение! Оно должно быть либо 1, либо 2! Попробуйте ещё раз, написав правильное значение.\n";
std::cout << "\n";
system("PAUSE");
system("CLS"); // Очистка консоли при ошибочном выборе метода решения задачи
return main(); // Повторное решение путем возврата к main()
break;
}
}
Листинг 3 – Программный код файла Main.cpp.
