2015-05-26 18 views
1

對不起,我是來自德國的英語。德爾斐指數計算器

我建了一個計劃: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. 
+0

'result'變量沒有被初始化(通常情況下它被編譯器初始化爲0,但你不能確定);不要用除英語之外的其他語言命名變量等:可能你的程序會以某種方式使用不懂德語的人,但幾乎所有程序員都懂英語。你的意思是「Exponent」是e^n(e = 2.71828)? – Abelisto

回答

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); 

而且要在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.