Delphi 指数计算器

Delphi Exponent Calculator

抱歉我的英语不好,因为我来自德国。

我构建了一个程序:http://i.epvpimg.com/I0xie.png

我想要一个指数计算器(我在学校学习考试),但是我有一个问题...

如果我输入数字 "Zahl"(德语中的意思是 "number")。比如:Number= "2",那我就做exponent = "1"

通常我应该得到结果 2 但我得到的是 4,为什么?

有什么问题?

这是我的代码:

unit unit_oberflaeche;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, unit_inhalt;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  rechner: Texponentrechner;

implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.FormCreate(Sender: TObject);
begin
    rechner := Texponentrechner.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
VAR i, LVexponent, LVzahl, result: INTEGER;
     BEGIN
     LVexponent := StrToInt(Edit2.Text);
     LVzahl     := StrToInt(Edit1.Text);
     rechner.set_exponent(LVexponent);
     rechner.set_zahl(LVzahl);
         FOR i := 1 TO LVexponent DO
             BEGIN
               result := result * LVzahl

             end;
         //result := LVzahl;
     Panel1.Caption := IntToStr(result);
     end;

end.

这是另一部分:

unit unit_inhalt;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;


TYPE
  Texponentrechner = class
  private
    { private declarations }
    Fexponent : INTEGER;
    Fzahl     : INTEGER;

  public
    { public declarations }

    procedure set_exponent   (WPexponent:INTEGER);
    procedure set_zahl       (WPzahl:INTEGER);

    function  berechne_betrag():INTEGER;
    end;




implementation

procedure Texponentrechner.set_exponent(WPexponent:INTEGER);
 BEGIN
      Fexponent := WPexponent;
end;

procedure Texponentrechner.set_zahl(WPzahl:INTEGER);
 BEGIN
      Fzahl := WPzahl;
 end;

function Texponentrechner.berechne_betrag():INTEGER;
 BEGIN
      result := Fzahl * Fzahl;
 end;

end.

我假设你的指数计算必须在 Texponentrechner class 中完成。首先,您的计算是错误的,因为它 returns 您的数字乘以自身,其次,您从一开始就没有调用该函数。

所以您的 berechne_betrag 函数应该如下所示:

function Texponentrechner.berechne_betrag(): integer;
var i: integer;
begin
  Result := 1;
  for i := 1 to Fexponent do
    Result := Result * Fzahl;
end;

那么你实际上应该调用那个函数来得到结果

rechner.set_exponent(LVexponent);
rechner.set_zahl(LVzahl);
result := rechner.berechne_betrag;
Panel1.Caption := IntToStr(result);

您还在 FormCreate 中创建了 rechner 对象实例,但您从不释放它,因此造成了内存泄漏。使用完对象后,您应该调用 rechner.Free。由于您已将其设为在 FormCreate 中创建的全局变量,因此发布它的适当位置将在 FormDestroy

但更好的做法是使其成为 Button1Click 方法的本地方法。

...
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var 
  LVexponent, LVzahl, result: integer;
  rechner: Texponentrechner;
begin
  rechner := Texponentrechner.Create;
  try
    LVexponent := StrToInt(Edit2.Text);
    LVzahl     := StrToInt(Edit1.Text);
    rechner.set_exponent(LVexponent);
    rechner.set_zahl(LVzahl);
    result := rechner.berechne_betrag;
    Panel1.Caption := IntToStr(result);
  finally
    rechner.Free;
  end;
end;

end.