- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
static class MathParser
{
static double getFunc(char op, double a, double b)
{
switch (op)
{
case '+': return a + b; case '-': return a - b;
case '*': return a * b; case '/': return a / b; case '%': return a % b;
case '^': return Pow(a, b); default: return double.NaN;
}
}
static char[][] ops = { new char[] { '+', '-' }, new char[] { '*', '/', '%' }, new char[] { '^' } };
public static double Eval(string str) => Eval(ref str, 0, str.Length);
private static double Eval(ref string str, int z, int l, int i = 0)
{
for (; i < 3; i++)
for (int v = l - 1; v >= z; v--)
for (int j = ops[i].Length - 1; j >= 0; j--)
if (str[v] == ops[i][j])
return getFunc(str[v],
Eval(ref str, z, v, i),
Eval(ref str, v + 1, l, i + 1));
return double.Parse(str.Substring(z, l - z));
}
}
Какой-то укуренный калькулятор получился...
MathParser.Eval("3,1346") => 3.1346
MathParser.Eval("3+2*5") => 13
MathParser.Eval("2^5-1") => 31
MathParser.Eval("1/2^3") => 0.125
MathParser.Eval("2^2^2^2") => 256
MathParser.Eval("7,2%3") => 1.2
guest8 09.04.2019 17:46 # −999
guest8 09.04.2019 20:56 # −999
BOKCEJIbHblu_nemyx 09.04.2019 21:22 # 0
BOKCEJIbHblu_nemyx 09.04.2019 21:25 # 0
bormand 09.04.2019 21:26 # −10
BOKCEJIbHblu_nemyx 09.04.2019 21:29 # 0
bormand 09.04.2019 21:30 # −10
Steve_Brown 10.04.2019 10:11 # +1
OlegUP 10.04.2019 09:04 # 0
Пользуйтесь константными констукторами.
guest8 09.04.2019 21:45 # −999
cmepmop 09.04.2019 22:02 # 0
Везде идёт подмена блока.
gost 10.04.2019 07:50 # 0
guest8 26.05.2019 12:11 # −999
Rooster 26.05.2019 13:30 # 0
bormand 26.05.2019 13:54 # −10
cmepmop 26.05.2019 15:08 # 0
Но ничего, с выходом бесплатной делфи этому уёбищё настал конец. Я верю в это.
gost 26.05.2019 15:09 # 0
Increment_Excrement 26.05.2019 15:23 # 0
cmepmop 26.05.2019 16:25 # −8
PA3yMHblu_nemyx 27.05.2019 02:21 # 0
Desktop 26.05.2019 17:24 # 0
bormand 26.05.2019 17:36 # −10
gost 26.05.2019 19:33 # 0
Steve_Brown 10.04.2019 10:10 # −1
bormand 10.04.2019 10:38 # −10
BOKCEJIbHblu_nemyx 10.04.2019 10:41 # 0
MAPA6y 17.09.2019 12:27 # 0
Вдруг замычали тоже отчего-то,
За ними львы, жирафы, кашалоты,
Орлы, гориллы, крокодилы — все твердили «Му»!
Steve_Brown 10.04.2019 11:35 # 0
guest8 10.04.2019 12:20 # −999
gost 10.04.2019 12:41 # 0
BoeHHblu_nemyx 10.04.2019 13:16 # 0
Steve_Brown 10.04.2019 13:31 # +1
BoeHHblu_nemyx 10.04.2019 13:31 # −1
gost 10.04.2019 16:16 # 0
bormand 10.04.2019 16:24 # −10
Иначе строка превращается в какой-то ебучий god object.
gost 10.04.2019 16:33 # 0
gost 10.04.2019 16:34 # 0
OCETuHCKuu_nemyx 10.04.2019 16:43 # 0
bormand 10.04.2019 16:35 # −10
gost 10.04.2019 16:42 # 0
bormand 10.04.2019 16:45 # −10
std::begin(str) же! Чтобы для массивов тоже работало.
BoeHHblu_nemyx 10.04.2019 16:30 # 0
gost 10.04.2019 16:31 # 0
OCETuHCKuu_nemyx 10.04.2019 16:44 # 0
guest8 26.05.2019 12:39 # −999
PA3yMHblu_nemyx 27.05.2019 02:23 # +1
К слову “low” антоним “high”.
С точки зрения Руби всё правильно (принцип наименьшей неожиданности или как там).
guest8 27.05.2019 03:04 # −999
Rooster 27.05.2019 08:09 # 0
bormand 27.05.2019 11:22 # −10
Increment_Excrement 27.05.2019 14:03 # 0
guest8 27.05.2019 18:01 # −999
guest8 17.09.2019 20:05 # −999
gost 27.05.2019 05:20 # 0
gost 27.05.2019 05:22 # +1
Какая неконсистентность (((
Xyu_HE_3HAET 11.04.2019 11:59 # 0
PACTPOBblu_nemyx 11.04.2019 15:26 # 0
Поскольку длина ограничена, реаллокация не нужна.
Правда, толку от таких коротеньких строк немного...
Rooster 26.05.2019 09:30 # 0
Increment_Excrement 26.05.2019 09:46 # +1
PA3yMHblu_nemyx 26.05.2019 09:58 # +1
Это при чтении из файловой переменной типа Text файл разбивался на строки по CRLF, но так и было задумано. Для произвольных файлов были типы file и file of byte.
PA3yMHblu_nemyx 26.05.2019 10:02 # +1
#13#10 вне апострофов –— это и есть вставка CRLF.
Rooster 26.05.2019 10:53 # 0
PA3yMHblu_nemyx 26.05.2019 11:42 # 0
guest8 26.05.2019 12:10 # −999
PA3yMHblu_nemyx 26.05.2019 12:56 # +1
guest8 26.05.2019 12:11 # −999
Rooster 27.05.2019 08:08 # 0
cmepmop 09.04.2019 22:04 # +2
Это будет означать передачу по указателю. Счётчик ссылок при этом не работает и память не выделяется. Короче, чисто для оптимизации.
PACTPOBblu_nemyx 11.04.2019 15:24 # +1
Для параметров без var и const вызывается «копирующий конструктор»: скалярные значения пушатся в стек (или передаются через регистры в случае fastcall), для структурированных же в стеке создаётся копия, а потом отправляется указатель на копию.
С const всё ясно: поскольку запретили изменять, то и указатель не будет изменяться.
Интереснее, что происходит со строками в случае var и в случае передачи по значению.
cmepmop 11.04.2019 16:05 # +1
cmepmop 11.04.2019 16:12 # +1
cmepmop 17.09.2019 18:07 # 0
Оставили бы просто PChar - и горя б не знали.
nblXOMAKAKA 17.09.2019 19:17 # 0
1. В нём нельзя хранить байт с кодом 0 (ноль).
2. Как следствие, в нём нельзя хранить строки в кодировке UCS-2 (хотя это не проблема, ведь существует PWideChar).
3. Операция определения длины строки очень медленная, ведь требуется каждый раз сканировать всю строку в поисках байта с кодом 0.
Как следствие возможны утечки памяти, если случайно в строку поместить байт с кодом 0. Значит, при получении данных из сторонних источников нужно проверять содержимое строки.
cmepmop 17.09.2019 19:26 # 0
Пиздец, какой недостаток, особенно для делфи под Windows! О-о-о! Всё, выбрасываем делфи.
@2
...
@3. Операция определения длины строки очень медленная, ведь требуется каждый раз сканировать всю строку в поисках байта с кодом 0.
Длину можно хранить по отрицательному смещению. см.
Года два-три назад я долго вникал в смысл этого черезжопия, пока не додуплил, что на выходе будет совместимый PChar, и для определения длины необязательно искать нулевой символ.
nblXOMAKAKA 17.09.2019 20:11 # 0
Зря смеёшься. У некоторых программ были уязвимости, связанные с особой трактовкой байта, равного нулю.
guest8 17.09.2019 19:29 # −999
cmepmop 17.09.2019 19:31 # 0
guest8 17.09.2019 19:34 # −999
nblXOMAKAKA 17.09.2019 19:56 # 0
«Длинные строки» стали называться AnsiString и WideString (разница между AnsiString и WideString в логике работы функций стандартной библиотеки, выделяющих подстроку по позиции символа, а не байта). У них индикатор длины вроде бы не два байта, а четыре, т. е. длина строки ограничена четырьмя гигами. Надо добыть исходники SYSTEM.PAS и посмотреть.
guest8 17.09.2019 20:04 # −999
nblXOMAKAKA 17.09.2019 20:07 # +1
В «Си» аналогичная ситуация: там тоже пустая строка занимает один байт: в нём хранится терминатор, по нелепому совпадению тоже равный 0.
cmepmop 17.09.2019 20:18 # 0
Им бы справку читать, а не выпендриваться.
guest8 17.09.2019 20:20 # −999
nblXOMAKAKA 17.09.2019 20:25 # 0
cmepmop 17.09.2019 20:26 # 0
Какой БАГОР)))
guest8 17.09.2019 20:58 # −999
ropuJIJIa 17.09.2019 21:22 # 0
Возможно, тип string[0] объявить нельзя, но мы об этом и не говорили. Мне такой тип данных ни разу не понадобился.
Вот пустые записи (структуры) обычное дело, когда нужно застолбить указатель на конец чего-то крупного:
guest8 17.09.2019 21:23 # −999
guest8 17.09.2019 21:53 # −999
guest8 17.09.2019 21:26 # −999
guest8 17.09.2019 21:54 # −999
guest8 17.09.2019 21:57 # −999
guest8 17.09.2019 23:01 # −999
nblXOMAKAKA 17.09.2019 20:08 # 0
cmepmop 17.09.2019 20:21 # 0
nblXOMAKAKA 17.09.2019 20:24 # 0
guest6 04.04.2023 20:03 # −10
Aksina_Polenova 05.04.2023 23:07 # 0
OcemuH 08.04.2023 13:39 # 0
guest8 17.09.2019 21:11 # −999
guest8 17.09.2019 23:06 # −999
guest8 17.09.2019 19:51 # −999
guest8 17.09.2019 20:03 # −999
guest8 26.05.2019 13:06 # −999
PA3yMHblu_nemyx 26.05.2019 13:19 # 0
Increment_Excrement 27.05.2019 10:12 # 0
• пишешь небольшую функцию
• компилируешь
• смотришь результат дизассемблирования
BOKCEJIbHblu_nemyx 10.04.2019 09:57 # 0
guest8 17.09.2019 20:27 # −999
cmepmop 17.09.2019 20:32 # 0
Когда в конце 5 курса медынститута я начал учить делфи ради забавы, то и представить не мог, что мне придется впахивать сисадминцем в какой-то гнилой больнице.
guest8 17.09.2019 20:43 # −999
cmepmop 17.09.2019 20:48 # 0
Самое смешное, что зав. главного врача в нашей гнилушке- тоже гамсик. Не зная моего бравого прошлого, он пытался брызгать на меня слюной как на простого опа, а когда получил отповедь - заткнулся, спеси поубавилось.
guest8 17.09.2019 21:04 # −999
guest8 17.09.2019 21:10 # −999
cmepmop 17.09.2019 21:12 # 0
guest8 17.09.2019 21:18 # −999
cmepmop 17.09.2019 21:18 # 0
guest8 17.09.2019 21:19 # −999
cmepmop 17.09.2019 21:23 # 0
guest8 17.09.2019 21:23 # −999
cmepmop 17.09.2019 21:28 # 0
guest8 17.09.2019 21:29 # −999
cmepmop 17.09.2019 21:47 # 0
guest8 17.09.2019 22:06 # −999
guest8 17.09.2019 21:37 # −999
guest8 17.09.2019 22:06 # −999
guest8 18.09.2019 02:45 # −999
guest8 17.09.2019 21:15 # −999
guest8 17.09.2019 21:16 # −999
guest8 17.09.2019 21:18 # −999
guest8 17.09.2019 21:20 # −999
guest8 17.09.2019 21:20 # −999
guest8 17.09.2019 21:23 # −999
guest8 17.09.2019 21:41 # −999
guest8 17.09.2019 22:07 # −999
guest8 18.09.2019 01:22 # −999
cmepmop 17.09.2019 21:11 # 0
guest8 17.09.2019 21:14 # −999
cmepmop 17.09.2019 21:18 # 0
guest8 17.09.2019 21:25 # −999
guest8 17.09.2019 20:48 # −999
cmepmop 17.09.2019 20:52 # 0
guest8 17.09.2019 20:56 # −999
guest8 17.09.2019 21:17 # −999
guest8 17.09.2019 21:18 # −999
guest8 17.09.2019 21:18 # −999
guest8 17.09.2019 21:20 # −999
guest8 17.09.2019 21:20 # −999
guest8 17.09.2019 21:20 # −999
ropuJIJIa 17.09.2019 21:31 # 0
guest8 17.09.2019 22:09 # −999
guest8 17.09.2019 23:17 # −999
guest8 17.09.2019 23:33 # −999
guest8 17.09.2019 23:54 # −999
guest8 18.09.2019 04:30 # −999
ropuJIJIa 18.09.2019 06:29 # 0
Ты поди ещё не знаешь, что такое евроремонт?
guest8 17.09.2019 22:13 # −999
cmepmop 17.09.2019 21:20 # 0
guest8 17.09.2019 21:21 # −999
guest8 17.09.2019 21:22 # −999
guest8 17.09.2019 21:23 # −999
guest8 17.09.2019 21:26 # −999
guest8 17.09.2019 21:31 # −999
guest8 17.09.2019 21:40 # −999
guest8 17.09.2019 22:09 # −999
guest8 17.09.2019 22:11 # −999
guest8 17.09.2019 22:12 # −999
guest8 17.09.2019 22:14 # −999
guest8 17.09.2019 22:15 # −999
guest8 17.09.2019 21:39 # −999
guest8 17.09.2019 22:10 # −999
guest8 19.09.2019 22:26 # −999
cmepmop 19.09.2019 22:28 # 0
Ты никак не можешь понять, что вреда от тебя ничуть не меньше, ноешь, флудишь, срешь где попало. Мудак ты.
guest8 19.09.2019 22:35 # −999
cmepmop 19.09.2019 22:38 # 0
guest8 17.09.2019 23:18 # −999
guest8 18.09.2019 01:21 # −999
guest8 17.09.2019 20:48 # −999
TEH3OPHblu_nemyx 17.09.2019 20:52 # +1
cmepmop 17.09.2019 20:57 # 0
guest8 17.09.2019 21:21 # −999
guest8 17.09.2019 21:18 # −999
guest8 17.09.2019 20:59 # −999
guest8 17.09.2019 21:22 # −999