Простой консольный калькулятор
Задание такое:
Реализовать усовершенствованный консольный арифметический калькулятор. С консоля ввести всё выражение, например, 15+63, результат вывести на консоль. При выборе операции использовать оператор switch. Выполнить разбор выражения, проверку допустимости входных данных. Обработку ошибок выполнить з использованием блока try. catch. Завершение работы программы сделать за запросом «Для заверешения работы введите exit» через цикл do. while .
На форуме уже нашёл похожий калькулятор. Вот ссылка, автор его Delog. Но он слишком сложный, мне попроще нада + использовать оператор switch, а также там нету блока try. catch, нужен подсчёт только простых выражений, а там ещё реализовано со скобками.
В интеренете нашёл ещё один пример, но он также неподходит по некоторым причинам.
Помогите пожалуйста с реализацей задачки.
Консольный калькулятор
калькулятор консольный на C# когда вводится выражение к примеру 5-4*(4-3) оно будет типа string.
Консольный калькулятор
В общем, мне надо написать программу "Консольный калькулятор на с#". А я даже не понимаю толком.
Консольный калькулятор
Всем привет! Знаю эта тема уже застарела но все таки. Я в С# новичёк, и вот решил написать свою.
Усовершенствованный консольный арифметический калькулятор
Люди помогите Пж. Реализовать усовершенствованный консольный арифметический калькулятор. С консоли.
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 48 49 50 51 52 53 54 55 56 57
using System; class Program { static void Main() { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Консольный калькулятор (версия 1.0)"); Console.WriteLine(' '); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(@"Выберите арифметическое действие: - Умножение (введите 1) - Деление (введите 2) - Сложение (введите 3) - Вычитание (введите 4) - Возведение числа в степень (введите 5)"); Console.ForegroundColor = ConsoleColor.Red; string q = Console.ReadLine(); double a, b; Console.WriteLine(' '); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Введите первое значение"); Console.ForegroundColor = ConsoleColor.Red; a = double.Parse(Console.ReadLine()); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Введите второе значение"); Console.ForegroundColor = ConsoleColor.Red; b = double.Parse(Console.ReadLine()); Console.WriteLine(' '); if (q == "1") { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Результат умножения = ", a * b); } if (q == "2") { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Результат деления = ", a / b); } if (q == "3") { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Результат сложения = ", a + b); } if (q == "4") { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Результат вычитания = ", a - b); } if (q == "5") { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Результат возведения числа в степень = ", Math.Pow(a, b)); } Console.ReadKey(); } }
2 _lunar_. Спасибо Вам за пример, но это немного не то. Мне нужно сразу вводить полное выражение. и чтобы консоль выдавал результат.
Я делал не используя стек и польскую запись).
Нет по рукой редактора,но сейчас так набросаю что нить,что помню:
1 2 3 4 5 6 7 8 9 10 11 12
string a=Console.ReadLine().Replace('.',','); string[] b1=a.Split(new char[] {'+','-','*','/'},StringSplitOptions.RemoveEmptyEntries); string[] b2=a.Split(new char[] {'1','2','3','4','5','6','7','8','9','0'},StringSplitOptions.RemoveEmptyEntries); //я уже не помню как я тут делал,но помучился.. //нам надо заполнить массив arr по порядку string[] arr=new string[a.Length]; for (int i=0,j=1,k=0;ia.Length;i+=2;j+=2) { arr[k]=b1[i]; arr[k+1]=b2[j]; k++; }
потом уже пробегаемся по массиву,ищем приоритетные знаки,вычисляем и т.д.Дома буду,скину свой исходник если надо.
Вот самый простой пример.Я уже 10 раз всё переделал,но это можете взять за основу.
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main() { string str = Console.ReadLine().Replace('.',','); string[] a = str.Split(new char[] { '-', '+', '*', '/' }, StringSplitOptions.RemoveEmptyEntries); string[] b = str.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',','.' }, StringSplitOptions.RemoveEmptyEntries); //конечный массив,в котором будет разбитая строчка string[] c = new string[a.Length + b.Length]; //заполнение конечного массива c[] по порядку int d = 0; for (int i = 0, j = 1, k = 0; i c.Length; i += 2, j += 2, k++) { c[i] = a[k]; if (d b.Length) c[j] = b[k]; d++; } //вычисляет выражение без скобок.Выражение должно состоять из операторов "*,/",другие не учитываются int count = 0; for (int i = 1; i c.Length - 1; i++) { if (c[i] == "*") { c[i - 1] = Convert.ToString(Convert.ToDouble(c[i - 1]) * Convert.ToDouble(c[i + 1])); c[i] = null; c[i + 1] = null; count += 2; } if (c[i] == "/") { c[i - 1] = Convert.ToString(Convert.ToDouble(c[i - 1]) / Convert.ToDouble(c[i + 1])); c[i] = null; c[i + 1] = null; count += 2; } } //создаём массив без символов равным null string[] n = new string[c.Length - count]; //заполняем массив символами for (int i = 0, j = 0; i c.Length; i++) { if (c[i] != null) { n[j] = c[i]; j++; } } //Вычисляет простое выражение(при вхоящих знаках "+,-") из входящего массива строк (строка(массив строк) //к примеру "1+2+3-1,5") for (int i = 1; i n.Length - 1; i++) { if (n[i] == "+") { n[i + 1] = Convert.ToString(Convert.ToDouble(n[i - 1]) + Convert.ToDouble(n[i + 1])); n[i - 1] = null; n[i] = null; } if (n[i] == "-") { n[i + 1] = Convert.ToString(Convert.ToDouble(n[i - 1]) - Convert.ToDouble(n[i + 1])); n[i - 1] = null; n[i] = null; } } Console.WriteLine("\nResult " + n[n.Length - 1]); Console.ReadLine(); } } }
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace kalc for_cyberforum { class Program { static void Main(string[] args) { bool quit = false; bool flag = false; float first = 0; float second = 0; char operation = '\0'; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(); Console.WriteLine(" + : сложение чисел"); Console.WriteLine(" - : вычетание чисел"); Console.WriteLine(" * : умножение чисел"); Console.WriteLine(" / : деление чисел"); Console.WriteLine(" q : ВЫХОД из программы "); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Green; do { try { Console.Write("Введите первое число: "); first = float.Parse(Console.ReadLine()); Console.Write("Введите второе число: "); second = float.Parse(Console.ReadLine()); Console.Write("Укажите операцию: "); operation = char.Parse(Console.ReadLine()); } catch { flag = true; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\aВНИМАТЕЛЬНО ЧИТАЙТЕ ИНСТРУКЦИЮ. "); Console.ForegroundColor = ConsoleColor.Green; } if(!flag) { switch (operation) { case '+': Console.WriteLine("Сумма чисел составляет: " + (first + second));break; case '-': Console.WriteLine("Разность чисел состовляет: " +(first - second));break; case '*': Console.WriteLine("Произведение чисел составляет: " + (first * second));break; case '/': Console.WriteLine("Отношение чисел составляет: " + (first / second));break; case 'q': quit = true; break; default: { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\aВНИМАТЕЛЬНО ЧИТАЙТЕ ИНСТРУКЦИЮ. "); Console.ForegroundColor = ConsoleColor.Green; } break; } } flag = false; } while(!quit); } } }
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Калькулятор C# в консоли
В данном уроке опять создадим простенький калькулятор на языке C#, но в этот раз будем работать в консоли.
Калькуляторы на Windows Forms можно посмотреть здесь и здесь.
Данный калькулятор абсолютно элементарен и требует минимальных знаний языка. Создаём проект («Файл» ->»Создать»->»Проект»->»Консольное приложение») и объявляем наши переменные:
Double — это тип переменной с плавающей запятой, иными словами, тип, в который можно записать десятичные числа, причём довольно большие. В него поместится как значение 5, так и значение 5,45, и даже значение 5,4571601695, также в нём можно использовать и отрицательные числа.
В переменную a мы внесём первое число, которое запишет пользователь. В переменную b — второе число. А переменная total будет выводить результат математических операций с переменными а и b.
Char — это тип переменной в виде какого-либо символа, будь то буква, цифра или какой-нибудь знак. В переменную oper мы будем заносить знак математической операции над числами. В нашем калькуляторе будут только самые основные — «+», «-«, «*» и «/».
Итак, мы объявили переменные, теперь нам надо узнать, что конкретно нужно посчитать пользователю, а для этого придётся считывать данные, которые он будет вводить:
Сначала мы выводим на консоль надпись о том, чтобы пользователь ввёл первое число.
В следующей строке мы присваиваем переменной a введенное пользователем число, но при этом не забываем, что введенные пользователем данные всегда имеют строковой формат string, а так как у нашей переменной тип double, то надо отконвертировать string в double соответствующим методом Convert.
Примерно то же самое мы проделываем с переменной oper, но конвертируем string уже не в double, а в char, потому что переменная oper имеет такой тип данных.
Точно то же самое, что было с переменной a проделываем и с переменной b, так как они одинакового типа.
Числа получены. Но пока неизвестно, как ими оперировать, так как главное для нас — узнать что за знак скрывается в переменной oper, и уже исходя из этого, производить операции над числами:
Для этого мы используем оператор условия if (если).
Первая строка звучит примерно так: если в переменной oper записан знак «+», то..
..мы присваиваем переменной total сумму переменных a и b и выводим ответ на экран. В кавычках записаны слова, которые выводятся на экран, а переменные, расположившиеся среди плюсов выводят свои значения. Пример такого ответа выглядит вот так:
По подобию первого условия мы создаём остальные, используя операторы else if (так положено семантически, если для алгоритма необходимы какие-либо условия. Если условия не необходимы, то можно использовать оператор else, как написано ниже).
Мы расписали все необходимые нам операторы. Но что, если пользователь введёт какой-нибудь неверный оператор? Тогда нам следует предупредить его, что такого оператора нет. Для этого мы используем else. Логика такая — если у нас в oper имеется знак плюса — мы складываем, если же минус -вычитаем, знак умножения- умножаем, знак деления — делим, если в oper имеется любой другой знак (всё остальное), то нам уже не нужно какое-то определение условия (как, например, oper==’+’), поэтому можно обойтись простым else.
Наша программа уже работает, но, пожалуй, можно добавить ещё одну несложную деталь.
А что, если пользователь захочет выполнить несколько операций? Например, сначала сложить два числа, а затем умножить два других числа? Для этого ему пришлось бы перезапускать программу. Но можно сделать и иначе: