Калькулятор на C#
Калькулятор на C#
Калькулятор на C# — это учебное консольное приложение, демонстрирующее базовые принципы обработки пользовательского ввода, выполнения арифметических операций и управления потоком программы. Такой пример полезен для начинающих разработчиков, изучающих синтаксис языка, работу с типами данных и структурами управления.
Простая реализация
Простейший калькулятор запрашивает у пользователя два числа и операцию, после чего выводит результат:
using Система;
class SimpleCalculator
{
static void Main()
{
Console.WriteLine("=== Простой калькулятор ===");
Console.Write("Введите первое число: ");
double num1 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите операцию (+, -, *, /): ");
string operation = Console.ReadLine();
Console.Write("Введите второе число: ");
double num2 = Convert.ToDouble(Console.ReadLine());
double result = 0;
bool validOperation = true;
switch (operation)
{
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0)
result = num1 / num2;
else
{
Console.WriteLine("Ошибка: деление на ноль.");
return;
}
break;
default:
validOperation = false;
Console.WriteLine("Неизвестная операция.");
break;
}
if (validOperation)
Console.WriteLine($"Результат: {num1} {operation} {num2} = {result}");
}
}
Эта версия:
- Поддерживает четыре основные арифметические операции.
- Проверяет деление на ноль.
- Использует
doubleдля работы с дробными числами. - Завершает выполнение при ошибке.
Расширенная реализация с циклом и повторным использованием
Более удобный вариант позволяет выполнять несколько вычислений подряд без перезапуска программы:
using Система;
class AdvancedCalculator
{
static void Main()
{
Console.WriteLine("=== Расширенный калькулятор ===");
Console.WriteLine("Поддерживаемые операции: +, -, *, /");
Console.WriteLine("Введите 'exit', чтобы завершить работу.\n");
while (true)
{
Console.Write("Первое число: ");
string input1 = Console.ReadLine();
if (input1?.ToLower() == "exit") break;
if (!double.TryParse(input1, out double num1))
{
Console.WriteLine("Некорректное число. Попробуйте снова.\n");
continue;
}
Console.Write("Операция (+, -, *, /): ");
string op = Console.ReadLine();
if (op?.ToLower() == "exit") break;
Console.Write("Второе число: ");
string input2 = Console.ReadLine();
if (input2?.ToLower() == "exit") break;
if (!double.TryParse(input2, out double num2))
{
Console.WriteLine("Некорректное число. Попробуйте снова.\n");
continue;
}
double? result = PerformCalculation(num1, op, num2);
if (result.HasValue)
{
Console.WriteLine($"Результат: {num1} {op} {num2} = {result.Value}\n");
}
else
{
Console.WriteLine("Ошибка: неверная операция или деление на ноль.\n");
}
}
Console.WriteLine("Работа калькулятора завершена.");
}
static double? PerformCalculation(double a, string operation, double b)
{
return operation switch
{
"+" => a + b,
"-" => a - b,
"*" => a * b,
"/" when b != 0 => a / b,
_ => null
};
}
}
Особенности этой реализации:
- Использует
double.TryParseдля безопасного преобразования строк в числа. - Позволяет выйти из программы, введя
exitна любом этапе. - Выделяет логику вычислений в отдельный метод
PerformCalculation. - Применяет pattern matching через
switchвыражение (C# 8+). - Возвращает
null, если операция недопустима или произошло деление на ноль.
Объектно-ориентированная версия
Для демонстрации принципов ООП можно инкапсулировать функциональность калькулятора в класс:
using Система;
public class Calculator
{
public double Add(double a, double b) => a + b;
public double Subtract(double a, double b) => a - b;
public double Multiply(double a, double b) => a * b;
public double Divide(double a, double b)
{
if (b == 0) throw new DivideByZeroException("Деление на ноль невозможно.");
return a / b;
}
public double? Calculate(double a, string operation, double b)
{
return operation switch
{
"+" => Add(a, b),
"-" => Subtract(a, b),
"*" => Multiply(a, b),
"/" => Divide(a, b),
_ => null
};
}
}
class Program
{
static void Main()
{
var calc = new Calculator();
Console.WriteLine("=== ООП-калькулятор ===");
while (true)
{
try
{
Console.Write("Число 1 (или 'q' для выхода): ");
string s1 = Console.ReadLine();
if (s1 == "q") break;
double x = double.Parse(s1);
Console.Write("Операция (+, -, *, /): ");
string op = Console.ReadLine();
Console.Write("Число 2: ");
double y = double.Parse(Console.ReadLine());
double? res = calc.Calculate(x, op, y);
if (res.HasValue)
Console.WriteLine($"= {res.Value}");
else
Console.WriteLine("Неизвестная операция.");
}
catch (DivideByZeroException ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
catch (FormatException)
{
Console.WriteLine("Ошибка: введите корректное число.");
}
catch (Exception ex)
{
Console.WriteLine($"Неожиданная ошибка: {ex.Message}");
}
Console.WriteLine();
}
}
}
Преимущества ООП-подхода:
- Чёткое разделение ответственности.
- Возможность расширения (например, добавление новых операций как методов).
- Лёгкость тестирования отдельных методов.
- Обработка исключений на уровне вызова.
Возможные улучшения
- Поддержка скобок и приоритетов операций — реализация парсера выражений (например, через алгоритм Дейкстры или рекурсивный спуск).
- История вычислений — сохранение последних N операций в списке.
- Графический интерфейс — создание оконного приложения с помощью Windows Forms, WPF или MAUI.
- Локализация — поддержка разных языков и форматов чисел.
- Настройка точности — ограничение количества знаков после запятой.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Проблема — Пользователи должны иметь возможность регистрироваться, входить в систему и получать доступ к персонализированному контенту или функционалу. Простой консольный чат на C — это учебное приложение, демонстрирующее базовые принципы сетевого взаимодействия между клиентом и сервером с использованием сокетов. Перед началом работы обязательно изучите главу Turtle . Scratch — визуальная образовательная среда программирования, разработанная MIT Media Lab. Особенности реализации — set -euo pipefail — обязательная практика для production-скриптов; - shift $((OPTIND - 1)) корректно обрабатывает как script.sh -c ., так и script.sh . -c; - -C и… echo off rem — Отключает вывод каждой команды (как set -x в bash) rem — в начале первой строки подавляет вывод её самой Примечание — использует XML-документацию, встроенную в модули. В PowerShell 7+ справка по умолчанию загружается из интернета, если локальные файлы отсутствуют. Примечание — для большинства случаев достаточно , но оно не поддерживает функции и некоторые нестандартные объекты (например, до ES2024 — поддержка есть, но не во всех средах выполнения, например,… ✅ Такой подход даёт полную типобезопасность без и без / . Подходит для лёгких сценариев или когда внешние зависимости нежелательны. ✅ Работает, если связь или гарантируется единственность. ⚠️ Для продакшена рекомендуются Jackson ( ) или Gson (более производительные и типобезопасные). удобен для прототипирования. Генератор случайных паролей — это утилита, создающая строки с заданными криптографическими свойствами — длина, наличие заглавных и строчных букв, цифр, специальных символов.Готовые решения
Простой консольный чат на CSharp
Примеры фигур Turtle на Python
Примеры скриптов Scratch
Примеры скриптов в Linux
Примеры команд в cmd
Примеры команд в PowerShell
Примеры решений в JavaScript
Примеры решений в TypeScript
Примеры запросов в SQL
Примеры решений в Java
Генератор случайных паролей на CSharp