- 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
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
Пользуйтесь константными констукторами.
Везде идёт подмена блока.
Но ничего, с выходом бесплатной делфи этому уёбищё настал конец. Я верю в это.
Вдруг замычали тоже отчего-то,
За ними львы, жирафы, кашалоты,
Орлы, гориллы, крокодилы — все твердили «Му»!
Иначе строка превращается в какой-то ебучий god object.
std::begin(str) же! Чтобы для массивов тоже работало.
и только в руби у нас
downcase
К слову “low” антоним “high”.
С точки зрения Руби всё правильно (принцип наименьшей неожиданности или как там).
Руби очень сильно отличается от всех остальных языков.
Питон язык скучных зануд
Пых язык гопников и малолеток
Джавск язык глупых хипстреов, не умеющих в CS
и сеги
> глупых хипстреов, не умеющих в CS
в сишарп?
Какая неконсистентность (((
Поскольку длина ограничена, реаллокация не нужна.
Правда, толку от таких коротеньких строк немного...
Это при чтении из файловой переменной типа Text файл разбивался на строки по CRLF, но так и было задумано. Для произвольных файлов были типы file и file of byte.
#13#10 вне апострофов –— это и есть вставка CRLF.
потому что там в носу байт длины?
за это надо платить понятием символ
Это будет означать передачу по указателю. Счётчик ссылок при этом не работает и память не выделяется. Короче, чисто для оптимизации.
Для параметров без var и const вызывается «копирующий конструктор»: скалярные значения пушатся в стек (или передаются через регистры в случае fastcall), для структурированных же в стеке создаётся копия, а потом отправляется указатель на копию.
С const всё ясно: поскольку запретили изменять, то и указатель не будет изменяться.
Интереснее, что происходит со строками в случае var и в случае передачи по значению.
Оставили бы просто PChar - и горя б не знали.
1. В нём нельзя хранить байт с кодом 0 (ноль).
2. Как следствие, в нём нельзя хранить строки в кодировке UCS-2 (хотя это не проблема, ведь существует PWideChar).
3. Операция определения длины строки очень медленная, ведь требуется каждый раз сканировать всю строку в поисках байта с кодом 0.
Как следствие возможны утечки памяти, если случайно в строку поместить байт с кодом 0. Значит, при получении данных из сторонних источников нужно проверять содержимое строки.
Пиздец, какой недостаток, особенно для делфи под Windows! О-о-о! Всё, выбрасываем делфи.
@2
...
@3. Операция определения длины строки очень медленная, ведь требуется каждый раз сканировать всю строку в поисках байта с кодом 0.
Длину можно хранить по отрицательному смещению. см.
Года два-три назад я долго вникал в смысл этого черезжопия, пока не додуплил, что на выходе будет совместимый PChar, и для определения длины необязательно искать нулевой символ.
Зря смеёшься. У некоторых программ были уязвимости, связанные с особой трактовкой байта, равного нулю.
Это был важный пук в холиваре паскалистов и сишников сереидны 90-х.
Декартовы точки,
Паскалевы строчки,
Идеи обоих Кюри...
«Длинные строки» стали называться AnsiString и WideString (разница между AnsiString и WideString в логике работы функций стандартной библиотеки, выделяющих подстроку по позиции символа, а не байта). У них индикатор длины вроде бы не два байта, а четыре, т. е. длина строки ограничена четырьмя гигами. Надо добыть исходники SYSTEM.PAS и посмотреть.
лол, бывает строка длиной 0 символов?
погодите-ка... так это же 0!
В «Си» аналогичная ситуация: там тоже пустая строка занимает один байт: в нём хранится терминатор, по нелепому совпадению тоже равный 0.
Им бы справку читать, а не выпендриваться.
В чем тогда разница между языками?
Какой БАГОР)))
Возможно, тип string[0] объявить нельзя, но мы об этом и не говорили. Мне такой тип данных ни разу не понадобился.
Вот пустые записи (структуры) обычное дело, когда нужно застолбить указатель на конец чего-то крупного:
попытка перефорса. Русьня, плес.
а на самом деле tail там указателем на чото может быть
Лучше бы переживал за свой дегенеративный подвид, бомбимых пенсиями хунтой dumbass people.
• пишешь небольшую функцию
• компилируешь
• смотришь результат дизассемблирования
Когда в конце 5 курса медынститута я начал учить делфи ради забавы, то и представить не мог, что мне придется впахивать сисадминцем в какой-то гнилой больнице.
Самое смешное, что зав. главного врача в нашей гнилушке- тоже гамсик. Не зная моего бравого прошлого, он пытался брызгать на меня слюной как на простого опа, а когда получил отповедь - заткнулся, спеси поубавилось.
Уверен, что даже в сосетии есть IT-конторы. А если и нет, то съебаться может быть не поздно.
Да и какая разница на чём программировать. Если умеешь программировать хоть на чём-то, то легко переучиться на любой язык.
Ну такое;)
Если ты действительно хороший программист то скорее всего да, если ты макакий , то может быть и нет
сладкий?
Это ты сильно пошутил, руснепидор. Светодиодка на 10 ватт светит так, что глаза болят. А у вас в спидозной лепестричесвто можно не экономить? Ну хоть где-то вперде.
Тем не менее, я более чем уверен, что на немецком/английском ты не нагуглишь, как ремонтировать светодиодки, перепаивая диоды. А вот на русьнявом - вполне.
Ты поди ещё не знаешь, что такое евроремонт?
Это те люди, которые обсуждают выше строки?
И потом еще ходит на ebanoe.it ныть, как его заебали галеры?
Ты никак не можешь понять, что вреда от тебя ничуть не меньше, ноешь, флудишь, срешь где попало. Мудак ты.
Another thing that will force the hypervisor on is Virtualization-Based Security, which goes by the acronym VBS. This is confusing because to most people VBS stands for VBScript.