C/C++

УМОЛЯЮ!!!!! Помогите решить задачу на C++

Составить программу с использованием условного оператора if/else.
Ввести с клавиатуры число х. Вывести в порядке возрастания числа: sin x, cos x, ln x. Если при каком-либо х некоторые из выражений не имеют смысла, вывести сообщение об этом и сравнивать значения только тех, которые имеют смысл.
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
double a[3], x;
cout << "x: ";
cin >> x;
a[0] = sin(x);
cout << "sin(x) = " << a[0] << endl;
a[1] = cos(x);
cout << "cos(x) = " << a[1] << endl;
if (x <= 0)
{
cout <<
"logarithm of a non-positive number"
<< endl;
sort(a, a + 2);
cout << a[0] << ' ' << a[1] << endl;
}
else
{
a[2] = log(x);
cout << " ln(x) = " << a[2] << endl;
sort(a, a + 3);
cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
}
}
Если
cout << "sin(x) = " << a[0] << endl;
cout << "cos(x) = " << a[1] << endl;
и
cout << " ln(x) = " << a[2] << endl;
не нужны, то их можно убрать, но с ними всё понятнее. Функция sort из стандартной библиотеки нужна для того, чтобы оператор if else был единственным. Если этой функцией не пользоваться, то таких операторов будет потребуется несколько.
АК
Александр Коваль
66 572
Лучший ответ
#include <iostream>
#include <string>
#include <iomanip>
#include <string>
using namespace std;
struct Data {
double value;
string message;
Data() : value(0) {}
Data(const double val, const string& msg) : value(val), message(msg) {}
private:
friend bool operator<(const Data& a, const Data& b) {
if ("inf"s == to_string(fabs(b.value))) return false;
if ("inf"s == to_string(fabs(a.value))) return true;
if ("nan"s == to_string(fabs(b.value))) return false;
if ("nan"s == to_string(fabs(a.value))) return true;
return a.value < b.value;
}
friend ostream& operator<<(ostream& out, const Data& d) {
out << d.message;
auto tmp = fabs(d.value);
if ("nan"s == to_string(tmp)) puts("not a number");
else if ("inf"s == to_string(tmp)) puts("infinity");
else out << d.value;
return out;
}
};
int main() {
cout << "x: ";
double x;
cin >> x;
Data a{ sin(x), "sin(x) = " };
Data b{ cos(x), "cos(x) = " };
Data c{ log(x), "log(x) = " };
if (b < a) swap(a, b);
if (c < a) swap(a, c);
if (c < b) swap(b, c);
cout.setf(ios::fixed);
cout.precision(15);
cout << a << '\n' << b << '\n' << c << '\n';
system("pause > nul");
}
ПЗ
Паша Зайко
94 981