КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Программная реализация
// Событие OnClick на каждой цифровой кнопке // обрабатывает отдельная процедура. implementation {$R *.dfm} var accum: real; // аккумулятор oper: integer; // операция: 1 — '+'; 2 — '-'; // 0 — "выполнить" (кнопка "=") f: integer; { f = 0 ждем первую цифру нового числа, например, после выполнения операции, когда на индикаторе результат. f = 1 ждем остальные цифры. } // кнопка 0 procedure TForm1.Button0Click(Sender: TObject); begin if f = 0 // первая цифра числа then begin Edit1.Text := '0'; f := 1; // ждем остальные цифры end else if Edit1.Text <> '0' // чтобы на индикаторе не было // нескольких нулей в начале числа then Edit1.Text := Edit1.Text + '0'; end; // кнопка 1 procedure TForm1.Button1Click(Sender: TObject); begin if f = 0 // первая цифра числа then begin Edit1.Text := '1'; f := 1; // ждем остальные цифры end else Edit1.Text := Edit1.Text + '1'; end; // кнопка 2 procedure TForm1.Button2Click(Sender: TObject); begin if (f = 0) // первая цифра числа then begin Edit1.Text := '2'; f := 1; // ждем остальные цифры end else Edit1.Text := Edit1.Text + '2'; end; // кнопка 3 procedure TForm1.Button3Click(Sender: TObject); begin if f = 0 then begin Edit1.Text := '3'; f := 1; end else Edit1.Text := Edit1.Text + '3'; end; // кнопка 4 procedure TForm1.Button4Click(Sender: TObject); begin if f = 0 then begin Edit1.Text := '4'; f := 1; end else Edit1.Text := Edit1.Text + '4'; end; // кнопка 5 procedure TForm1.Button5Click(Sender: TObject); begin if (f = 0) then begin Edit1.Text := '5'; f := 1; end else Edit1.Text := Edit1.Text + '5'; end; // кнопка 6 procedure TForm1.Button6Click(Sender: TObject); begin if f = 0 then begin Edit1.Text := '6'; f := 1; end else Edit1.Text := Edit1.Text + '6'; end; // кнопка 7 procedure TForm1.Button7Click(Sender: TObject); begin if f = 0 then begin // первая цифра числа Edit1.Text := '7'; f := 1; end else Edit1.Text := Edit1.Text + '7'; end; // кнопка 8 procedure TForm1.Button8Click(Sender: TObject); begin if f = 0 then begin Edit1.Text := '8';
f := 1; end else Edit1.Text := Edit1.Text + '8'; end; // кнопка 9 procedure TForm1.Button9Click(Sender: TObject); begin if f = 0 // первая цифра числа then begin Edit1.Text := '9'; f := 1; // ждем остальные цифры end else Edit1.Text := Edit1.Text + '9'; end; // десятичная точка procedure TForm1.ButtonZClick(Sender: TObject); begin if Edit1.Text = '0' then begin Edit1.Text := '0,'; f := 1; end; if Pos(',',Edit1.Text) = 0 then Edit1.Text := Edit1.Text + ','; end; // выполнение операции procedure DoOper; var numb: real; // число на индикаторе begin // accum содержит результат предыдущей // операции, oper — код операции, которую // надо выполнить. Операнд находится // на индикаторе. numb := StrToFloat(Form1.Edit1.Text); case oper of 0: accum := numb; 1: accum := accum + numb; 2: accum := accum — numb; end; Form1.Edit1.Text := FloatToStr(accum); end; // кнопка "+". procedure TForm1.ButtonPlusClick(Sender: TObject); { Надо выполнить предыдущую операцию, вывести результат на индикатор, запомнить текущую операцию и установить режим ожидания первой цифры нового числа. } begin if f = 0 // ждем первую цифру, но пользователь // щелкнул на кнопке операции then oper := 1 // запомним операцию else begin // на индикаторе есть число DoOper; // выполнить предыдущую операцию oper :=1; // запомнить текущую операцию f:=0; // ждем первую цифру нового числа end; end; // кнопка "-" procedure TForm1.ButtonMinusClick(Sender: TObject); // см. комментарий к процедуре обработки OnClick на "+" begin if f = 0 // ждем первую цифру then oper := 2 else begin DoOper; // выполнить предыдущую операцию oper :=2; // запомнить текущую операцию f:=0; // ждем первую цифру нового числа end; end; // кнопка "=" procedure TForm1.ButtonEnterClick(Sender: TObject); begin if f = 0 // ждем первую цифру then oper := 0 else begin DoOper; // выполнить предыдущую операцию oper :=0; // запомнить текущую операцию f:=0; // ждем первую цифру нового числа end; end; // кнопка "с" — очистка procedure TForm1.ButtonCClick(Sender: TObject); begin Edit1.Text := '0'; accum := 0; oper := 0; f := 0; // ждем первую цифру числа end; // нажатие клавиши в поле Edit1 procedure TForm1.Edit1Change(Sender: TObject; var Key:Char); begin Key := Chr(0); // не отображать символы end; procedure TForm1.FormCreate(Sender: TObject); begin oper := 0; end; end.
|