Другие языки программирования и технологии

<<<delphi,>>>

вопрос такой: мне надо в один edit ввести числовое выражение (например: 2+2) а во втором получить решение (4). Как я и ожидал edit2.Text:=inttostr(strtoint(edit1.Text)); не помогло.
Есть ли какая нибудь возможность посчитать это сразу. Если нет, то придется писать многовато, а мне в падлу
чтото вроде for q:= 1 to length(edit1.text) if edit1.text[q]='+' then edit1.text ...
помогите пж.
Именно так и надо. Это называется ПАРСИНГ строки. Но лучше делать примерно так:

i1 := strtoint(trim(copy(str,1,Pos(str,'+') - 1)));
i2 := strtoint(trim(copy(str,Pos(str,'+') +1, length(str) - Pos(str,'+'))));
edit2.text := inttostr(i1 + i2);

В моем коде возможны ошибки, т. к. пишу сразу тут, по памяти. Но концепция верна на 100%
Aleksandr Ivanov
Aleksandr Ivanov
9 425
Лучший ответ
Придется писать многовато, увы.
Легче всего - рекурсивно: если число, возвращаешь значение; если не число - находишь оператор с самым низким приоритетом и рекурсивно вызываешь функцию для двух половинок строки вокруг оператора.
> Есть ли какая нибудь возможность посчитать это сразу

Конечно есть.
A;
Aaaaaaaaaleks ;:
5 551
а попробуй напиши! !
разбор командной строки задача интересная.
она потом тебе в толковых приложениях пригодится
и в ВУЗе я думаю препод почти любой ее курсачем зачтет.
Сергей Шор
Сергей Шор
4 361
во первых надо написать парсер функцию, которая на вход принимает строку, на выход массив в котором каждый элемент строка, но она может быть либо числом (целым или дробным) либо знаком
во вторых написать функцию которая принимает в себя массив строк и пробегая этот массив определяет число этот элемент или знак, если число, то определяет - целое или дробное, если знак, то определяет какую операцию вычисления нужно будет произвести. Далее можешь создать спец массив, в котором будут упорядочены по законам арифметики нужного результата Вот и все
Boris Ydarcev
Boris Ydarcev
1 892