На выполнение занятия 3 отводится 4ч.
Задание
1. Разработать программу калькулятора. Для тех, кто не очень свободно читает листинг, рекомендуется сначала составить блок-схему алгоритма в соответствии с заданием и с учетом приведенного упрощенного листинга.
2. Снабдить программу необходимыми комментариями.
3. Подготовиться к ответам на вопросы, содержащиеся в листинге примера.
4. Объяснить, почему не будет работать программа, если приведенный ниже листинг скопировать и поместить в разрабатываемый модуль.
Листинг
unit calc_;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
Type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton; // 1. как это получается?
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
ButtonPlus: TButton;
ButtonMinus: TButton;
ButtonEnter: TButton;
ButtonC: TButton;
Button0: TButton;
ButtonZ: TButton;
procedure Edit1Change(Sender: TObject; var Key:Char);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
|
|
procedure Button6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button0Click(Sender: TObject);
procedure ButtonZClick(Sender: TObject);
procedure ButtonCClick(Sender: TObject);
procedure ButtonPlusClick(Sender: TObject);
procedure ButtonMinusClick(Sender: TObject);
procedure ButtonEnterClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Var
Form1: TForm1; // 2. что это означает?
Implementation // 3. что это такое?
{$R *.dfm}
Var
accum: real; // это что?
oper: integer; // это что?;
f: integer;
{ f = 0 признак ожидания ввода чего? f = 1 соответственно чего? }
procedure TForm1.Button0Click(Sender: TObject);
Begin
if f = 0 //
then begin
Edit1.Text:= '0'; // 4. что такое Edit1 и Edit1.Text (и точка)?
f:= 1;
end
else
if Edit1.Text <> '0' // это позволяет не выводить 0 в начале числа, но
// 5. поясните как это делается?
then Edit1.Text:= Edit1.Text + '0';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin // 6. поясните, что делает эта процедура?
if f = 0
then begin
Edit1.Text:= '1';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '1'; // 7. что делает эта операция?
end;
procedure TForm1.Button2Click(Sender: TObject); //?
Begin
if (f = 0)
then begin
Edit1.Text:= '2';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '2';
end;
procedure TForm1.Button3Click(Sender: TObject);
Begin
if f = 0
then begin
Edit1.Text:= '3';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '3';
end;
procedure TForm1.Button4Click(Sender: TObject); //?
Begin
if f = 0 then
begin
Edit1.Text:= '4';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '4';
|
|
end;
procedure TForm1.Button5Click(Sender: TObject);
Begin
if (f = 0)
then begin
Edit1.Text:= '5';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '5';
end;
procedure TForm1.Button6Click(Sender: TObject);
Begin
if f = 0
then begin
Edit1.Text:= '6';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '6';
end;
procedure TForm1.Button7Click(Sender: TObject);
Begin
if f = 0
then begin
Edit1.Text:= '7';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '7';
end;
procedure TForm1.Button8Click(Sender: TObject);
Begin
if f = 0
then begin
Edit1.Text:= '8';
f:= 1;
end
else Edit1.Text:= Edit1.Text + '8';
end;
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); // 8. что делает эта процедура?
Begin
if Edit1.Text = '0' then
begin
Edit1.Text:= '0,';
f:= 1;
end;
if Pos(',',Edit1.Text) = 0 then // 9. что делает эта операция?
Edit1.Text:= Edit1.Text + ',';
end;
procedure DoOper; // что делает процедура?
Var
numb: real; //10. это число на индикаторе, поясните //что означает эта строка?
Begin
// 11. accum что содержит?
// 12. oper – это что?
// 13 а где находится операнд?.
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); // 14. что делает эта операция?
end;
procedure TForm1.ButtonPlusClick(Sender: TObject); // что делает процедура?
{ Подсказка: надо выполнить предыдущую операцию, вывести результат на индикатор, запомнить текущую операцию и установить режим ожидания первой цифры нового числа}
Begin
if f = 0
then oper:= 1
else begin // Подсказка: на индикаторе есть число
DoOper; // 15. что делает эта операция?
oper:=1; // 16. что делает эта операция?
f:=0;
end;
end;
procedure TForm1.ButtonMinusClick(Sender: TObject); // что делает процедура?
Begin
if f = 0
then oper:= 2
else begin
DoOper; // 17. что делает эта операция?
oper:=2; // 18. что делает эта операция?
f:=0;
end;
end;
// кнопка "="
procedure TForm1.ButtonEnterClick(Sender: TObject); // 19. что делает эта процедура?
Begin
if f = 0
then oper:= 0
else begin
DoOper; // 20. это что?
oper:=0;
f:=0;
end;
end;
// 21 кнопка "с" - что делает?
procedure TForm1.ButtonCClick(Sender: TObject);
Begin
Edit1.Text:= '0';
accum:= 0;
oper:= 0;
f:= 0;
end;
procedure TForm1.Edit1Change(Sender: TObject; var Key:Char);
// 22. что делает эта процедура?
Begin
Key:= Chr(0);
end;
procedure TForm1.FormCreate(Sender: TObject); // 23. что делает эта процедура?
Begin
oper:= 0;
end;
End.
Рекомендация
Дать указание студентам по завершению упражнения в Word вставить табличку, поместить в нее ответы на все указанные вопросы и предъявить их преподавателю.
Занятия 4.
На выполнение занятий 4 отводится 4ч.