Где и для чего применяют C#

Узнай цену своей работы

Формулировка задачи:

Можете ли вы мне рассказать зачем писать на C#? Что на нём пишут? Какая цель у языка? Где его применяют, для чего? Вообщем можете рассказать не сколько о самом языке, сколько о среде, где его используют и для чего?

Решение задачи: «Где и для чего применяют C#»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
 
namespace MyMath
{
    public static class CalculateExpression
    {
        private static readonly Dictionary<string, byte> _opdict = new Dictionary<string, byte>
            {{"(", 0}, {"+", 1}, {"-", 2},{"/", 3}, {"*", 4}};
 
        private static readonly HashSet<string> _operators = new HashSet<string> { "+", "-", "/", "*" };
 
        private static string _input;
 
        private static double CalculateSimple(double a, double b, char op)
            //Выполняем нужное вычисление в зависимости от операции
        {
            switch (op)
            {
                case '+':
                    return a + b;
                case '-':
                    return a - b;
                case '*':
                    return a*b;
                case '/':
                    return a/b;
            }
            return 0;
        }
 
        private static double StackCalc(double a, double b, char op)
            //Так как из стека достаем в обратном порядке, требуется инвертировать левый и правый операнды
        {
            return CalculateSimple(b, a, op);
        }
 
        private static bool BadBreckets(string s) //Проверяем баланс скобок в строке
        {
            int i = 0;
            foreach (char c in s)
            {
                if (c == '(')
                    i++;
                else if (c == ')')
                    i--;
            }
            return i != 0;
        }
 
        private static string Reverse(string s) //Обращаем строку в обратный порядок
        {
            int length = s.Length;
            var sb = new StringBuilder(length, length);
            for (int i = length - 1; i >= 0; i--)
                sb.Append(s[i]);
            return sb.ToString();
        }
 
        public static string ToRPN() //Для более удобного анализа переводим в ОПН
        {
            var result = new StringBuilder(_input.Length);
            bool negative = false;
            var stack = new Stack<char>();
            foreach (char c in _input)
            {
                if (c == ' ') continue;
                if (c == '(')
                    stack.Push(c);
                else if (c == ')')
                    //Если встречаем закрывающую скобку, то вытряхиваем в строку все, до появления открывабщей скобки
                {
                    while (stack.Count > 0)
                    {
                        char a = stack.Pop();
                        if (a == '(') break;
                        result.Append(" " + a);
                    }
                }
                else if (_operators.Contains(c.ToString()))
                    //Иначе если это оператор, вытряхиваем все операторы с большим приоритетом в строку, после этого засовываемся сами в стек
                {
                    string op = c.ToString();
                    if (c == '-')
                    {
                        negative = true;
                        result.Append("0 "); //Используем математический подход a - b = a + (0 - b)
                        op = "+";
                    }
                    else
                        negative = false;
                    result.Append(" ");
                    while (stack.Count > 0 && _opdict[op] < _opdict[stack.Peek().ToString()])
                    {
                        result.Append(stack.Pop() + " ");
                    }
                    stack.Push(op[0]);
                }
                else
                {
                    if (negative)
                    {
                        result.Append('-');
                        negative = false;
                    }
                    result.Append(c);
                } //Если это не скобки и не операторы, то это цифра, добавляем к выходной строке, с учетом знака
            }
            while (stack.Count > 0) //Вытряхиваем в строку оставшиеся символы
                result.Append(" " + stack.Pop());
            return result.ToString();
        }
 
        public static string ToPN()
        {
            return Reverse(ToRPN());
        }
 
        public static double? Calculate(string input)
            //Вычисляем выражение. Если формат ввода неправильный, возвращаем null
        {
            if (BadBreckets(input) || String.IsNullOrEmpty(input))
                return null;
            _input = input;
            string[] strings = ToRPN().Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
            var stack = new Stack<double>(input.Length/2);
            foreach (string s in strings)
            {
                if (_opdict.ContainsKey(s)) //Если оператор, то выполняем его над последними двумя элементами стека.
                {
                    if (stack.Count < 2)
                        if (s == "+" || s == "-")
                        {
                            stack.Push(StackCalc(stack.Pop(), 0, s[0]));
                            continue;
                        }
                        else return null;
                    stack.Push(StackCalc(stack.Pop(), stack.Pop(), s[0]));
                }
                else //Иначе это должно быть число, если вдруг что-то другое, то возвращаем null
                {
                    double a;
                    if (!double.TryParse(s, out a)) return null;
                    stack.Push(a);
                }
            }
            return Math.Round(stack.Peek(), 15);
            //В стеке остается единственный элемент, значение выражения, который возвращаем
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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