Пример 3. Калькулятор

 

В этом примере мы создадим приложение-калькулятор, в котором можно выполнять арифметические действия над целыми числами, а также производить следующая вычисления:
 

,

где ,  и  – введённые числа.
 

В приложении должно быть:

-        три метки (Label)

-        два поля редактирования (Edit) для ввода чисел  и , по умолчанию в полях должны быть нули

-        шесть кнопок («+», «-», «*», «/», «», «Выход»)

-        при нажатии оной из кнопок (кроме кнопки «Выход») должно отображаться диалоговое окно с результатом действия

-        при нажатии на кнопку «Выход» приложение должно завершать свою работу

 

Расположите компоненты как показано на рисунке и измените их свойства:

 

 

Вычисление результатов арифметических операций можно организовать разными способами. В простейшем случае можно написать команду прямо в процедуре по обработке события, связанного с нажатием соответствующей кнопки, а можно написать отдельную процедуру или функцию для нахождения искомой величины, а затем вызвать её из тела процедуры, принадлежащей соответствующей кнопке.

 

В тексте программы для нахождения суммы написаны и процедура и функция, но используется только процедура, а команда, вызывающая функцию, и команда, вычисляющая сумму без использования подпрограмм, закомментированы.

 

Текст файла Unit1.pas

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

       Form1 : TForm1;

  x, y, res1 : integer;

        res2 : real;

 

implementation

 

{$R *.dfm}

 

// процедура для нахождения суммы двух чисел

procedure Summa(a,b : integer; var c : integer);

begin

  c := a+b;

end;

 

// функция для нахождения суммы двух чисел

function Sum(a,b : integer): integer;

begin

  sum := a+b;

end;

 

// рекурсивная функция для нахождения факториала

function factorial(x : integer): integer;

begin

  if x=1 then factorial := 1

         else factorial := x*factorial(x-1);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  x := StrToInt(Edit1.Text);
  y := StrToInt(Edit2.Text);

  Summa(x,y,res1);

  //res1 := x + y;

  //res1 := Sum(x,y);

  ShowMessagePos(IntToStr(res1),300,200);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  x := StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);

  res1 := x - y;

 ShowMessagePos(IntToStr(res1),300,200);

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

  x := StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);

  res1 := x * y;

  ShowMessagePos(IntToStr(res1),300,200);

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

   x := StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);

   res2 := x / y;

   ShowMessagePos(FloatToStr(res2),300,200);

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

  x := StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);

  res1 := Sum(x,y);

  ShowMessagePos(FloatToStr(factorial(res1)),300,200);

end;

 

end.