Калькулятор (все работает просто хотел узнать можно было как то попроще?) - 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д