174 lines
4.6 KiB
C#
174 lines
4.6 KiB
C#
using System;
|
||
using Avalonia.Controls;
|
||
using Avalonia.Interactivity;
|
||
using Avalonia.Markup.Xaml;
|
||
|
||
namespace calculatorEshkeree;
|
||
|
||
public partial class MainWindow : Window
|
||
{
|
||
public MainWindow()
|
||
{
|
||
InitializeComponent();
|
||
_display = this.FindControl<TextBox>("Display");
|
||
}
|
||
|
||
private TextBox _display;
|
||
|
||
private string _currentInput = "";
|
||
private string _firstOperand = "";
|
||
private string _operation = "";
|
||
private int _equalPressCount = 0;
|
||
|
||
private void InitializeComponent()
|
||
{
|
||
AvaloniaXamlLoader.Load(this);
|
||
}
|
||
|
||
private void OnNumberButtonClick(object sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button button)
|
||
{
|
||
if (button.Content.ToString() == "7")
|
||
return;
|
||
|
||
if (_currentInput.Length >= 3)
|
||
return;
|
||
|
||
_currentInput += button.Content.ToString();
|
||
UpdateDisplay(_currentInput);
|
||
}
|
||
}
|
||
|
||
private void OnOperationButtonClick(object sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button button)
|
||
{
|
||
string operation = button.Content.ToString();
|
||
|
||
if (!string.IsNullOrEmpty(_currentInput))
|
||
{
|
||
double value = double.Parse(_currentInput);
|
||
|
||
if (operation == "tg")
|
||
{
|
||
_currentInput = "";
|
||
_firstOperand = "";
|
||
_operation = "";
|
||
UpdateDisplay("баг");
|
||
return;
|
||
}
|
||
|
||
if (operation == "sin" || operation == "cos" || operation == "ctg")
|
||
{
|
||
double result = operation switch
|
||
{
|
||
"sin" => Math.Cos(value * Math.PI / 180),
|
||
"cos" => Math.Sin(value * Math.PI / 180),
|
||
"ctg" => 1 / Math.Tan(value * Math.PI / 180),
|
||
_ => 0
|
||
};
|
||
|
||
UpdateDisplay(result.ToString());
|
||
_currentInput = result.ToString();
|
||
}
|
||
else
|
||
{
|
||
if (operation == "+" && _operation != "+")
|
||
{
|
||
_operation = "+";
|
||
return;
|
||
}
|
||
|
||
_firstOperand = _currentInput;
|
||
_operation = operation;
|
||
_currentInput = "";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void OnEqualButtonClick(object sender, RoutedEventArgs e)
|
||
{
|
||
_equalPressCount++;
|
||
if (_equalPressCount < 3)
|
||
{
|
||
return;
|
||
}
|
||
_equalPressCount = 0;
|
||
|
||
if (!string.IsNullOrEmpty(_firstOperand) && !string.IsNullOrEmpty(_currentInput))
|
||
{
|
||
double first = double.Parse(_firstOperand);
|
||
double second = double.Parse(_currentInput);
|
||
|
||
if (first == 0 && second == 0)
|
||
{
|
||
UpdateDisplay("zer00");
|
||
return;
|
||
}
|
||
|
||
double result = _operation switch
|
||
{
|
||
"+" => first + second,
|
||
"-" => first - second,
|
||
"*" => first * second,
|
||
"/" => first / second,
|
||
_ => 0,
|
||
};
|
||
|
||
if (result.ToString().Length > 5)
|
||
{
|
||
result = Math.Round(result, 2);
|
||
UpdateDisplay($"{result}...");
|
||
}
|
||
else
|
||
{
|
||
UpdateDisplay(result.ToString());
|
||
}
|
||
|
||
_currentInput = result.ToString();
|
||
_firstOperand = "";
|
||
_operation = "";
|
||
}
|
||
}
|
||
|
||
private void OnClearButtonClick(object sender, RoutedEventArgs e)
|
||
{
|
||
if (!string.IsNullOrEmpty(_currentInput))
|
||
{
|
||
if (_currentInput.Length > 1)
|
||
{
|
||
int halfLength = _currentInput.Length / 2;
|
||
_currentInput = _currentInput.Substring(0, halfLength);
|
||
}
|
||
else
|
||
{
|
||
_currentInput = "";
|
||
}
|
||
}
|
||
else if (!string.IsNullOrEmpty(_firstOperand))
|
||
{
|
||
if (_firstOperand.Length > 1)
|
||
{
|
||
int halfLength = _firstOperand.Length / 2;
|
||
_firstOperand = _firstOperand.Substring(0, halfLength);
|
||
}
|
||
else
|
||
{
|
||
_firstOperand = "";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_operation = "";
|
||
}
|
||
|
||
UpdateDisplay(string.IsNullOrEmpty(_currentInput) ? "0" : _currentInput);
|
||
}
|
||
|
||
private void UpdateDisplay(string text)
|
||
{
|
||
_display.Text = text;
|
||
}
|
||
} |