Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2008, 01:40   #1
Taisja
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 25
Печаль Помогите, пожалуйста, обработать кнопки скобок в калькуляторе

Не могу придумать как обработать кнопки скобок, помогите, пожалуйста.

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'1'
else Edit1.Text:='1';
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'2'
else Edit1.Text:='2';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'3'
else Edit1.Text:='3';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'4'
else Edit1.Text:='4';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'5'
else Edit1.Text:='5';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'6'
else Edit1.Text:='6';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'7'
else Edit1.Text:='7';
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'8'
else Edit1.Text:='8';
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'9'
else Edit1.Text:='9';
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
if p then Edit1.Text:='0';
p:=false;
if Edit1.Text <>'0' then
Edit1.Text:=Edit1.Text+'0'
else Edit1.Text:='0';
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
r1:=StrToFloat(Edit1.Text);
p:=true;
Oper:='+';
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
if not(p) then r2:=StrToFloat(Edit1.Text);
if p then r2:=r1;
case oper of
'+':Edit1.Text:=FloatToStr(r1+r2);
'-':Edit1.Text:=FloatToStr(r1-r2);
'*':Edit1.Text:=FloatToStr(r1*r2);
'/': if r2<>0 then
Edit1.Text:=FloatToStr(r1/r2)
else edit1.Text:='ERROR';
end;
p:=true;
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
r1:=StrToFloat(Edit1.Text);
p:=true;
Oper:='-';
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
r1:=StrToFloat(Edit1.Text);
p:=true;
Oper:='*';
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
r1:=StrToFloat(Edit1.Text);
p:=true;
Oper:='/';
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
  r1:=StrToFloat(Edit1.Text);
p:=true;  if  r1<0 then edit1.Text:='ERROR' else
Edit1.Text:=FloatToStr(sqrt(r1));

end;

procedure TForm1.Button15Click(Sender: TObject);
begin
  r1:=StrToFloat(Edit1.Text);
p:=true;
 Edit1.Text:=FloatToStr(sqr(r1));
end;

procedure TForm1.Button11Click(Sender: TObject);
var s:string; i,a:byte;
begin
s:=edit1.Text;
a:=0;
for i:=1 to length(s) do
if s[i]=',' then
inc(a);
if a=0 then Edit1.Text:=Edit1.Text+',';
if length(s)=0 then
 Edit1.Text:='0,';
end;

procedure TForm1.Button20Click(Sender: TObject);
begin
Edit1.Text:='0';
Button1.Enabled:=true;
  Button2.Enabled:=true;
  Button3.Enabled:=true;
  Button4.Enabled:=true;
  Button5.Enabled:=true;
  Button6.Enabled:=true;
  Button7.Enabled:=true;
  Button8.Enabled:=true;
  Button9.Enabled:=true;
  Button10.Enabled:=true;
  Button11.Enabled:=true;
  Button12.Enabled:=true;
  Button13.Enabled:=true;
  Button14.Enabled:=true;
  Button15.Enabled:=true;
  Button16.Enabled:=true;
  Button17.Enabled:=true;
  Button18.Enabled:=true;
  Button19.Enabled:=true;
  Button22.Enabled:=true;
end;

procedure TForm1.Button21Click(Sender: TObject);
begin
 Button1.Enabled:=false;
  Button2.Enabled:=false;
  Button3.Enabled:=false;
  Button4.Enabled:=false;
  Button5.Enabled:=false;
  Button6.Enabled:=false;
  Button7.Enabled:=false;
  Button8.Enabled:=false;
  Button9.Enabled:=false;
  Button10.Enabled:=false;
  Button11.Enabled:=false;
  Button12.Enabled:=false;
  Button13.Enabled:=false;
  Button14.Enabled:=false;
  Button15.Enabled:=false;
  Button16.Enabled:=false;
  Button17.Enabled:=false;
  Button18.Enabled:=false;
  Button19.Enabled:=false;
  Button22.Enabled:=false;
end;

procedure TForm1.Button22Click(Sender: TObject);
begin
Edit1.Text:='0';
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
Edit1.Text:=floattostr(0-StrToFloat(Edit1.Text));
end;

end.

Последний раз редактировалось AlDelta; 04.10.2008 в 09:18.
Taisja вне форума Ответить с цитированием
Старый 04.10.2008, 09:14   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Нужен стек.
Открывающая скобка - это запись в стек r1 и oper. Закрывающая - выполнение текущей операции и выталкивание из стека r1/oper.
Например:

Код:
Нажимаем   r1  oper  text
5                -    -       5
*                5    *
(                в стек     (
6                 -    -      6
+                 6    +     
7                 -    -      7
)                 5     *     13     Выполнение 6+7, из стека 5*
=                              65
alexBlack вне форума Ответить с цитированием
Старый 04.10.2008, 12:42   #3
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

посмотри в архиве может пригодиться исходничек...
Вложения
Тип файла: zip calc.zip (3.8 Кб, 15 просмотров)
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обработать ошибку XAOC-forever Работа с сетью в Delphi 11 24.09.2008 20:13
Формат числа в калькуляторе Mint86 Microsoft Office Excel 8 25.07.2008 11:49
Проверить равенство числа открывающих и закрывающих круглых скобок 010 Паскаль, Turbo Pascal, PascalABC.NET 6 18.05.2008 00:27
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35
как написать в калькуляторе... Илюха Общие вопросы Delphi 6 02.11.2007 17:06