powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вычислить выражение?
116 сообщений из 116, показаны все 5 страниц
как вычислить выражение?
    #37883388
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предположим есть такое выражение:
dim v as string = "=({0}+{1})/{2}"
dim _v as string = String.Format(x,1,2,3)

получаем нечто вроде =(1+2)\3

как его вычислить? чтобы на выходе получилось 1?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883392
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло,

мне кажется был такой вопрос, вроде есть библиотека. Ну или как вариант самому парсить :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883412
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

то есть , ты против того, чтобы думать? :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883429
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

я против изобретения велосипеда. А вообще задача-то любопытная)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883431
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Баян.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883457
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

да, институтский баян.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883483
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKМСУ, да, институтский баян.
Причем тут институтские поделки. Есть готовые движки.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883492
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

о да движки это круто.
причем тут движки, когда это можно без движков сделать, каждому студенту подсилу.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883498
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKМСУ,

о да движки это круто.
причем тут движки, когда это можно без движков сделать, каждому студенту подсилу.
Сделаешь? Или просто воздух сотрясаешь?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883505
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ВикипедиИ алгоритм расписан: Обратная польская запись .
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883522
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВ ВикипедиИ алгоритм расписан: Обратная польская запись .
Алгоритму место на свалке. Возведение в степень, корни, прогрессии и иже с ним - в уме считать будем?
Нужен готовый компилятор выражений, всё остальное - пионерия.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883535
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=805419&pg=1&mid=9768534#9768534

Еще помню кто-то приводил вариант на Linq Expressions.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883581
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел. /topic/890988&hl=xpathexpression

Алексей, код будет или как? )
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883676
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAВ ВикипедиИ алгоритм расписан: Обратная польская запись .
Алгоритму место на свалке. Возведение в степень, корни, прогрессии и иже с ним - в уме считать будем?
Нужен готовый компилятор выражений, всё остальное - пионерия.Там есть ссылка на примеры реализации, в том числе и на C#.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883680
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще ТС спрашивает "как вычислить выражение". Это может означать "где найти готовый evaluator", а может и "как написать код, вычисляющий выражение" :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883692
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМСУпропущено...

Алгоритму место на свалке. Возведение в степень, корни, прогрессии и иже с ним - в уме считать будем?
Нужен готовый компилятор выражений, всё остальное - пионерия.Там есть ссылка на примеры реализации, в том числе и на C#.
И че, синусы, косинусы, корни и прочие математические лохмотья этот «пример» осилит? :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883719
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAпропущено...
Там есть ссылка на примеры реализации, в том числе и на C#.
И че, синусы, косинусы, корни и прочие математические лохмотья этот «пример» осилит? :)"Пример" нет. Дописать - тривиальная задача :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883730
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

а может можно "дернуть" калькулятор из вин 7? он все умеет)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883786
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanа может можно "дернуть" калькулятор из вин 7? он все умеет)Дёргайте, какие проблемы :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883791
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДописать - тривиальная задача :)
Слабо дописать? ) А то вон один тоже говорил, что студентам раз плюнуть написать, но после удара по почкам сразу ретировался куда-то
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883817
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот такую еще реализацию можно:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Imports IronPython.Hosting.Python
Imports System.Dynamic
Imports Microsoft.Scripting.Hosting

sub main()
        Dim exrp As String = "(15.6 + 25)*34"
        Dim engine As ScriptEngine = CreateEngine()
        MsgBox(engine.Execute(exrp))
end sub



как видно используется проект IronPhyton...
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883834
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAДописать - тривиальная задача :)
Слабо дописать? ) А то вон один тоже говорил, что студентам раз плюнуть написать, но после удара по почкам сразу ретировался куда-то Уже писал. В институте это была лабораторная работа "калькулятор". На работе периодически допиливаю StringTemplate, изначально он только слишком простые выражения понимает. Так что имею представления не только о польских нотациях, но и о лексерах, парсерах и эвалюаторах.

P.S.: кстати может ТС как раз лабу делает? Тогда в гугл с запросом: "лабораторная работа калькулятор" :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883838
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсловот такую еще реализацию можно...Нет, видимо не лабу :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883844
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ъыжсловот такую еще реализацию можно:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Imports IronPython.Hosting.Python
Imports System.Dynamic
Imports Microsoft.Scripting.Hosting

sub main()
        Dim exrp As String = "(15.6 + 25)*34"
        Dim engine As ScriptEngine = CreateEngine()
        MsgBox(engine.Execute(exrp))
end sub



как видно используется проект IronPhyton...

кроме того таким же нехитрым способом можно реализовать и бизнес логику
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883852
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло,

бизнесс логика для калькулятора?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883877
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKЪыжсло,

бизнесс логика для калькулятора?

это не калькулятор.
в двух словах: существет таблица номенклатуры. для каждого типа номенклатуры (например для рейса авиакомпании ЮТЭйр в Тюмень стоимость перевозки рассчитывается как произведение количества мест на вес). т.е. стоимость будет Стоимость=Вес*Кол-во
НО! рассчет итоговой стоимости может производиться разными алгоритмами:
Например:
Рес на Белоярский 1кг веса приравнивается к 25 таким образом формула расчета будет
Если Вес <=15 -> Вес = 15
Стоимость = Вес * Кол-во * Повыш.Коэф.

Вот тут уже и формула и бизнес логика.
И таких извращенных тарифов может быть уйма. И они постоянно меняются. Не переписывать же программу?
Фишка в том что при вводе новых тарифов Агент склада смог написать формулу которую программа будет использовать для расчета.

как-то так...
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37883908
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло,

и ты выбрал для этого , то что озвучил в первом посте - простой текст?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884008
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAВ ВикипедиИ алгоритм расписан: Обратная польская запись .
Алгоритму место на свалке. Возведение в степень, корни, прогрессии и иже с ним - в уме считать будем?
Нужен готовый компилятор выражений, всё остальное - пионерия.
нормальный, работающий пример, удобный для допиливания.
самому что то подобное потребовалось, взял оное как временную основу. и пилится прекрасно.
а готовый компилятор в JS это дело такое.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884073
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, это всё, конечно, хорошо, но пока еще не вижу кода )
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884087
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЪыжслоИ таких извращенных тарифов может быть уйма. И они постоянно меняются. Не переписывать же программу?
Открой для себя CodeDom. В строке описывается .нет код, который приводится к единому интерфейсу тарифа и получается результат. Можно использовать весь прикладной код любых подключенных сборок.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884096
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, зачем что-то пилить, еще не факт, что получится реализовать все требования. Проще взять готовый компилятор.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884106
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-er, зачем что-то пилить, еще не факт, что получится реализовать все требования. Проще взять готовый компилятор.
наверно в 90% случаях готовый подходит на ура,
но увы , под мою задачу готовый ну никак не катит. чёта мне задачи такие попадаются.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884116
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erМСУbeg-in-er, зачем что-то пилить, еще не факт, что получится реализовать все требования. Проще взять готовый компилятор.
наверно в 90% случаях готовый подходит на ура,
но увы , под мою задачу готовый ну никак не катит. чёта мне задачи такие попадаются.
Зачем нужна подделка, которая не решает 10% задач, если можно взять решение, которое покроет 100% требований, написав всего пару строк безопасного кода?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884372
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

о чем говоришь? какие пара строк?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884381
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ,

о чем говоришь? какие пара строк?
А сколько?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884423
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ты про содедом что ли?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884428
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ,

ты про содедом что ли?
а всё хорошо , и коддом, и готовые решения, и допилка пионэрская.
для каждой найдётся свой место.
коддом имеет свой минус. Он медленный - 0.1 сек. там если и гнать , так целый трактат.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884432
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ если можно взять решение, которое покроет 100% требований, написав всего пару строк безопасного кода?
всегда найдётся задача, для которой не будет 100% покрытия и парой строк не обойтись.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884497
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ, ты про содедом что ли?
Нет, про джаву.

beg-in-erкоддом имеет свой минус. Он медленный - 0.1 сек. там если и гнать , так целый трактат.
Откуда такие феерические замеры, из воспаленного сознания?

beg-in-erМСУ если можно взять решение, которое покроет 100% требований, написав всего пару строк безопасного кода?
всегда найдётся задача, для которой не будет 100% покрытия и парой строк не обойтись.
Рано или поздно встретится элементарное новое требование, которое положить набок твой пионерский код. Лучше писать сразу и хорошо, используя правильные архитектурные подходы.
Мне до сих пор еще никто не привел вменяемое наколеночное решение, оно будет или тут просто бульбы надувают?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884512
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-erкоддом имеет свой минус. Он медленный - 0.1 сек. там если и гнать , так целый трактат.
Откуда такие феерические замеры, из воспаленного сознания?

замеряли. а сколько у вас? сколько занимает компил+лоадлиб?


Рано или поздно встретится элементарное новое требование, которое положить набок твой пионерский код. Лучше писать сразу и хорошо, используя правильные архитектурные подходы.
именно потому что новое требование может всё завалить и применяется правильное архитектурное пионерское решение.
то , в котором можно заменить всё. без усилий. просто воткнув новое условие.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884528
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

когда писал первую прогу (2002) на (бух формы отчетности и анализ по ФСФО) .нет особо не знал нифига содедом и т.д.
а там одни формулы внешние :)
дык я приспособил для этого ДатаТейбл :)
Функция Евал берет формулу стринг, парсит, создает таблицу с солумнами = именам переменных в формуле и доп солумн вычислимый, где ехпрешн = формула
очень изяшно все получилась и довольно быстро пахала :) и счас пользуюсь иногда

потом когда вышли лямюды и систем.дайнамикс перешел на DynamicExpression (но тут надо заранее знать какие объекты использованы в выражении, да и везде надо знать, но с ДатаТейблом был кайф)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884533
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
редактор пользую от девок
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884536
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот тут курсовая 3 курс дочки
тут и Eval тот и дайнамикс вместе :)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  
                        DataRow drr = ds.Tables["Расчетные коэффициенты Сбербанк"].NewRow();
                        drr["Период отчетности"] = r["ИД"];
                        drr["Наименование"] = drk["Наименование"];
                        decimal znach = Eval(drk["Формула"].ToString(), ds, "[Период отчетности] = '" + r["ИД"].ToString() + "'");
                        Expression body = System.Linq.Dynamic.DynamicExpression.Parse(null, drk["1 Категория"].ToString(), symbols);
                        LambdaExpression e = Expression.Lambda(body, new ParameterExpression[] { x });
                        bool k = (bool)e.Compile().DynamicInvoke(znach);
                        if (k) drr["1 Категория"] = znach.ToString();
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884609
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erзамеряли. а сколько у вас? сколько занимает компил+лоадлиб?

У меня нисколько. Замеряли чем, линейкой с кривыми руками? Код в студию.
Во-вторых, один раз загружается код, компилится. Всё остальное - чистое исполнение методов. Так что выкинь свои замеры на свалку.

beg-in-er именно потому что новое требование может всё завалить и применяется правильное архитектурное пионерское решение.
то , в котором можно заменить всё. без усилий. просто воткнув новое условие.
Маленький, рано тебе еще про архитектуру вещать. Два слова связать не можешь

ViPRos, правильно, юзать нужно готовый компилятор. Хорошее решение.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884633
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-erзамеряли. а сколько у вас? сколько занимает компил+лоадлиб?

У меня нисколько.

код в студию. даже пустой проект в VS компилиться какое то время. а у МСУ ничего по времени не занимает. удивительно
авторМаленький, рано тебе еще про архитектуру вещать. Два слова связать не можешь
да мне вообще плевать на понятие "архитектура". это зло с которым надо бороться. Но боюсь МСУ слишком большой , что бы понять такую маленькую и простую истину. Архитектура это кандалы, в которые заворачивает себя разработчик. и потом с этим борется.
ставят всякие костыли да подпорки. всё лишь бы ради целостности "архитектуры".
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884752
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пойдет, не ?
Туту ешо одна функция есть ABS

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
    public class MyCalc
    {
        const int DELIM = 1;
        const int NUMBER = 2;
        
        string prog, token;
        int pr, token_type;

        public MyCalc()
        {
        }

        bool IsDelim(char c)
        {
            bool v = false;
            if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')')
                v = true;
            return v;
        }

        bool IsWhite(char c)
        {
            bool v = false;
            if (c == ' ')
                v = true;
            return v;
        }

        bool IsDigit(char c)
        {
            bool v = false;
            
            v = char.IsDigit(c);
            if (!v)
                if (c == '.' || c == ',')
                    v = true;
            return v;
        }

        int GetToken()
        {
            token_type = 0;
            token = "";
            if (pr >= prog.Length)
            {
                token = "";
                token_type = DELIM;
            }
            else
            {
                while (IsWhite(prog[pr]))
                    pr += 1;
                if (IsDelim(prog[pr]))
                {
                    token = prog[pr].ToString();
                    pr += 1;
                    token_type = DELIM;
                }
                else if (IsDigit(prog[pr]))
                {
                    while(!IsDelim(prog[pr]))
                    {
                        token += prog[pr];
                        pr += 1;
                        if (pr >= prog.Length)
                            break;
                    }
                    token_type = NUMBER;
                }
            }
            return token_type;
        }

        Single ConvertStringToSingle(string s)
        {
            Single v = Single.MaxValue;
            Single tmpF;

            if (float.TryParse(s, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out tmpF))
                v = tmpF;
            else if (float.TryParse(s, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.CurrentCulture, out tmpF))
                v = tmpF;

            return v;
        }

        Single Primitive()
        {
            Single v;
            if (token == "")
                token = "0";
            v = ConvertStringToSingle(token);
            GetToken();
            return v;
        }

        Single Unary(char o, Single r)
        {
            Single v = r;
            if (o == '-')
                v = r * -1;
            return v;
        }

        Single Arith(char op, Single r, Single h)
        {
            Single v = 0;
            switch (op)
            {
                case '-':
                    v = r - h;
                    break;
                case '+':
                    v = r + h;
                    break;
                case '/':
                    v = r / h;
                    break;
                case '*':
                    v = r * h;
                    break;
            }
            return v;
        }

        Single Level6()
        {
            Single v;
            if (token == "(" && token_type == DELIM)
            {
                GetToken();
                v = Level2();
                GetToken();
            }
            else
                v = Primitive();
            return v;
        }

        Single Level5()
        {
            string op = "";
            Single v;
            if (token_type == DELIM && (token == "+" || token == "-"))
            {
                op = token;
                GetToken();
            }
            v = Level6();
            if (op != "")
                v = Unary(op[0], v);
            return v;
        }

        Single Level4()
        {
            return Level5();
        }

        Single Level3()
        {
            Single v, hold;
            char op;
            v = Level4();
            while (true)
            {
                if (token == "")
                    break;
                op = token[0];
                if (!(op == '*' || op == '/'))
                    break;
                GetToken();
                hold = Level4();
                v = Arith(op, v, hold);
            }
            return v;
        }

        Single Level2()
        {
            Single v, hold;
            char op;
            v = Level3();
            while (true)
            {
                if (token == "")
                    break;
                op = token[0];
                if (!(op == '+' || op == '-'))
                    break;
                GetToken();
                hold = Level3();
                v = Arith(op, v, hold);
            }
            return v;
        }

        string GetABS(string s)
        {
            string v = s;
            string n, k = "";
            int i = s.IndexOf("ABS(", StringComparison.CurrentCultureIgnoreCase);
            if (i > -1)
            {
                if (i == 0)
                    n = "";
                else
                    n = s.Substring(0, i);
                string s1 = s.Substring(i + 3);
                int sc = 0;
                i = 0;
                int p = -1;
                while (i < s1.Length)
                {
                    if (s1[i] == '(')
                        sc += 1;
                    else if (s1[i] == ')')
                        sc -= 1;
                    if (sc == 0)
                    {
                        p = i;
                        break;
                    }
                    i += 1;
                }
                if (p > -1)
                {
                    k = s1.Substring(p + 1);
                    string s2 = s1.Substring(1, p - 1);
                    v = Math.Abs(Express(s2)).ToString();
                    k = GetABS(k);
                }
                v = n + v + k;
            }
            return v;
        }

        public Single Express(string s)
        {
            Single v;
            string s1;
            s1 = GetABS(s);
            pr = 0;
            prog = s1;
            GetToken();
            v = Level2();
            return v;
        }
    }
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884754
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
MyCalc cv = new MyCalc();
Single f = cv.Express("(1+2)/3");
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884761
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er...да мне вообще плевать на понятие "архитектура". это зло с которым надо бороться. Но боюсь МСУ слишком большой , что бы понять такую маленькую и простую истину. Архитектура это кандалы, в которые заворачивает себя разработчик. и потом с этим борется. ставят всякие костыли да подпорки. всё лишь бы ради целостности "архитектуры".
Я х....ею, дорогая редакция! Ну да, процедурный подход, все должно быть видно всем, хаос, анус!
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884774
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxЯ х....ею, дорогая редакция! Ну да, процедурный подход, все должно быть видно всем, хаос, анус!
а вот не надо.не надо уеть.
всё ж не просто так. я не с балды пишу такие "крамольные" вещи. наверное что то я под этим подразумеваю. ща пишу прогу, так , когда делать нечего. так вот в ней >95% методов статических (а в дальнейшем >99%). и архитектурой там не пахнет. куда хочу, туда ворочу. волюшка воля.
так что не надо уеть. а вопрос видимости это вопрос выбора, не более. я пишу под конкретную задачу. и там на это наплевать. и никакого хаоса. только строгий порядок.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884783
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

я у таком стиле программы на 1м курсе писал;) через полгода во-первых тошнило от кода, во-вторых разобраться не мог
P.S. Почему всех так тянет изобретать велосипеды, когда есть готовые и проверенные решения?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884797
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchbeg-in-er,

я у таком стиле программы на 1м курсе писал;) через полгода во-первых тошнило от кода, во-вторых разобраться не мог
P.S. Почему всех так тянет изобретать велосипеды, когда есть готовые и проверенные решения?
никто ничего не изобретает. используется проверенное решение, поддающеяся практически неограниченному безгеморойному расширению. если это по вашему глупость , ну пусть будет так. переубеждать не буду.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884801
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, статических методов там будет много. много больше 1000. и не запутаюсь.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884818
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erда мне вообще плевать на понятие "архитектура". это зло с которым надо бороться. Но боюсь МСУ слишком большой , что бы понять такую маленькую и простую истину. Архитектура это кандалы, в которые заворачивает себя разработчик. и потом с этим борется.
ставят всякие костыли да подпорки. всё лишь бы ради целостности "архитектуры".Неплохо. Я уже встречал подобный взгляд и он мне импонирует. Автор той темы хочет чего-то такого . При этом он не предлагает делать свалку из функций.
Вы могли бы создать отдельную ветку под эту дискуссию.
авторкстати, статических методов там будет много. много больше 1000. и не запутаюсь.Желаю удачи.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37884857
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticВы могли бы создать отдельную ветку под эту дискуссию.
меня сразу забанят как еретика. да и тема будет интересна только 2-3 форумчанам.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37885024
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

Можно создать в Программировании , там не забанят.
beg-in-erменя сразу забанят как еретикаДа... жаль, что у нас анархия и не банят за оффтоп в левых темах.
beg-in-erда и тема будет интересна только 2-3 форумчанам.Угу. А здесь всем интересна ваша архитектура в виде кучи статических функций.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886092
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erМСУпропущено...
У меня нисколько.

код в студию. даже пустой проект в VS компилиться какое то время. а у МСУ ничего по времени не занимает. удивительно
Жжешь, имелось ввиду, что я не замерял

beg-in-erда мне вообще плевать на понятие "архитектура". это зло с которым надо бороться.
Я в этом не сомневался. Пока рано еще тебе принимать участие в серьезных проектах, пока сиди и замеряй скорость различного кода с википедии.

beg-in-erНо боюсь МСУ слишком большой , что бы понять такую маленькую и простую истину. Архитектура это кандалы, в которые заворачивает себя разработчик. и потом с этим борется.
По твоей же безумной аналогии: дом - это кандалы, в которые заворачивает себя строитель и потом с этим борется. Занавес.

beg-in-erставят всякие костыли да подпорки. всё лишь бы ради целостности "архитектуры".
Есть хорошие разработчики, а есть гавно. Делай выводы и стремись к совершенству, что тут сказать.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886130
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er.. да мне вообще плевать на понятие "архитектура". это зло с которым надо бороться.


Сильно сказано :]
Но разработка ПО, помимо того что, имеет "творческую составляющую",
является еще и инженерной дисциплиной, со всеми вытекающими ..
Оно(ПО) работать должно и развиваться как-то, по возможности, после релиза.
и тут без этапа проектирования, похоже, ну совсем никак :]
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886174
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-erпропущено...

код в студию. даже пустой проект в VS компилиться какое то время. а у МСУ ничего по времени не занимает. удивительно
Жжешь, имелось ввиду, что я не замерял

beg-in-erда мне вообще плевать на понятие "архитектура". это зло с которым надо бороться.
Я в этом не сомневался. Пока рано еще тебе принимать участие в серьезных проектах, пока сиди и замеряй скорость различного кода с википедии.

beg-in-erНо боюсь МСУ слишком большой , что бы понять такую маленькую и простую истину. Архитектура это кандалы, в которые заворачивает себя разработчик. и потом с этим борется.
По твоей же безумной аналогии: дом - это кандалы, в которые заворачивает себя строитель и потом с этим борется. Занавес.

beg-in-erставят всякие костыли да подпорки. всё лишь бы ради целостности "архитектуры".
Есть хорошие разработчики, а есть гавно. Делай выводы и стремись к совершенству, что тут сказать.
если предметно сказать нечего, то тогда лучше помолчать.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886175
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselskybeg-in-er.. да мне вообще плевать на понятие "архитектура". это зло с которым надо бороться.


Сильно сказано :]
Но разработка ПО, помимо того что, имеет "творческую составляющую",
является еще и инженерной дисциплиной, со всеми вытекающими ..
Оно(ПО) работать должно и развиваться как-то, по возможности, после релиза.
и тут без этапа проектирования, похоже, ну совсем никак :]
где в программировании творчество? только чистая прагматика. конвеер команд не допускает вольностей. вот задачи , алгоритмы там еще можно творить, а тут...
но если заранее использовать корсет , в частности ООП, то придётся в этом корсете ходить всегда.
И согласитесь , что есть разные подходы по созданию и модернизации Системы. если вы думаете что приозвученная задача расчитана на 1 релиз , то это абсолютно неверно.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886218
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er.. куда хочу, туда ворочу. волюшка воля.
.. и никакого хаоса. только строгий порядок.

Противоречие однако. Надо бы прояснить.

beg-in-erгде в программировании творчество? только чистая прагматика. конвеер команд не допускает вольностей. вот задачи , алгоритмы там еще можно творить, а тут...

Дык программированиe это собственно и есть описание алгоритма решения задачи . Разве нет?

beg-in-erно если заранее использовать корсет , в частности ООП, то придётся в этом корсете ходить всегда.
И согласитесь , что есть разные подходы по созданию и модернизации Системы. если вы думаете что приозвученная задача расчитана на 1 релиз , то это абсолютно неверно.

Про корсет и приозвученную задачу, сафсем не понял, уточните плиз.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886241
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erесли предметно сказать нечего, то тогда лучше помолчать.
Предметно могу - ты обычный начинающий кодер (ламер), не имеющий предоставления о том, как пишется код и разрабатываются системы. У тебя (возможно) всё еще впереди. Через несколько лет ты с позором будешь перечитывать свой бред на форумах и плеваться про сторонам с мыслью о том, какая ты была еще зеленая недоросль. Не обижайся, ты сам попросил «предметно».
Могу дать бесплатный совет - сиди, слушай и вникай о том, что тут дядя пишут. Свои беспонтовые пузыри и бульбы пока задвинь на время, пока рано.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886250
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПредметно могу - ты обычный начинающий кодер (ламер), не имеющий предоставления о том, как пишется код и разрабатываются системы. У тебя (возможно) всё еще впереди. Через несколько лет ты с позором будешь перечитывать свой бред на форумах и плеваться про сторонам с мыслью о том, какая ты была еще зеленая недоросль. Не обижайся, ты сам попросил «предметно».
и какова точность этого высказывания?
кстати меня обидеть или задеть невозможно. уже как лет 5. я всегда знаю что пишу, зачем пишу, кто будет читать и какие могут быть ответы. Твой ответ МСУ в предполагаемых рамкам. ничего другого собсна и не ожидал.
Срачь с СеВой показал МСУ с новой стороны. потому и ответ в рамках ожиданного.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886367
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er... уже как лет 5. я всегда знаю что пишу, зачем пишу, кто будет читать и какие могут быть ответы. ...
Я тоже вот одного знаю, он 8 лет пишет и пик его творчества изрыгнуть в лицо пользователя таблицу из БД через ЛистБокс (ну не взлюбил он ДатаГрид почему то). Все это ООП ос считает нахер не нужной теорией, которой никто не пользуется. При попытках указать ему на его глупости начинает говорить да мне чайки три года на грудь срали! я в банке три года работал, там кого угодно не держат, да мы там ТАКИЕ вещи на SQL делали что тебе и не снилось! Про оператор JOIN узнал года три назад уже от меня, неграмотного. Вот чего-то ты мне его напомнил. :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37886420
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где модераторы, человек спросил конкретный вопрос, а тут...
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37958747
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Молодцы!
Обсудили личные качества каждого. Кто чего достиг и где работал. А ответа на тему так и нет. В споре истина так и не родилась. Как я писал выше (может кто столкнется с такой проблемой которая обозначена в теме ветки) решил вопрос с помощью IronPhyton. Для текущей задачи его оказалось вполне достаточно.

А по поводу дискуссии скажу следующее: мне всегда было фиолетово на архитектуру и "красивость" кода. Я всегда шел по пути наименьшего сопротивления. Для меня всегда было важно что пользователь от щастья серет кирпичами, когда программа одним нажатием кнопки закрывает недельный его труд до этого.

Например при выставлении счета клиентам за месяц на основании того что и когда он отправлял через грузовой терминал аэропорта. Вот. Можно сколь угодно долго спорить насчет личных качеств знаний и умений каждого из пользователей форума, но скажите: если вы узнаете что этот форум написан коряво, или прогерам этого форума пох на архитектуру или наоборот они отцы основатели вы его покинете? Вам важно что когда вы постите что-то - это потом увидят другие. А как этот механизм реализован... думается всеравно.

Это мое личное мнение.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37958849
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу

В студенчестве такое делал (надо было график произвольной функции рисовать)
Поддерживало операции (с учетом приоритета и скобок), обычные функции вроде логарифма или синуса, пользовательские функции, ну и переменные, чтобы график построить. Выражение компилилось в древовидный объект, для быстрого вычисления.
Ещё производную функции могло находить, в аналитическом виде (т.е. создавать новое выражение)

В общем, ничего сложного, если интересно, лучше сделать самому, если нет - найти готовое.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37958868
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЪыжслоА по поводу дискуссии скажу следующее: мне всегда было фиолетово на архитектуру и "красивость" кода.
это вопрос личной гигиены
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37958922
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло,

...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959113
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: c#
1.
2.
3.
4.
5.
	   SqlCeCommand sqlEval = new SqlCeCommand("select (123.0/4+5*sin(0.5)) as Result", con);
                con.Open();
                var result = sqlEval.ExecuteScalar();
                con.Close();
                MessageBox.Show(result.ToString());
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959130
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсломне всегда было фиолетово на архитектуру и "красивость" кода
Мне всегда было фиолетово на архитектуру и "красивость" инженерных сооружений. Я всегда строил дома так, чтобы можно было быстрее сдать их в приёмку - я всегда шел по пути наименьшего сопротивления. Для меня всегда было важно, что жилец дома от щастья серет кирпичами, когда дома просто стоит на земле и всё. Ведь главное, чтоб он просто стоял на земле и всё. Остальное - хрень на постном масле. Можно сколь угодно долго спорить насчет личных качеств знаний и умений каждого из строителей и архитекторов сооружения, но скажите: если вы узнаете что этот ваш дом построен коряво или строителям этого дома пох на архитектуру или наоборот они отцы основатели вы его покинете? Так и живём.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959138
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tsyselsky и Cat2 - отличное и интересное решение. Завтра испытаю на практике.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959141
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУЪыжсломне всегда было фиолетово на архитектуру и "красивость" кода
Мне всегда было фиолетово на архитектуру и "красивость" инженерных сооружений. Я всегда строил дома так, чтобы можно было быстрее сдать их в приёмку - я всегда шел по пути наименьшего сопротивления. Для меня всегда было важно, что жилец дома от щастья серет кирпичами, когда дома просто стоит на земле и всё. Ведь главное, чтоб он просто стоял на земле и всё. Остальное - хрень на постном масле. Можно сколь угодно долго спорить насчет личных качеств знаний и умений каждого из строителей и архитекторов сооружения, но скажите: если вы узнаете что этот ваш дом построен коряво или строителям этого дома пох на архитектуру или наоборот они отцы основатели вы его покинете? Так и живём.

Вы меня не поняли. Любая задача на мой взгляд должна быть решена наименьшими усилиями. Так например если мы пишем утилиту которая складывает 2+2 зачем заморачиваться на архитектуру? Я понял ваш сарказм. Я же не против ставить у дома фундамент если это реально дом а не уличный туалет. Ясен пень если проект огромный - нужна сторойная хорошо продуманная архитектура. Документированные функции и прочее. Ибо потом сам запутаешься и новый функционал будет сложно доделывать. НО! я хотел сказать что цель должна оправдывать средства. Есть случаи когда оправдан подход написания кода "на коленке".
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959142
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло,

не решение , а маразм
есть ж експрешн, воркфлоу и т.д. да хотьь дататейбл колумн ехпрешн
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959169
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъыжсло, в таком ключе, как ты написал, согласен. Цель должна оправдывать средства.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959182
Ъыжсло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ спасибо ) кстате! знаете как я прогу тестирую? Запускаю в дебаге студии и даю жене. Тыкай куда хочешь и пиши (вводи) что хочешь. Задача - сломать! Если сломаешь куплю кольцо золотое. Их ей уже одевать некуда... мда... хреновый их меня программист )))
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959187
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЪыжслоЗапускаю в дебаге студии и даю жене
Изверг
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959210
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

наверное он от нее добивается то че никогда не получал, а она не хочет вот и ломает, ломает,....
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959816
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нравится такое решение... Довольно мощный механизм, когда использовал в VB6

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Imports System

Class Program

    Shared Sub Main()
        Console.WriteLine(Eval("(1+2)/4"))
        Console.ReadLine()
    End Sub

    Shared Function Eval(ByVal Code As String) As Object
        Static objSC As Object

        If objSC Is Nothing Then
            objSC = Activator.CreateInstance(Type.GetTypeFromProgID("MSScriptControl.ScriptControl"))
            objSC.Language = "VBScript"
        End If

        Return objSC.Eval(Code)
    End Function

End Class
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37959904
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADМне нравится такое решение... Довольно мощный механизм, когда использовал в VB6
Очень плохой способ. Во-первых COM, во-вторых тогда уж лучше юзать референс на Microsoft Script Control 1.0, ну и в третьих:
http://msdn.microsoft.com/en-us/library/aa227633(VS.60).aspx Before we go any further, I should warn you that using the ScriptControl is not for everyone. The ScriptControl is one of the least-documented controls available in Visual Basic. Most of the documentation for MSScript and VBScript was developed for people building web applications. You can incorporate the ScriptControl into your own programs, but expect to spend some time getting the feel of this control and its quirks. Also, be sure to save your programs (both Visual Basic and VBScript) often.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37960093
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВо-первых COM
Не проблема. Понятное дело что уже устарело, и не нативно по отношению к .NET. Но на существование имеет право быть.
МСУво-вторых
Согласен. Писал чтобы копи-паст и запустил, без лишних движений.
МСУв третьих
Ну не особо проблема... Для разработчика VB "познавшего" языка со всеми его приколами и фичами )
Согласно задаче автора топика, ему достаточно эвалюатора. В рамках .NET - CodeDom Compiler решение довольно хорошее... если не трогать COM
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37960120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADВ рамках .NET - CodeDom Compiler решение довольно хорошее... если не трогать COM
У CodeDom Compiler есть один минус - он генерит сборку. А хотелось бы чистого решения в памяти, что-то типа Microsoft Script Control, но чтобы не COM. Всякие там DataTable.Compute, XPathExpression.Compile и иже с ними - отличное решение, но сильно ограниченное по функционалу. Для себя давно решил - пока CodeDom.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37960144
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУУ CodeDom Compiler есть один минус - он генерит сборку. А хотелось бы чистого решения в памяти, что-то типа Microsoft Script Control, но чтобы не COM. Всякие там DataTable.Compute, XPathExpression.Compile и иже с ними - отличное решение, но сильно ограниченное по функционалу. Для себя давно решил - пока CodeDom. Dynamic LINQ чем не понравился?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37960264
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУУ CodeDom Compiler есть один минус - он генерит сборку. А хотелось бы чистого решения в памяти, что-то типа Microsoft Script Control, но чтобы не COM. Всякие там DataTable.Compute, XPathExpression.Compile и иже с ними - отличное решение, но сильно ограниченное по функционалу. Для себя давно решил - пока CodeDom. Dynamic LINQ чем не понравился?
Ну а примерчик как всегда слабо? :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37960276
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Dynamic LINQ чем не понравился?
Ну а примерчик как всегда слабо? :)А я не умею. Вот и интересуюсь как оно. :-)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961028
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Код: c#
1.
2.
3.
4.
5.
	   SqlCeCommand sqlEval = new SqlCeCommand("select (123.0/4+5*sin(0.5)) as Result", con);
                con.Open();
                var result = sqlEval.ExecuteScalar();
                con.Close();
                MessageBox.Show(result.ToString());



А почему бы и нет :)

Код: c#
1.
2.
3.
4.
5.
6.
using (var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\;Extended Properties=dBASE IV"))
using (var command = new OleDbCommand("select 7 * sin(90) * sqr(9)", connection))
{
    connection.Open();
    var sasasas = command.ExecuteScalar();
}
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961216
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...

Ну а примерчик как всегда слабо? :)А я не умею. Вот и интересуюсь как оно. :-)
Код: c#
1.
2.
3.
4.
5.
6.
                        decimal znach = Eval(drk["Формула"].ToString(), ds, "[Период отчетности] = '" + r["ИД"].ToString() + "'");
                        Expression body = System.Linq.Dynamic.DynamicExpression.Parse(null, drk["1 Категория"].ToString(), symbols);
                        LambdaExpression e = Expression.Lambda(
                            body, new ParameterExpression[] { x });
                        bool k = (bool)e.Compile().DynamicInvoke(znach);
                        if (k) drr["1 Категория"] = znach.ToString();
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961218
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eval через DataTable
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
        private decimal Eval(string formula, YSBMESDataSet Ds, string where)
        {
            // Найти используемые формы,строки,переменные и собрать рабочую таблицу
            DataTable DTRab = new DataTable("DTRab");
            string[] FormSplit;
            decimal Des;
            // Создаем графы используемые в формуле
            string Formula = formula;
            Formula = Formula.Replace('(', ' ');
            Formula = Formula.Replace(')', ' ');
            FormSplit = Formula.Split(new char[] { '+', '-', '*', '/' });
            for (int i = 0; i < FormSplit.Length; i++)
            {
                if (!DTRab.Columns.Contains(FormSplit[i].ToString().Trim()))
                {
                    try
                    {
                        Des = System.Convert.ToDecimal(FormSplit[i].ToString().Trim());
                    }
                    catch
                    {
                        DTRab.Columns.Add(FormSplit[i].ToString().Trim(), System.Type.GetType("System.Decimal"));
                    }
                }
            }
            // Создаем основную графу с формулой (только после граф используемых в формуле)
            DTRab.Columns.Add("Значение формулы", System.Type.GetType("System.Decimal"));
            DTRab.Columns["Значение формулы"].Expression = formula;


            // Заполняем данными из форм и ...
            DataRow DTRrow = DTRab.NewRow();
            DTRab.Rows.Add(DTRrow);
            string Tablisa, Stroka, Strokar;
            int Grafa;
            foreach (DataColumn DRCol in DTRab.Columns)
            {
                if (DRCol.ColumnName.IndexOf("_") > 0)
                {
                    Tablisa = DRCol.ColumnName.Substring(0, DRCol.ColumnName.IndexOf("_"));
                    Strokar = DRCol.ColumnName.Substring(Tablisa.Length + 1, DRCol.ColumnName.Length - (Tablisa.Length + 1));
                    Stroka = Strokar.Substring(0, Strokar.IndexOf("_"));
                    Grafa = System.Int32.Parse(Strokar.Substring(Stroka.Length + 1, Strokar.Length - (Stroka.Length + 1)));
                    if (!Ds.Tables.Contains(Tablisa))
                    {
                        main.LoadAndFillMacroType("Отчетность предприятий");
                        //                        main.CreateType(Tablisa, main.GetTypeIDByTypeName(Tablisa), true);
                    }
                    DataView RowF = new DataView(Ds.Tables[Tablisa], where + " and [Код строки] = '" + Stroka + "'", "Код строки", DataViewRowState.CurrentRows);

                    int k = 0, j = 0;
                    foreach (DataColumn DC in Ds.Tables[Tablisa].Columns)
                    {
                        if (DC.DataType.FullName == "System.Decimal")
                        {
                            j++;
                            if (j == Grafa)
                            {
                                Grafa = k;
                                break;
                            }
                        }
                        k++;
                    }


                    decimal Summa = 0;
                    for (int i = 0; i < RowF.Count; i++)
                    {
                        Summa = Summa + System.Decimal.Parse(RowF[i].Row.ItemArray[Grafa].ToString());
                    }

                    try
                    {
                        DTRab.Rows[0][DRCol.ColumnName] = Summa.ToString();
                    }
                    catch { }
                }
            }

            try
            {
                return decimal.Round(decimal.Parse(DTRab.Rows[0]["Значение формулы"].ToString()), 2);
            }
            catch
            {
                return 0;
            }
        }
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961220
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ViPRos,

Что-то длинно слишком. Сам код не смотрел
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961222
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

3 строчки много?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961223
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код ниже, это другой способ
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961230
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, тебя прёт какие лохмотья постить на форум? Нормальные люди если постить, постят нормальный понятный компилящийся код. Неужели ты думаешь кто-то захочет ковыряться в твоём мутном гавнокоде.

Так слабо было отпостить?

Код: c#
1.
2.
3.
string exp = "Math.PI + Math.Sin(180) + Math.Sqrt(9)";
var expression = System.Linq.Dynamic.DynamicExpression.ParseLambda(new ParameterExpression[] { }, typeof(object), exp);
var result = expression.Compile().DynamicInvoke();
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961232
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ну некогда чистить код, выдрал, да показал
я ж не для выебона, а так, токмо ляля ради
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961272
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosну некогда чистить код, выдрал, да показал
я ж не для выебона, а так, токмо ляля ради
Ну криво это, Сахават, реально криво :) Хочешь продемонстировать - возьми и покажи вменяемый вариант.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961349
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ладно уж простите великодушно, не буду больше
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961379
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ, ладно уж простите великодушно, не буду больше
Длинк рвёт остальных конкурентов (кроме коддома) по функциональности, это приятно.

Кстати, еще мощный вариант - это msxsl:script. То есть на входе xslt (XsltSettings.EnableScript = true) с функцией, переменные в xml, на выходе результирующий просчитанный xml. Отличный вариант, без генерации сборки.
Только для безопасности лучше это дело выполнять в отдельной песочнице (AppDomain) с минимальными пермиссиями.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961398
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот, зацените, сабжевое на JS
как всегда - просто и функционально. Можно объявлять пользовательские функции, юзать переменные..
http://jsfiddle.net/wfABg/

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function Parser() {
    var __userfuncs = {};
    this.addUserFunc = function(name, params, expr) {
        __userfuncs[name] = new Function(params, 'return ' + expr + ';');
    },
    this.calc = function(expr, params) {
        with (__userfuncs) {
            with (Math) {
                with (params || {}) {
                    return eval(expr);
                }
            }
        }
    }
}



// использование
var parser = new Parser();

parser.addUserFunc('jopa', 't', 't*2');
    
alert(parser.calc('sin(PI/x) + jopa(y)', {x: 2, y: 4}));

...
Рейтинг: 0 / 0
как вычислить выражение?
    #37961590
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меча вот, зацените, сабжевое на JS
как всегда - просто и функционально. Можно объявлять пользовательские функции, юзать переменные..

Ну если не юзать .Net (кодедом, длинк, F#, IronPyton и т.п.), то вариантов масса.

Cабж на Erlang до кучи :]
Код: c#
1.
2.
3.
4.
5.
6.
7.
-module(eval).
-export([expr/2]).

expr(S,Environ) ->
    {ok,Scanned,_} = erl_scan:string(S),
    {ok,Parsed} = erl_parse:parse_exprs(Scanned),
    erl_eval:exprs(Parsed,Environ).



eval:exprs/2



Впрочем можно Erlang и на .Net поюзать https://github.com/takayuki/Erlang.NET
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070103
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://codearticles.ru/Home/ArticleView/1469

Опубликовал в одном месте все возможные варианты решения задачи. Пока их 8. Если знаете еще что-то интересное, кидайте рецепт.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070237
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
МСУЕсли знаете еще что-то интересное, кидайте рецепт.
Эксель - наше фсе!

Код: c#
1.
2.
3.
4.
5.
6.
7.
using Excel = Microsoft.Office.Interop.Excel;
...
Excel.Worksheet WS = (new Excel.Application()).Workbooks.Add().Sheets.Add();
Excel.Range r = WS.Cells[1, 1];
r.Formula = "= 123/500 + SIN(1) + SUM(20,30)";
var result = r.Value;
MessageBox.Show(result.ToString());
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070243
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Эксель - наше фсе!
Вот это жесть :) Хотя, чем не способ - добавил уже второй кото-рецепт.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070324
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Яростный Меч,

У меня от идентификаторов , начинающихся с _ - идиосинкразия
А так - хорошо. Только вот думаю, а нафиг это надо, в браузере функции считать?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070712
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erLexxxxxЯ х....ею, дорогая редакция! Ну да, процедурный подход, все должно быть видно всем, хаос, анус!
а вот не надо.не надо уеть.
всё ж не просто так. я не с балды пишу такие "крамольные" вещи. наверное что то я под этим подразумеваю. ща пишу прогу, так , когда делать нечего. так вот в ней >95% методов статических (а в дальнейшем >99%). и архитектурой там не пахнет. куда хочу, туда ворочу. волюшка воля.
так что не надо уеть. а вопрос видимости это вопрос выбора, не более. я пишу под конкретную задачу. и там на это наплевать. и никакого хаоса. только строгий порядок.

У тебя там 1 God класс? DoAll? Бггг)))

Простите, не удержался :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070806
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АбсолютУ тебя там 1 God класс? DoAll? Бггг)))
Простите, не удержался :)
нет, вы не поняли , там нет Год-класса. им там даже не пахнет.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070837
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38071193
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Изопропил spring net expressions
Круто. Начинающие программисты всегда хотят написать универсальный код, который решает все задачи, нынешние и будущие
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38071946
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В копилку.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072106
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Берём ANTLR и пишем свою вычислялку :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072112
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAБерём ANTLR и пишем свою вычислялку :)
Бабуль, я всё еще не вижу тестового C#-солюшена.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072409
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, ты о чём?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38190565
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот. Мне тоже понадобилось. Надо перводить даты из самых диких форматов, причем сколько этих форматов будет - неясно. И уже совсем было решил заняться рефлексией, как нашел

Кодогенерация на лету C#
Код автора:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public static Delegate CSharpCompilate(Type DelegateType, string Expression)
        {
            // Получаем образ компилируемого метода для информации о параметрах(число, типы, имена)
            MethodInfo InvokeInfo = DelegateType.GetMethod("Invoke");
            if (InvokeInfo == null)
                throw new NotSupportedException(string.Concat("Type \"", DelegateType.ToString(), "\" must be is delegate"));
            else
            {
                // строка коспиляции С# кода
                StringBuilder compileString = new StringBuilder(128);
                // Обявляем класс со статическим методом "Invoke"
                compileString.Append("class _My{public static ").Append(InvokeInfo.ReturnType == typeof(void) ? "void" : InvokeInfo.ReturnType.FullName).Append(" ").Append("Invoke(");
                // Получаем информацию обо всех параметрах функции
                // И заносим их в строку-компиляции
                foreach (var Param in InvokeInfo.GetParameters())
                {
                    // Если параметр имет тип ref или out
                    if (Param.ParameterType.IsByRef) compileString.Append("ref ").Append(Param.ParameterType.FullName.Replace('+', '.').TrimEnd('&')).Append(" ").Append(Param.Name).Append(",");
                    // Иначе
                    else compileString.Append(Param.ParameterType.FullName.Replace('+', '.')).Append(" ").Append(Param.Name).Append(",");
                }
                compileString[compileString.Length - 1] = ')';
                // Добавляем вместо тела функции наше выражение
                compileString.Append("{").Append(Expression).Append(";}}");

                //Объявляем провайдер кода С#
                CSharpCodeProvider prov = new CSharpCodeProvider();
                // В параметрах компидяции - подключаем все сборки "родительского" приложения(чтоб не мучиться)

                CompilerParameters cp = new CompilerParameters(Array.ConvertAll<Assembly, string>(AppDomain.CurrentDomain.GetAssemblies(), x => x.Location));
                // Помечаем сборку, как временную
                cp.GenerateInMemory = true;
                // Обрабатываем CSC компилятором
                string codeString = compileString.ToString();
                CompilerResults results = prov.CompileAssemblyFromSource(cp, codeString);
                // Если есть ошибки - собираем их и выдаем исключение
                if (results.Errors.Count > 0)
                {
                    StringBuilder errorString = new StringBuilder("Error of C# Compilation CS");
                    errorString.AppendLine("Number of Errors: " + results.Errors.Count);
                    foreach (CompilerError err in results.Errors)
                        errorString.AppendLine(err.ErrorText);
                    throw new NotSupportedException(errorString.ToString());
                }
                // Если ошибок нет, то с помощью отражения достаем из временной сборки нашу функцию
                else return Delegate.CreateDelegate(DelegateType, results.CompiledAssembly.GetType("_My").GetMethod("Invoke"));
            }
        }



Использование

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public delegate DateTime ConvertAVDate(object x);
...
string wmiDate = "20130319194630.659000+240";
string kavDate = "2013-01-01 13-24-45";
long t = DateTime.Now.Ticks;

string code;
            
code = "return System.Management.ManagementDateTimeConverter.ToDateTime(x.ToString())";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code ) as ConvertAVDate)(wmiDate));

code = "return new System.DateTime(System.Convert.ToInt64(x))";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code) as ConvertAVDate)(t));

code = "return System.DateTime.ParseExact(x.ToString(), \"yyyy-MM-dd HH-mm-ss\", null)";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code) as ConvertAVDate)(kavDate));

Console.ReadKey();
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38190705
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2, и в чём прикол? Почему не так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
string wmiDate = "20130319194630.659000+240";
string kavDate = "2013-01-01 13-24-45";
long t = DateTime.Now.Ticks;

Console.WriteLine(Management.ManagementDateTimeConverter.ToDateTime(wmiDate));
Console.WriteLine(new DateTime(t));
Console.WriteLine(DateTime.ParseExact(kavDate, "yyyy-MM-dd HH-mm-ss", null));
Console.ReadKey();

?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192085
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANA,

Потому что это крутится в сервисе и, если мне надо распознать какой-то новый формат, то я пишу в конфиге новый строковый парсер, а не перекомпилирую сервис и не останавливаю его для загрузки новой версии. Ибо остановка этого сервиса на 10 секунд может привести к серьезной проблеме у пользователь-неудачника, который попадет на эти 10 секунд.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192546
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devexpress:
Код: c#
1.
2.
            var evaluator = new DevExpress.Data.Filtering.Helpers.ExpressionEvaluator(null, "10 * 2 - 1 + cos(0)");
            var res = evaluator.Evaluate(null);
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192716
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANA,

Потому что это крутится в сервисе и, если мне надо распознать какой-то новый формат, то я пишу в конфиге новый строковый парсер, а не перекомпилирую сервис и не останавливаю его для загрузки новой версии. Ибо остановка этого сервиса на 10 секунд может привести к серьезной проблеме у пользователь-неудачника, который попадет на эти 10 секунд.Аааааа! Ну так с описания задачи и надо было начинать.

Её можно и иначе решить, например: динамическим подключением сборки с форматами и конвертаторами.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38193022
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую в работе Ciloci Flee - работает шустро. Правда, проект давно не обновляется.

Ciloci Flee
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38193833
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANAАааааа! Ну так с описания задачи и надо было начинать.
Это топик про различные способы вычислений. Тут задача не важна.


skyANAЕё можно и иначе решить
Разумеется. Можно к веб-сервисам обращаться. Практически таже компиляция на лету.
Много всего чего придумать можно.
Но парсинг даты задача мелкая, мне удобно в базе одну строку хранить.
...
Рейтинг: 0 / 0
116 сообщений из 116, показаны все 5 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вычислить выражение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]