Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / Laba_varik27_7.2.docx
Скачиваний:
15
Добавлен:
10.06.2023
Размер:
614 Кб
Скачать
☆

Функциональный алгоритм 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.

Соседние файлы в папке лабы