Калькулятор (все работает просто хотел узнать можно было как то попроще?) - C#
Формулировка задачи:
Было задание сделать калькулятор , при воде 'q' выход из программы
два варианта получилось
мои вопросы
1 какой вариант получше и читабельный ?
2 и правильно ли я падашол к решению данной задачи ? (не намудрил ли я ?)
using System; public class Animal0 { public static void Main() { Calkulater cal = new Calkulater(); Calkulater2 cal2 = new Calkulater2(); cal.show(); cal.input(); cal2.show(); cal2.input(); Console.ReadLine(); } } class Calkulater { bool flag; long a, b; public void input() { for (;;) { Console.Write("Ввидите первое число "); string first = Console.ReadLine(); if (first != "q")// проверка на выход { for (byte i = 0; i < first.Length; i++) if (!char.IsDigit(first[i]))// проверка на 10ное число { flag = true; break; } else { a = Convert.ToInt64(first); flag = false; } if (flag)// проверка на ошибку { ErrorNumber(); continue; } for (;;) { if (flag) // проверка после вода оператора break; Console.Write("Ввидите второе число "); string second = Console.ReadLine(); if (second != "q")// проверка на выход { for (byte i = 0; i < second.Length; i++)// проверка на 10ное число if (!char.IsDigit(second[i])) { flag = true; break; } else { b = Convert.ToInt64(second); flag = false; } if (flag)// проверка на ошибку { ErrorNumber(); continue; } for (;;) { Console.Write("Ввидите операто "); string _operator = Console.ReadLine(); if (_operator != "q")// проверка на выход { switch (_operator) { case "*": Console.WriteLine("{0} * {1} = {2}", first, second, (a * b));flag= true; break; case "/": Console.WriteLine("{0} / {1} = {2} ", first, second, (a / b));flag = true; break; case "+": Console.WriteLine("{0} + {1} = {2} ", first, second, (a + b));flag = true; break; case "-": Console.WriteLine("{0} - {1} = {2} ", first, second, (a - b));flag = true; break; case "^": Console.WriteLine("{0} ^ {1} = {2} ", first, second, Math.Exp(a*Math.Log(b)));flag = true; break; default: show(); continue; } } else return; if (flag) break; } } else return; } } else break; } } void ErrorNumber() { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Можно водит только десятичные числа"); Console.ForegroundColor = ConsoleColor.Gray; } public void show()// подсказка команд { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Команды калькулятора \n" + "'+'-сложение чисел \n" + "'-'-вычитание чисел \n" + "'*'-умножение чисел \n" + "'/'-деление чисел \n" + "'^'-возвидение первого числа в степен второго чисел \n" + "'q'-выход их программы \n"); Console.ForegroundColor = ConsoleColor.Gray; } } class Calkulater2 { bool flag; long[] number=new long[2]; string numberInput; public void show()// подсказка команд { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Команды калькулятора \n" + "'+'-сложение чисел \n" + "'-'-вычитание чисел \n" + "'*'-умножение чисел \n" + "'/'-деление чисел \n" + "'^'-возвидение первого числа в степен второго чисел \n" + "'q'-выход их программы \n"); Console.ForegroundColor = ConsoleColor.Gray; } public void input()// { for (sbyte i=0;i<number.Length;i++) { Console.Write("Ввидите {0} ое число ",i+1); numberInput = Console.ReadLine(); if (exit(numberInput))//проверка на выход break; if (NumberTrue(numberInput)) // проверка на дурака(10чное число ) number[i] = long.Parse(numberInput); else { ErrorNumber();// подсказка об ошибке i--; } if (i == 1)//вызываем оператор для чисел if (_operator(numberInput, number)) i = -1; } } bool _operator(string numberInput, long[] number)//оператор { for (;;) { Console.Write("Ввидите операто "); string _operator = Console.ReadLine(); switch (_operator) { case "*": Console.WriteLine("{0} * {1} = {2}", number[0], number[1], (number[0] * number[1])); flag = true; break; case "/": Console.WriteLine("{0} / {1} = {2} ", number[0], number[1], (number[0] / number[1])); flag = true; break; case "+": Console.WriteLine("{0} + {1} = {2} ", number[0], number[1], (number[0] + number[1])); flag = true; break; case "-": Console.WriteLine("{0} - {1} = {2} ", number[0], number[1], (number[0] - number[1])); flag = true; break; case "^": Console.WriteLine("{0} ^ {1} = {2} ", number[0], number[1], Math.Exp(number[0] * Math.Log(number[1]))); flag = true; break; case "q": flag = false; break; default: show(); break; } if (flag) return flag; else return flag; } } bool exit(string input)//выйти ? { if (input == "q") return true; return false; } bool NumberTrue(string input)// проверка на 10ное число { byte _true = 0; for (byte i = 0; i < input.Length; i++) { if (char.IsDigit(input[i])); else _true++; } if(_true==0) return true; return false; } void ErrorNumber()//подсказка об ошибке { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Можно водит только десятичные числа"); Console.ForegroundColor = ConsoleColor.Gray; } }
Решение задачи: «Калькулятор (все работает просто хотел узнать можно было как то попроще?)»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp4 { class Program { static void Main(string[] args) { var calc = new Calc(); calc.FAQ(); calc.Run(); } } public class Calc { Dictionary<string, Func<float, float, float>> operations; public Calc() { operations = new Dictionary<string, Func<float, float, float>>() { ["+"] = (x, y) => { return x + y; }, ["-"] = (x, y) => { return x - y; }, ["*"] = (x, y) => { return x * y; }, ["/"] = (x, y) => { return x / y; }, ["^"] = (x, y) => { return (float)Math.Pow(x, y); }, }; } public float ParseNumber(string source) { if (source == "q") Environment.Exit(0); float num; if (!float.TryParse(source, out num)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Можно вводить только десятичные числа"); Console.ForegroundColor = ConsoleColor.Gray; return float.NaN; } return num; } public void Run() { while (true) { Console.Write("Введите первое число:"); var num1 = ParseNumber(Console.ReadLine()); if (num1.Equals(float.NaN)) continue; Console.Write("Введите второе число:"); var num2 = ParseNumber(Console.ReadLine()); if (num2.Equals(float.NaN)) continue; Console.WriteLine("Введите оператор:"); var oper = Console.ReadLine(); if (!operations.Keys.Contains(oper)) { Console.WriteLine("Hедопустимый оператор"); continue; } Console.WriteLine("{0} {1} {2} = {3}\n", num1, oper, num2, operations[oper](num1, num2)); } } public void FAQ() { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Команды калькулятора \n" + "'+'-сложение чисел \n" + "'-'-вычитание чисел \n" + "'*'-умножение чисел \n" + "'/'-деление чисел \n" + "'^'-возведение первого числа в степень второго числа \n" + "'q'-выход из программы \n"); Console.ForegroundColor = ConsoleColor.Gray; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д