Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа со скобками


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 + разбор математических выражений


Наверх

Титульная страница Поиск, карта сайта Написать письмо