Обычный калькулятор.
Программирование: delphi
После выполнения операции, когда на индикаторе результат, f = 1 ждем остальные цифры. }. Создать программу, выполняющую действия простого инженерного калькулятора (рис. 53). Вариант 1. Событие OnClick на каждой цифровой кнопке обрабатывает отдельная процедура. Цель работы — создать программу, выполняющую действия кнопочного калькулятора. Цель работы — создать программу, выполняющую действия… Читать ещё >
Обычный калькулятор. Программирование: delphi (реферат, курсовая, диплом, контрольная)
Цель работы — создать программу, выполняющую действия обычного калькулятора.
Описание плана разработки программы
- 1. Откройте новый проект.
- 2. Разместите на форме экземпляры компонентов: Label, Edit, Button (рис. 52).
3. Сохраните проект, запустите и протестируйте его.
Рис. 52. Окно разработанной программы
Листинг подпрограммы procedure TForml. FormCreate (Sender: TObject); begin
Editl.Text Edit2. Text := '';
Edit3.Text := ''; end;
procedure TForml. Button5Click (Sender: TObject); begin
Editl.Text := '';
Edit2.Text := '';
Edit3.Text := 11; end;
procedure TForml. Button6Click (Sender: TObject); begin close; end;
procedure TForml. ButtonlClick (Sender: TObject); begin
a := StrToFloat (Editl.Text); b := StrToFloat (Edit2.Text); c := a + b;
Edit3.Text := FloatToStr (c); end;
procedure TForml. Button2Click (Sender: TObject); begin
a := StrToFloat (Editl.Text); b := StrToFloat (Edit2.Text); c := a — b;
Edit3.Text := FloatToStr (c); end;
procedure TForml. Button3Click (Sender: TObject); begin
a := StrToFloat (Editl.Text); b := StrToFloat (Edit2.Text); c := a * b;
Edit3.Text := FloatToStr (c); end;
procedure TForml. Button4Click (Sender: TObject); begin
a := StrToFloat (Editl.Text); b := StrToFloat (Edit2.Text); if b = 0 then
Edit3.Text := 'division by zero' else begin
c := a / b;
Edit3.Text := FloatToStr (c); end; end;
Задание для самостоятельного выполнения
1. Создать программу, выполняющую действия простого инженерного калькулятора (рис. 53).
Рис. 53. Простой инженерный калькулятор
Фрагмент подпрограммы (для вычисления функции cos (x)).
if Editl. Text о '' then begin
a := StrToFloat (Editl.Text); c := cos (a); end;
if Edit2. Text '' then begin
b := StrToFloat (Edit2.Text); c := cos (b); end;
Edit3.Text := FloatToStr (c);
- 2. Добавить на форму кнопки для вычисления функций tg (x), logab.
- 3. Создать программу, выполняющую перевод чисел из десятичной системы счисления в двоичную систему и обратно (рис. 54).
Рис. 54. Перевод чисел
Кнопочный калькулятор
Цель работы — создать программу, выполняющую действия кнопочного калькулятора.
Описание плана разработки программы
- 1. Открыть новый проект.
- 2. Разместить на форме экземпляры компонентов: Edit, Button.
Рис. 55. Окно проекта. Окно разработанной программы
К этой задаче даны два варианта решения. В первом варианте для каждой цифровой кнопки создана отдельная процедура обработки события OnClick. Во втором варианте событие OnClick всех цифровых кнопок обрабатывает одна процедура, что позволило значительно сократить текст программы.
Вариант 1. Событие OnClick на каждой цифровой кнопке обрабатывает отдельная процедура.
implementation
{$R *.dfm}
var
accum: real; // аккумулятор
oper: integer; // операция: 1 — 2 ;
// 0 — «выполнить» (кнопка «=»).
f: integer;
{ f = в ждем первую цифру нового числа, например,
после выполнения операции, когда на индикаторе результат, f = 1 ждем остальные цифры. }.
// кнопка 0.
procedure TForml. Button0Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '0'; f := 1; // ждем остальные цифры end
else if Editl. Text '0'.
// чтобы на индикаторе не было // нескольких нулей в начале числа then
Editl.Text := Editl. Text + '0';
end;
// кнопка 1
procedure TForml. ButtonlClick (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '1'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '1';
end;
// кнопка 2
procedure TForml. Button2Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '2'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '2';
end;
// кнопка 3
procedure TForml. Button3Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '3'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '31;
end;
// кнопка 4
procedure TForml. Button4Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '4'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '4';
end;
// кнопка 5
procedure TForml. Button5Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '5'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '5';
end;
// кнопка 6
procedure TForml. Button6Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '6'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '6';
end;
// кнопка 7
procedure TForml. Button7Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '7'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '7';
end;
// кнопка 8
procedure TForml. Button8Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '8'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '8';
end;
// кнопка 9
procedure TForml. Button9Click (Sender: TObject); begin
if f = 0 // первая цифра числа
then
begin
Editl.Text := '9'; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + '9';
end;
// десятичная точка
procedure TForml. ButtonZClick (Sender: TObject); begin
if Editl. Text = '0' then begin
Editl.Text := '0/; f := l; end;
if Pos (',', Editl. Text) = 0 then Editl. Text := Editl. Text +.
end;
// выполнение операции procedure DoOper; var
numb: real; // число на индикаторе
begin
// ассит содержит результат предыдущей операции,
// орег — код операции, которую надо выполнить.
// Операнд находится на индикаторе. numb := StrToFloat (Forml.Editl.Text); case орег of 0:
accum := numb;
1:
accum := accum + numb;
2:
accum := accum — numb;
end;
Forml.Editl.Text := FloatToStr (accum); end;
// кнопка «+» .
procedure TForml. ButtonPlusClick (Sender: TObject);
{ Надо выполнить предыдущую операцию, вывести результат на индикатор, запомнить текущую операцию и установить режим ожидания первой цифры нового числа. } begin
if f = 0 // ждем первую цифру,
// но пользователь щелкнул на кнопке операции
then
орег := 1 // запомним операцию else begin
// на индикаторе есть число DoOper; // выполнить предыдущую операцию орег := 1; // запомнить текущую операцию f := 0; // ждем первую цифру нового числа
end; end;
// кнопка
procedure TForml. ButtonMinusClick (Sender: TObject);
// см. комментарий к процедуре обработки OnCLxck на «+» begin
if f = 0 // ждем первую цифру then
орег := 2 else begin
DoOper; // выполнить предыдущую операцию орег := 2; // запомнить текущую операцию f := 0; // ждем первую цифру нового числа
end; end;
// кнопка «=».
procedure TForml. ButtonEnterClick (Sender: TObject); begin
if f = 0 // ждем первую цифру
then
орег := 0 else begin
DoOper; // выполнить предыдущую операцию орег := 0; // запомнить текущую операцию f := 0; // ждем первую цифру нового числа
end; end;
// кнопка «с» — очистка
procedure TForml. ButtonCClick (Sender: TObject); begin
Editl.Text := '0'; accum := 0; oper := 0;
f := 0; // ждем первую цифру числа end;
// нажатие клавиши в поле Editl
procedure TForml. EditlChange (Sender: TObject; var Key: Char); begin
Key := Chr (0); // не отображать символы end;
procedure TForml. FormCreate (Sender: TObject); begin
oper := 0; end;
end.
Вариант 2. События OnClick на всех цифровых кнопках обрабатывает одна процедура.
implementation
{$R *.dfm}
{ 1. Во время создания формы свойству Tag каждой цифровой кнопки надо присвоить значение, равное цифре, которая должна появиться на индикаторе калькулятора.
2. После того как обычным образом будет создана процедура обработки события OnCLxck для одной из цифровых кнопок, например для кнопки «.1», надо задать, что событие OnCLick для остальных кнопок обрабатывает эта же процедура. Делается это выбором процедуры в списке, который появляется в результате щелчка на значке раскрывающегося списка в соответствующей строке вкладки Events. }.
var
accum: real; // аккумулятор
oper: integer; // операция: 1 — 2 —
// 0 — «выполнить» (кнопка «=»).
f: integer;
{ / = 0 ждем первую цифру нового числа, например, после выполнения операции, когда на индикаторе результат, f = 1 ждем остальные цифры. }.
// Нажатие на кнопки «в» — «9» procedure TForml. DigitBtnClick (Sender: TObject); var
Btn: TButton; ch: Char; begin
Btn := Sender as TButton; ch := Chr (48 + Btn. Tag);
// chr (48) = '0'; chr{49) = '4‘ и m. d.
// можно и так: ch := Btn. Caption; case Btn. Tag of.
1. .9: // кнопки «1» — «9» .
if f = 0 // первая цифра числа then begin
Editl.Text := ch; f := 1; // ждем остальные цифры end else
Editl.Text := Editl. Text + ch;
0: // кнопка «0».
if Editl. Text '0' //на индикаторе 0 // чтобы на индикаторе не было нескольких нулей // в начале числа then
Editl.Text := Editl. Text + '0';
end;
end;
// десятичная точка
procedure TForml. ButtonZClick (Sender: TObject); begin
if Editl. Text = '0' then begin
Editl.Text := '0/; f := 1; end;
if Pos (',', Editl. Text) = 0 then Editl. Text := Editl. Text +.
end;
// выполнение операции procedure DoOper; var
numb: real; // число на индикаторе begin
// accum содержит результат предыдущей операции,
// орег — код операции, которую надо выполнить.
// Операнд находится на индикаторе. numb := StrToFloat (Forml.Editl.Text);
case oper of 0:
accum := numb;
1:
accum := accum + numb;
2:
accum := accum — numb;
end;
Forml.Editl.Text := FloatToStr (accum); end;
// Обрабатывает нажатие на кнопки «+», «-» и «=» procedure TForml. OpBtnClick (Sender: TObject);
{ Надо выполнить предыдущую операцию, вывести результат на индикатор, запомнить текущую операцию и установить режим ожидания первой цифры нового числа. } var
Btn: TButton; begin
Btn := Sender as TButton;
if f = 0 // ждем первую цифру, но пользователь нажал // на кнопку операции
then
// свойство Tag кнопки хранит код операции oper := Btn. Tag // запомним операцию else begin
DoOper; // выполнить предыдущую операцию oper := Btn. Tag; // запомнить текущую операцию f := 0; // ждем первую цифру нового числа end; end;
// кнопка с — очистка
procedure TForml. ButtonCClick (Sender: TObject); begin
Editl.Text := '0'; accum := 0; oper := 0;
f := 0; // ждем первую цифру числа end;
// нажатие клавиши в поле Editl
procedure TForml. EditlChange (Sender: TObject; var Key: Char); begin
Key := Chr (0); // не отображать символы end;
procedure TForml. FormCreate (Sender: TObject); begin
oper := 0; end;
end.