#include <iostream>
#include <optional>
#include <stdexcept>
bool safe_divide_1(int numerator, int denominator, double& result) noexcept {
if (denominator == 0) return false;
result = static_cast<double>(numerator) / denominator;
return true;
}
std::optional<double> safe_divide_2(int numerator, int denominator) noexcept {
if (denominator == 0) return std::nullopt;
return static_cast<double>(numerator) / denominator;
}
double safe_divide_3(int numerator, int denominator) {
if (denominator == 0) throw std::runtime_error("Division by zero!");
return static_cast<double>(numerator) / denominator;
}
int main() {
// первый вариант
double result1;
if (safe_divide_1(10, 0, result1)) {
std::cout << "Result 1: " << result1 << std::endl;
} else {
std::cout << "Error 1: Division by zero!" << std::endl;
}
// второй вариант
auto result2 = safe_divide_2(10, 0);
if (result2) {
std::cout << "Result 2:" << *result2 << std::endl;
} else {
std::cout << "Error 2: Division by zero!" << std::endl;
}
// третий вариант
try {
double result3 = safe_divide_3(10, 0);
std::cout << "Result 3: " << result3 << std::endl;
} catch (const std::exception &e) {
std::cout << "Error 3: " << e.what() << std::endl;
}
return 0;
}