#include <iostream>
#include <cmath> // Для математических функций log, sqrt, abs
#include <iomanip> // Для форматирования вывода (setprecision)
#include <clocale> // Для поддержки русского языка в консоли
using namespace std;
int main() {
// Устанавливаем русский язык в консоли Visual Studio
setlocale(LC_ALL, "Russian");
double x, a, b, z;
cout << "--- Программа для вычисления формулы z ---" << endl;
// Ввод данных
cout << "Введите значение x: ";
cin >> x;
cout << "Введите значение a: ";
cin >> a;
cout << "Введите значение b: ";
cin >> b;
// --- ПРОВЕРКИ (Математическая корректность) ---
// 1. Проверка деления на ноль
if (a == 0) {
cout << "\nОшибка: Деление на ноль! Переменная 'a' не может быть равна 0." << endl;
system("pause");
return 1;
}
// 2. Вычисляем аргумент под корнем: |x| * b
double under_sqrt = abs(x) * b;
if (under_sqrt < 0) {
cout << "\nОшибка: Подкоренное выражение меньше нуля!" << endl;
system("pause");
return 1;
}
// 3. Вычисляем аргумент логарифма: sqrt(|x|*b) + a*x
double log_argument = sqrt(under_sqrt) + (a * x);
// Логарифм определен только для положительных чисел
if (log_argument <= 0) {
cout << "\nОшибка: Аргумент логарифма должен быть больше нуля!" << endl;
cout << "Текущее значение аргумента: " << log_argument << endl;
system("pause");
return 1;
}
// --- ВЫЧИСЛЕНИЕ ---
// Формула: z = ln(sqrt(|x|*b) + ax) + x/a
z = log(log_argument) + (x / a);
// Вывод результата
cout << fixed << setprecision(6); // Выводим 6 знаков после запятой
cout << "\n----------------------------" << endl;
cout << "Результат z = " << z << endl;
cout << "----------------------------" << endl;
// Чтобы консоль в VS не закрылась сразу
system("pause");
return 0;
}