Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 21:28   #1
Promi
Пользователь
 
Регистрация: 02.07.2015
Сообщений: 33
По умолчанию Вычислить значение этой формулы

Решить с использованием класса Stack:
В текстовом файле записана без ошибок формула вида:
<формула>=<цифра>|M(<формула>,<форм ула>)|m(<формула>,<формула>)
<цифра>=0|1|2|3|4|5|6|7|8|9
M обозначает вычисление максимума, m – минимума
Вычислить значение этой формулы
Например M(m(3,5),M(1,2))=3
Promi вне форума Ответить с цитированием
Старый 24.12.2015, 21:00   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

В чем проблема??
Не знаете как стек создать что-ли?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 25.12.2015, 09:59   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Авось пригодится кому то:
Код:
int Calc(formula frm)
        {
            int res = 0;
            switch (frm.type)
            {
                case FuncType.Max:
                case FuncType.Min:
                    {
                        res = frm.type == FuncType.Min ? int.MaxValue : int.MinValue;
                        Stack nStack = (Stack)frm.value;
                        while (nStack.Count > 0)
                        {
                            object val = nStack.Pop();
                            int value = 0;
                            if (val.GetType() == typeof(formula)) value = Calc((formula)val);
                            if (val.GetType() == typeof(int)) value = (int)val;

                            if (frm.type == FuncType.Min)
                                res = value < res ? value : res;
                            else
                                res = value > res ? value : res;
                        }
                        return res;
                    }
                case FuncType.num:
                    {
                        return (int)frm.value;
                    }
                default:
                    {
                        throw new Exception("Unknown func");
                    }
            }
        }

        class formula
        {
            public FuncType type;
            public object value;
        }

formula Parse(string line, ref int position)
        {
            while (position < line.Length)
            {
                if (line[position].ToString().ToUpper() == "M")
                {
                    Stack param = new Stack();
                    formula frm = new formula() { type = line[position] == 'M' ? FuncType.Max : FuncType.Min, value = param };
                    if (line[++position] == '(')
                    {
                        while (line[position++] != ')')
                            param.Push(Parse(line, ref position));
                    }
                    else throw new Exception("Func line error at pos " + position);
                    return frm;
                }
                else
                    if (char.IsDigit(line[position]))
                    {
                        string par = "";
                        while (char.IsDigit(line[position]))
                        {
                            par += line[position++];
                        }
                        formula res = new formula() { type = FuncType.num, value = Convert.ToInt32(par) };
                        return res;
                    }
                    else
                        throw new Exception("Func line error at pos " + position);

            }
            return null;
        }
Код:
string line = "M(m(3,5),M(1,2))";
int pos = 0;
formula frm = Parse(line, ref pos);

int M = Calc(frm); // M = 3
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
значение формулы - ошибка Jaroslav Microsoft Office Excel 6 26.06.2015 11:29
Вычислить значение функции(или функция не определена), значение х вводится с клавиатуры Safok Помощь студентам 2 16.12.2014 08:04
значение формулы в VBA Jaroslav Microsoft Office Excel 2 27.10.2014 16:39
Макрос не распознает значение из формулы. user name Microsoft Office Excel 45 02.06.2013 19:08
Как реализовать подсчет этой формулы? E-Novikov Microsoft Office Excel 14 10.11.2010 23:11