.NET 4.x Консольный калькулятор - C#
Формулировка задачи:
Всем привет! Знаю эта тема уже застарела но все таки... Я в С# новичёк, и вот решил написать свою первую программку, а именно консольный калькулятор. Вот что я сделал, но далее столкнулся с проблемой:
мой калькулятор делает только одно действие - например 2+3 или 4.5- 6.7 или 3/4 и т. д. можете попробовать, он полностью рабочий.
Но как далее сделать чтобы он считал вот такое например: 2+3*(45-6)/5-1, вот что-то в таком роде.
Подскажите пожалуйста кто чем сможет, дайте какие-то идеи как это можно сделать или может есть примеры, искал в интернете, но не нашел ничего подходящего.
Заранее всем благодарен!!!
Первый файл:
Второй файл:
using System; using System.Linq; namespace Calculator { public static class Calculator { public static void Do(string str, double a = 0, double b = 0) { try { char[] actions = new[] { '+', '-', '/', '*' }; char z = str.First(c => actions.Any(r => r == c)); try { switch (z) { case '+': Console.WriteLine(a + " + " + b + " = " + "{0}", a + b); break; case '-': Console.WriteLine(a + " - " + b + " = " + "{0}", a - b); break; case '*': Console.WriteLine(a + " * " + b + " = " + "{0}", a * b); break; case '/': if (b != 0) { Console.WriteLine(a + " / " + b + " = " + "{0}", a / b); } else { Console.WriteLine("Делить на ноль нельзя!"); } break; default: Console.WriteLine("Введите верный знак"); break; } } catch (DivideByZeroException) { Console.WriteLine("Делить на ноль нельзя"); } } catch (Exception e) { Console.WriteLine("Operation does not support.{0}{1}", Environment.NewLine, e.Message); } } } }
using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Threading; namespace Calculator { class Program { static void Main(string[] args) { Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("uk-UA"); double a; double b; Console.WriteLine("Укажите дейсвия которое вы хотите сделать и нажмите Enter"); string str = Console.ReadLine(); if (str != null) { str = str.Replace(".", ","); string[] variables = str.Split('+', '-', '/', '*'); try { a = double.Parse(variables[0], NumberStyles.AllowDecimalPoint); b = double.Parse(variables[1], NumberStyles.AllowDecimalPoint); Calculator.Do(str, a, b); } catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message); } catch (FormatException ex) { Console.WriteLine(ex.Message); } } Console.ReadKey(); } } }
Решение задачи: «.NET 4.x Консольный калькулятор»
textual
Листинг программы
using System; using System.CodeDom.Compiler; using System.Linq; using System.Reflection; using Microsoft.CSharp; namespace ConsoleApplication108 { class MathEvaluator { private const string ClassBody = "using System; public static class LambdaCreator {{ public static Func<double> Create() {{ return ()=>({0}); }} }} "; public static double Calculate(string input) { var sources = string.Format(ClassBody, input); var provider = new CSharpCodeProvider(); var parameters = new CompilerParameters { GenerateInMemory = true }; parameters.ReferencedAssemblies.Add("System.dll"); CompilerResults results = provider.CompileAssemblyFromSource(parameters, sources); if (results.Errors.Count > 0) { string errors = string.Join(Environment.NewLine, results.Errors.Cast<CompilerError>().Select(x => x.ErrorText)); throw new ArgumentException(errors, "input"); } var cls = results.CompiledAssembly.GetType("LambdaCreator"); var method = cls.GetMethod("Create", BindingFlags.Static | BindingFlags.Public); return (double) ((Delegate) method.Invoke(null, null)).DynamicInvoke(null); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д