calcVlad/BuggyCalculator/MainWindow.axaml.cs
2025-02-05 16:36:06 +03:00

92 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace BuggyCalculator
{
public partial class MainWindow : Window
{
private TextBox _input1;
private TextBox _input2;
private ComboBox _operation;
private TextBlock _result;
private Button _calculateButton;
public MainWindow()
{
InitializeComponent();
_input1 = this.FindControl<TextBox>("Input1") ?? throw new InvalidOperationException("Input1 not found");
_input2 = this.FindControl<TextBox>("Input2") ?? throw new InvalidOperationException("Input2 not found");
_operation = this.FindControl<ComboBox>("Operation") ?? throw new InvalidOperationException("Operation not found");
_result = this.FindControl<TextBlock>("Result") ?? throw new InvalidOperationException("Result not found");
_calculateButton = this.FindControl<Button>("CalculateButton") ?? throw new InvalidOperationException("CalculateButton not found");
_calculateButton.Click += Calculate;
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
private void Calculate(object? sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(_input1.Text))
{
_result.Text = "Ошибка: Первое поле пустое.";
return;
}
if (!double.TryParse(_input1.Text, out double num1))
{
throw new FormatException("Ошибка: Некорректный ввод");
}
double num2 = string.IsNullOrWhiteSpace(_input2.Text) ? 0 : double.Parse(_input2.Text);
if (_operation.SelectedItem is ComboBoxItem selectedItem)
{
string operation = selectedItem.Content.ToString();
double result = operation switch
{
"Сложение" => num1 + num2,
"Вычитание" => num1 - num2,
"Умножение" => num1 * num2,
"Деление" => num2 != 0 ? num1 / num2 : throw new DivideByZeroException(),
"Возведение в степень" => num2 < 0 ? throw new InvalidOperationException("Возведение в отрицательную степень запрещено") : Math.Pow(num1, num2),
"Квадратный корень" => num1 >= 0 ? Math.Sqrt(num1) : throw new InvalidOperationException("Квадратный корень из отрицательного числа невозможен"),
"Логарифм" => num1 > 0 && num2 > 0 && num2 != 1 ? Math.Log(num1, num2) : throw new InvalidOperationException("Основание логарифма должно быть > 0 и != 1"),
"Синус" => Math.Sin(num1),
"Косинус" => Math.Cos(num1),
"Тангенс" => Math.Tan(num1),
_ => throw new InvalidOperationException("Неизвестная операция")
};
_result.Text = $"Результат: {result}";
}
else
{
_result.Text = "Ошибка: Не выбрана операция.";
}
}
catch (FormatException)
{
_result.Text = "Ошибка: Неверный формат числа.";
}
catch (DivideByZeroException)
{
_result.Text = "Ошибка: Деление на ноль.";
}
catch (Exception ex)
{
Environment.FailFast(ex.Message);
}
}
}
}