C/C++

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

Вот задание. Есть вариант учитывать на количестве, но тогда будут проходить положительные, куда не надо. Помогите. пожалуйста. Инфу на такое не нашел.
Vladimir Lituykhov
Vladimir Lituykhov
494
#include <iostream>
#include <iomanip>
using namespace std;
double fn(double x, double a, double b, double c) {
if (a < 0 && c != 0) return a * x * x + b * x + c;
if (a > 0 && c == 0) return -a / (x - c);
return a * (x + c);
}
double fn(double x, int a, int b, int c) {
if (a < 0 && c != 0) return a * x * x + b * x + c;
if (a > 0 && c == 0) return -a / (x - c);
return a * (x + c);
}
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
auto a = real("a: ");
auto b = real("b: ");
auto c = real("c: ");
auto xn = real("Xнач.: ");
auto xk = real("Xкон.: ");
auto dx = real("dX: ");
auto ac = static_cast<int>(a);
auto bc = static_cast<int>(b);
auto cc = static_cast<int>(c);
auto xe = xk + dx / 2;
cout << fixed;
if (ac & (bc | cc)) {
for (auto x = xn; x <= xe; x += dx) {
cout
<< setw(5) << setprecision(2) << x
<< setw(12) << setprecision(4) << fn(x, a, b, c)
<< '\n';
}
} else {
for (auto x = xn; x <= xe; x += dx) {
cout
<< setw(5) << setprecision(2) << x
<< setw(12) << setprecision(4) << fn(x, ac, bc, cc)
<< '\n';
}
}
system("pause > nul");
}
Александр Гуляев
Александр Гуляев
52 459
Лучший ответ
Vladimir Lituykhov я, кст, потом понял, что неправильно условие задания понял. Решил сам, но спасибо все равно!!!
можно попробовать шаблоны, чтобы не писать дважды одинаковое тело функции
функция F, пишется один раз:
template < typename T, typename R>
R F (double x, T a, T b, T c) {
if (a < 0 && c != 0) return ...
else
if (a > 0 && c == 0) return...
return ...
}
потом
int ac = static_cast (a);
int bc = static_cast (b);
int cc = static_cast (c);
и вызываем функцию с разными типами в зависимости от выражения (если я я правильно понял слова "функция должна принимать действительное либо целое значения")
if (ac & (bc | cc))
std::cout << F< double, double> (x, a, b, c);
else
std::cout << F< double, int> (x, a, b, c);
---
правда не уверен, корректно ли сравнение с нулем у double
AM
Alisher Muratov
25 445