Калькулятор (все работает просто хотел узнать можно было как то попроще?) - 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;
        }
    }
}

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы