В данном уроке опять создадим простенький калькулятор на языке C#, но в этот раз будем работать в консоли.
Калькуляторы на Windows Forms можно посмотреть здесь и здесь.
Данный калькулятор абсолютно элементарен и требует минимальных знаний языка. Создаём проект («Файл» ->»Создать»->»Проект»->»Консольное приложение») и объявляем наши переменные:
| 1 2 3 4 |   double a;   double b;   double total;   char oper; | 
Double — это тип переменной с плавающей запятой, иными словами, тип, в который можно записать десятичные числа, причём довольно большие. В него поместится как значение 5, так и значение 5,45, и даже значение 5,4571601695, также в нём можно использовать и отрицательные числа.
В переменную a мы внесём первое число, которое запишет пользователь. В переменную b — второе число. А переменная total будет выводить результат математических операций с переменными а и b.
Char — это тип переменной в виде какого-либо символа, будь то буква, цифра или какой-нибудь знак. В переменную oper мы будем заносить знак математической операции над числами. В нашем калькуляторе будут только самые основные — «+», «-«, «*» и «/».
Итак, мы объявили переменные, теперь нам надо узнать, что конкретно нужно посчитать пользователю, а для этого придётся считывать данные, которые он будет вводить:
| 1 2 3 4 5 6 7 8 |  Console.WriteLine("Введите первое число:");  a = Convert.ToDouble(Console.ReadLine());  Console.WriteLine("Введите оператор:");  oper = Convert.ToChar(Console.ReadLine());  Console.WriteLine("Введите второе число:");  b = Convert.ToDouble(Console.ReadLine()); | 
Сначала мы выводим на консоль надпись о том, чтобы пользователь ввёл первое число.
В следующей строке мы присваиваем переменной a введенное пользователем число, но при этом не забываем, что введенные пользователем данные всегда имеют строковой формат string, а так как у нашей переменной тип double, то надо отконвертировать string в double соответствующим методом Convert.
Примерно то же самое мы проделываем с переменной oper, но конвертируем string уже не в double, а в char, потому что переменная oper имеет такой тип данных.
Точно то же самое, что было с переменной a проделываем и с переменной b, так как они одинакового типа.
Числа получены. Но пока неизвестно, как ими оперировать, так как главное для нас — узнать что за знак скрывается в переменной oper, и уже исходя из этого, производить операции над числами:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | if (oper == '+')                 {                     total = a + b;                     Console.WriteLine("Cумма " + a + " и " + b + " равна " + total + ".");                 }                 else if (oper == '-')                 {                     total = a - b;                     Console.WriteLine("Разность " + a + " и " + b + " равна " + total + ".");                 }                 else if (oper == '*')                 {                     total = a * b;                     Console.WriteLine("Умножение " + a + " на " + b + " равно " + total + ".");                 }                 else if (oper == '/')                 {                     total = a / b;                     Console.WriteLine("Деление " + a + " на " + b + " равно " + total + ".");                 }                 else                 {                     Console.WriteLine("Неизвестный оператор.");                 } | 
Для этого мы используем оператор условия if (если).
Первая строка звучит примерно так: если в переменной oper записан знак «+», то..
..мы присваиваем переменной total сумму переменных a и b и выводим ответ на экран. В кавычках записаны слова, которые выводятся на экран, а переменные, расположившиеся среди плюсов выводят свои значения. Пример такого ответа выглядит вот так:
По подобию первого условия мы создаём остальные, используя операторы else if (так положено семантически, если для алгоритма необходимы какие-либо условия. Если условия не необходимы, то можно использовать оператор else, как написано ниже).
Мы расписали все необходимые нам операторы. Но что, если пользователь введёт какой-нибудь неверный оператор? Тогда нам следует предупредить его, что такого оператора нет. Для этого мы используем else. Логика такая — если у нас в oper имеется знак плюса — мы складываем, если же минус -вычитаем, знак умножения- умножаем, знак деления — делим, если в oper имеется любой другой знак (всё остальное), то нам уже не нужно какое-то определение условия (как, например, oper==’+’), поэтому можно обойтись простым else.
Наша программа уже работает, но, пожалуй, можно добавить ещё одну несложную деталь.
А что, если пользователь захочет выполнить несколько операций? Например, сначала сложить два числа, а затем умножить два других числа? Для этого ему пришлось бы перезапускать программу. Но можно сделать и иначе:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |             char again = 'д';             while(again=='д')             {                 double a;                 double b;                 double total;                 char oper;                 Console.WriteLine("Введите первое число:");                 a = Convert.ToDouble(Console.ReadLine());                 Console.WriteLine("Введите оператор:");                 oper = Convert.ToChar(Console.ReadLine());                 Console.WriteLine("Введите второе число:");                 b = Convert.ToDouble(Console.ReadLine());                 if (oper == '+')                 {                     total = a + b;                     Console.WriteLine("Cумма " + a + " и " + b + " равна " + total + ".");                 }                 else if (oper == '-')                 {                     total = a - b;                     Console.WriteLine("Разность " + a + " и " + b + " равна " + total + ".");                 }                 else if (oper == '*')                 {                     total = a * b;                     Console.WriteLine("Умножение " + a + " на " + b + " равно " + total + ".");                 }                 else if (oper == '/')                 {                     total = a / b;                     Console.WriteLine("Деление " + a + " на " + b + " равно " + total + ".");                 }                 else                 {                     Console.WriteLine("Неизвестный оператор.");                 }                 Console.WriteLine("Вы хотите продолжить работу с калькулятором? (д/н)");                 again = Convert.ToChar(Console.ReadLine());             } | 
Это код всей нашей программы, но мы в неё кое-что добавили. А именно, переменную again типа char и цикл while. Итак, по замыслу, мы добавили после вывода посчитанных данных ещё один вопрос для пользователя, хотел бы он продолжить работу с калькулятором? Для выбора ответа ему предоставляются два знака д — да и н — нет. Если пользователь напишет в консоли «н», то программа закроется, т.к. у нас в коде нет ничего, что было бы связано с переменной again, имеющей значение «н». Но если пользователь выберет «д», то программа начнёт работу заново благодаря циклу while и будет работать до тех пор, пока пользователь не присвоит переменной again значение «н».
Данную программу можно улучшать дальше и дальше, но данный урок закончится на этом. Скачать исходный код программы «Калькулятор C#» можно по ссылке ниже. Спасибо за прочтение!
Поделиться в соц. сетях:

а как обезопасить себя от того, что пользователь введет вместо числа какую-то ерунду?
Используйте вот такой код:
double a;
double b;
double total;
char oper;
try
{
Console.WriteLine(«Введите первое число:»);
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(«Введите оператор:»);
oper = Convert.ToChar(Console.ReadLine());
Console.WriteLine(«Введите второе число:»);
b = Convert.ToDouble(Console.ReadLine());
}
catch (System.FormatException)
{
// тут вывести в консоль ошибку.
}