Другие языки программирования и технологии

Программа на С++

Написать программу на С++

Задача:

Даны три действительных числа X, Y, Z. Если они попарно различны и их полусумма больше единицы, то заменить меньшее из X и Z полусуммой двух оставшихся значений; в противном случае заменить меньшее из X, Y, Z наибольшим из них.
Erlllllaaannnn
Erlllllaaannnn
135
#include <iostream>
using namespace std;
double real(const char* msg) {
cout << msg << ": ";
double value;
cin >> value;
return value;
}
bool neq(double a, double b, double c) {
return a != b && a != c && b != c;
}
template<typename Type, typename... Args>
Type half(Args... args) {
auto seq = initializer_list<Type>({ args... });
Type sum = 0;
for (auto value : seq) sum += value;
return sum / 2;
}
template<typename Type, typename... Args>
Type min(Args... args) {
auto seq = initializer_list<Type>({ args... });
auto mn = *seq.begin();
for (auto value : seq) if (value < mn) mn = value;
return mn;
}
template<typename Type, typename... Args>
Type max(Args... args) {
auto seq = initializer_list<Type>({ args... });
auto mx = *seq.begin();
for (auto value : seq) if (value > mx) mx = value;
return mx;
}
bool is_min(double x, double mn) {
return x == mn;
}
bool is_max(double x, double mx) {
return x == mx;
}
int main() {
while (true) {
auto x = real("x");
auto y = real("y");
auto z = real("z");
auto xyz = half<double>(x, y, z);
if (xyz > 1 && neq(x, y, z)) {
x < z
? x = half<double>(y, z)
: z = half<double>(x, y);
} else {
auto mn = min<double>(x, y, z);
auto mx = max<double>(x, y, z);
if (mn != mx) {
if (is_min(x, mn)) x = mx;
else if (is_max(x, mx)) x = mn;
if (is_min(y, mn)) y = mx;
else if (is_max(y, mx)) y = mn;
if (is_min(z, mn)) z = mx;
else if (is_max(z, mx)) z = mn;
}
}
cout
<< "x = " << x << '\n'
<< "y = " << y << '\n'
<< "z = " << z << '\n';
system("pause");
system("cls");
}
}
Пашка Павленко
Пашка Павленко
59 412
Лучший ответ
Erlllllaaannnn Спасибо большое!!