C/C++

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Варианты определяются следующим образом: 1-1, 2-2, ... 20-20, 21-1, 22-2 и т.д.
Параметр R вводится с клавиатуры.
 #include  
#include
using namespace std;
double input(const char* msg) {
cout > value;
cin.ignore(0x1000, '\n');
return value;
}
double f(const double x) {
auto y = 2.0;
auto a = fabs(-8.0 - x);
if (a < 1e-2) a = 0.0;
if (a == 0.0) y = -8.0;
else if (-10.0
SU
S U N A T ?????
66 772
Лучший ответ
Функция будет определена на промежутке
[-6-2R;+∞), непрерывной и состоящей из четырёх гладких кусков - только и всего. Программно её можно организовать в виде внешней параметрической функции (то есть кроме одного аргумента у ней ещё будет один параметр) или в виде вычисления значения выражения с ветвлением, например так:
#include <cmath>
#include <iostream>
using namespace std;
double R; double y(double x)
{ if (x < -6) return 2.-sqrt(R*R-pow(x+6+R,2));
if (x < -4) return 2.; if (x < 2.) return -0.5 * x;
return x - 3.; }
int main() { double x; cout.precision(16);
cout << "R = "; cin >> R; while (true)
{ cout << "x = "; cin >> x; cout << y(x) << endl; } }
Тут R - параметр отдельной функции, вызываемой из главной функции main, выделенный в глобальную переменную, а х - аргумент этой внешней функции, задаваемый в главной функции и передающийся во внешнюю функцию при её вызове.
Во внешней функции у(х) можно ещё написать так:
if (x < -6) { x += 6.; return 2. - sqrt(x * (R - x)); }
Так будет лучше, только тогда в основной функции main() параметр R надо будет удвоить сразу после его ввода с клавиатуры.

Похожие вопросы