Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Работа со скобками   Найти похожие ветки 

 
alikon1   (2007-11-12 22:15) [0]

Как можно реализовать, чтоб при нажатии в моем калькуляторе последовательности:
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)

А как сделать, чтоб работало не с одним числом, а со скобками не знаю, не получается. Подскажите пожалуйста.


 
Джо ©   (2007-11-12 22:28) [1]

Это всю велосипед. Будет с квадратными колесами, даже если и (чудом!) поедедет.
Начните с теории. Начать очень просто: Google + разбор математических выражений


 
Zeqfreed ©   (2007-11-12 23:21) [2]

Требуется формализация задачи. А то вариантов напридумывать можно сколько угодно.


 
antonn ©   (2007-11-12 23:29) [3]

http://kladovka.net.ru/index.cgi?pid=list&rid=28


 
Zeqfreed ©   (2007-11-12 23:50) [4]

Чего вы ему все советуете мат. парсер. Тут задача несколько другая.


 
Johnmen ©   (2007-11-13 00:18) [5]


> stroka:=Stroka+"cos("+waited_n+")";     // записывает в строчку sin(45)

Который зовется cos?
А впрочем тебе еще рано об этом (с)


 
antonn ©   (2007-11-13 00:39) [6]


> Чего вы ему все советуете мат. парсер. Тут задача несколько
> другая.

Потому что невнимательно читаем :)


 
Германн ©   (2007-11-13 02:04) [7]


> А как сделать, чтоб работало не с одним числом, а со скобками
> не знаю, не получается. Подскажите пожалуйста.

Поставь задачу, которую может понять другой человек. Тогда можешь расчитывать на получение ответа.


 
alikon1   (2007-11-13 08:56) [8]

ну я cos(45) имел ввиду

в постфиксную запись переделываю, вычисляю с приоритетом действий - все это работает. Но ведь для этого надо вводить пример непосредственно в текстовое поле. А мне необходимо это кнопками калькулятора вводить. Вот и получается, что если выражение в скобках перед(!,^)/после функции (sin/cos/tg) то вычислять надо то значение из скобок, а вычисляется функция только последнего числа из скобок.

А как задать, чтоб функцию от всей скобки считал?


 
alikon1   (2007-11-13 20:39) [9]

http://ifolder.ru/4121889 а это сам исходник


 
Zeqfreed ©   (2007-11-13 23:18) [10]

Если я правильно понял что требуется, то вот код на Си, написанный на скорую руку: http://pastebin.ca/772424

Авось чем поможет :)


 
alikon1   (2007-11-14 09:57) [11]

Может и помогло бы, да только я Си в глаза не видел. :)) Delphi и то 3 недели только изучаю.


 
alikon1   (2007-11-15 15:54) [12]

Вот так вот сделал, вроде работает.

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;



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1191925600
Игорь Шевченко
2007-10-09 14:26
2007.12.09
Анкеты действительно сломались.


5-1163762981
Vitebsky
2006-11-17 14:29
2007.12.09
TRichEdit - просмотр стилей


2-1195122648
San1
2007-11-15 13:30
2007.12.09
как избавиться от зависания


15-1194524177
Dragon
2007-11-08 15:16
2007.12.09
Стоимость программы на Delphi


15-1194470055
Malik
2007-11-08 00:14
2007.12.09
Повтарюсь:"Язык, на котором был написан виндовз"