Страница 1 из 2
Калькулятор
Добавлено: 13 мар 2005, 15:51
senator
Здравсвтуйте! Начал писать свой калькулятор и столкнулся с такой проблемой:
Код: Выделить всё
var
Form1: TForm1;
input_1: string; // первое значение edMain
input_2: string; // второе значение edMain
temp_1: real; // сюда записываем input_1
temp_2: real; // сюда записываем input_2
result: real; // итоговый результат
...
// Функция очищения edMain после нажатия кнопоко '+', '-', '*' или '/'
procedure TForm1.btPlusClick(Sender: TObject);
begin
input_1 := edMain.Text; // Присваиваем переменной input_one значение edMain
temp_1 := StrToFloat(input_1); // переделываем в Float
edMain.Text := ''; // И очищаем поле
...
procedure TForm1.btEqualsClick(Sender: TObject);
begin
if ( btPlus.??????)
end;
Какое буленовское свойство можно использовать для проверки, нажата ли кнопка BtPlus? Или, можно в процедуре TForm1.btPlusClick прописать все дейсвтия и потом просто по нажатии кнопки = (BtEquals) вызвать эту процедуру? И если можно, то как выглядит вызов процедуры? Заранее спасибо.
Добавлено: 14 мар 2005, 09:06
Dr.Grizzly
Cкажи лучше какие компоненты используешь на форме

а мы попробуем тебе предложить варианты решения твоей проги
Добавлено: 14 мар 2005, 09:49
senator
Код: Выделить всё
type
TForm1 = class(TForm)
edMain: TEdit;
btNule: TButton;
btOne: TButton;
btTwo: TButton;
btThree: TButton;
btFour: TButton;
btFive: TButton;
btSix: TButton;
btSeven: TButton;
btEight: TButton;
btNine: TButton;
btPlus: TButton;
btMinus: TButton;
btMultiplie: TButton; // кнопка умножения
btDivide: TButton;
btReset: TButton; // кнопка сброса
Все переменные я указал ранее. Заранее спасибо
Добавлено: 14 мар 2005, 10:48
Dr.Grizzly
Тогда я не совсем пойму с чем ты делаешь эти дествия? Нужно как минимум два числа, где они у тебя храняться? в одном edMain: TEdit? Тогда ты их должен выделить из компонента и присвоить двум переменным с которыми будешь делать действия
Добавлено: 14 мар 2005, 11:13
Dr.Grizzly
Все, я врубился что у тебя

Значит я тебе сюда предложу мой способ решения, нам понадобиться еще одна кнопка '=' btResult:
На кнопки 0,1,2...,9 делаем на OnClick в свойствах следующий обработчик
'2','3'...'9' соответственно на каждую кнопку 2,3...9. Далее, добавим три глобальных переменных в программе, sum,sum2,myflag. На кнопку btMultiplie делаем на событие OnClick следующее:
Код: Выделить всё
if edmain.text<>'' then
sum:=StrToInt(edmain.Text);
edmain.Text:='';
myflag:=1;
Потом у самого edmain на собитии OnChange делаем следующее:
Код: Выделить всё
if edmain.text<>'' then
sum2:=strtoint(edmain.text);
Ну и на кнопку btResult на событие onclick следующее:
Код: Выделить всё
case myflag of
1: edmain.Text:=IntToStr(sum+sum2);
2: edmain.Text:=IntToStr(sum-sum2);
end;
вот, на кнопку '-' присваиваешь переменной myflag:=2;
и т.д. Все елементарно
Добавлено: 14 мар 2005, 11:40
senator
Dr.Grizzly писал(а):Тогда я не совсем пойму с чем ты делаешь эти дествия? Нужно как минимум два числа, где они у тебя храняться? в одном edMain: TEdit? Тогда ты их должен выделить из компонента и присвоить двум переменным с которыми будешь делать действия
Я извеняюсь, конечно, но в первом сообщения я описал все. Из поля edMain сначала записывается в input_1, а потом input_2. Потом эти стринговые переменные переделываются в Float и записываются в temp_1 и temp_2. И, наконец, в переменную result: real; записываются результаты вычеслении. Но я не знаю как проверить, была ли нажата кнопка btPlus
Добавлено: 14 мар 2005, 14:38
senator
Dr.Grizzly, спасибо большое. Работает. Я еще подумаю как сделать точку, а если не получится, то свяжусь с Вами, ок???
Добавлено: 17 мар 2005, 02:07
Naeel Maqsudov
Коллеги! Это изврат - делать эмулятор калькулятора с кнопками... на компе!
Надо делать формульные калькуляторы. Уверяю Вас, это гораздо интереснее. Для синтаксического разбора можно применять деревья, конечные автоматы и множество других алгоритмических решений!
Я, например, сделал себе калькулятор, который прямо в процессе ввода интерпретирует список выражений, разделенных ";".
В выражениях поддерживаются функции, переменные, операнды в разных системах счисления и т.п.
Если интересно, могу закинуть исходник класса, который все это делает.
Добавлено: 17 мар 2005, 06:39
senator
Я конечно понимаю, что формальные калькуляторы - это очень даже хорошо, куча алгоритмов, но для человека, который практически только начал учить Дельфи и обычный нужно поделать. Тем более, что в процессе создания обычного калькулятора я усвоил для себя несколько важных понятии
Добавлено: 17 мар 2005, 10:41
OTELLO
Naeel Maqsudov мне как раз интересно, я сейчас подобным занимаюсь, я бы не отказался посмотреть, если есть возможность кинь плз на
otello_mail@mail.ru
Заранее спасибки =)[/url]