德尔福指数计算器

时间:2015-05-26 20:12:57

标签: lazarus

对不起我的英语,因为我来自德国。

我制作了一个程序:http://i.epvpimg.com/I0xie.png

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

如果我输入数字“Zahl”(意思是德语中的“数字”)。例如: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.

1 个答案:

答案 0 :(得分:0)

我假设您的指数计算必须在Texponentrechner类中完成。首先,你的计算是错误的,因为它返回你的数字乘以它自己,第二,你从来没有调用过那个函数。

因此,您的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);

此外,您正在rechner中创建FormCreate对象实例,但您永远不会释放它,因此您正在创建内存泄漏。完成使用对象后,应该调用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.