
C/C++
Не понимаю как в параметрах функции учесть, например, только положительные числа, когда флоат и т. д. Тема перегрузка функций
Вот задание. Есть вариант учитывать на количестве, но тогда будут проходить положительные, куда не надо. Помогите. пожалуйста. Инфу на такое не нашел.


#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");
}
#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");
}
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
функция 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
Похожие вопросы
- Как отсортировать массив в зависимости от третьего параметра функции?
- Передача параметров функцию.
- Как написать функцию в c++ которая складывает все положительные числа
- Даны действительные положительные числа на С++
- Зачем нужны переменные с припиской 16, 32 и т.д?
- Создать функцию, которая возводит число в степень.Запрещено использовать функцию возведения в степень.
- Что за число хранится в имени функции? (Си)
- C++ Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool
- Написать кусочек С++Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции
- Задание 4 по Теме Функции. Перегрузка Функций. Рекурсия. На языке программирования C++