![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа со скобками
alikon1 © (2007-11-12 22:15:00)Как можно реализовать, чтоб при нажатии в моем калькуляторе последовательности:
1. (
2. 15
3. +
4. 30
5. )
6. sin
в label записалось sin(15+30) ?
Просто
1. 45
2. sin
сделал как:
len:=length(stroka)-length(waited_n); // вычисляет длину строки без последних введенных 45
delete(stroka,len+1,length(waited_n)); // удаляет в строчке 45
stroka:=Stroka+'cos('+waited_n+')'; // записывает в строчку sin(45)
А как сделать, чтоб работало не с одним числом, а со скобками не знаю, не получается. Подскажите пожалуйста.
alikon1 (2007-11-15 15:54:00) [1]Вот так вот сделал, вроде работает.
s:=0;
ss:=0;
len:=length(stroka);
if stroka[len]=')' then
begin
for i:=len downto 1 do
begin
if stroka[i]=')' then begin s:=s+1; ss:=ss+1; end
else if stroka[i]='(' then begin ss:=ss-1; if ss=0 then break; end;
end;
end;
label2.Caption:=inttostr(s);
if stroka[len]=')' then
begin
for i:=len downto 1 do
begin
if stroka[i]='(' then
begin s:=s-1; if s=0 then begin Insert('sin',stroka,i); break; end; end;
end;
end
else
begin
len:=length(stroka)-length(waited_n);
delete(stroka,len+1,length(waited_n));
stroka:=Stroka+'sin('+waited_n+')';
end;
alikon1 (2007-11-14 09:57:00) [2]Может и помогло бы, да только я Си в глаза не видел. :)) Delphi и то 3 недели только изучаю.
Zeqfreed (2007-11-13 23:18:00) [3]Если я правильно понял что требуется, то вот код на Си, написанный на скорую руку: http://pastebin.ca/772424
Авось чем поможет :)
alikon1 (2007-11-13 20:39:00) [4]http://ifolder.ru/4121889а это сам исходник
alikon1 (2007-11-13 08:56:00) [5]ну я cos(45) имел ввиду
в постфиксную запись переделываю, вычисляю с приоритетом действий - все это работает. Но ведь для этого надо вводить пример непосредственно в текстовое поле. А мне необходимо это кнопками калькулятора вводить. Вот и получается, что если выражение в скобках перед(!,^)/после функции (sin/cos/tg) то вычислять надо то значение из скобок, а вычисляется функция только последнего числа из скобок.
А как задать, чтоб функцию от всей скобки считал?
Германн (2007-11-13 02:04:00) [6]
> А как сделать, чтоб работало не с одним числом, а со скобками
> не знаю, не получается. Подскажите пожалуйста.
Поставь задачу, которую может понять другой человек. Тогда можешь расчитывать на получение ответа.
antonn (2007-11-13 00:39:00) [7]
> Чего вы ему все советуете мат. парсер. Тут задача несколько
> другая.
Потому что невнимательно читаем :)
Johnmen (2007-11-13 00:18:00) [8]
> stroka:=Stroka+' cos('+waited_n+')'; // записывает в строчку sin(45)
Который зовется cos?
А впрочем тебе еще рано об этом (с)
Zeqfreed (2007-11-12 23:50:00) [9]Чего вы ему все советуете мат. парсер. Тут задача несколько другая.
antonn (2007-11-12 23:29:00) [10]http://kladovka.net.ru/index.cgi?pid=list&rid=28
Zeqfreed (2007-11-12 23:21:00) [11]Требуется формализация задачи. А то вариантов напридумывать можно сколько угодно.
Джо (2007-11-12 22:28:00) [12]Это всю велосипед. Будет с квадратными колесами, даже если и (чудом!) поедедет.
Начните с теории. Начать очень просто: Google + разбор математических выражений