![]() |
Probleme mit Funktionen
Ich möchte einen ganz normalen Taschenrechner programmieren, der die Standartfunktionen wie Addition usw kann, allerdings auch Wurzel, Logarithmus usw.
Nun habe ich versucht Potenzieren in einer Funktion zu schreiben, allerdings bekomme ich immer wieder die selben Fehler :(
Delphi-Quellcode:
Wenn auf den Button BPotenz geklickt wird, sollen die beiden Zahlen a und b aus den Edit-Feldern EA und EB in der Funktion Pot benutzt werden und danach in c gespeichert werden. Dies soll dann im Edit-Feld EC erscheinen, allerdings funktioniert es nicht, denn es kommen folgende Meldungen (Delphi-Hilfe nützt nichts und per Suche finde ich nur Funktionen, die klappen^^):
[...]
procedure BPotenzClick(Sender: TObject); private { Private-Deklarationen } function Pot(a, b: Integer): Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function Pot(a, b: Integer): Integer; var i: Integer; begin For i := 1 to b do begin Result := a*a; end; end; procedure TForm1.BPotenzClick(Sender: TObject); var a, b, c: Integer; begin a := StrToInt(EA.Text); b := StrToInt(EB.Text); c := Pot(a, b); EC.Text := IntToStr(c); end; [Warnung] UTaschenrechner.pas(76): Rückgabewert der Funktion 'Pot' könnte undefiniert sein [Fehler] UTaschenrechner.pas(55): Ungenügende Forward- oder External-Deklaration: 'TForm1.Pot' [Fataler Fehler] Taschenrechner.dpr(5): Verwendete Unit 'UTaschenrechner.pas' kann nicht compiliert werden Bitte Hilfe, warum funzt das net? :wall: |
Re: Probleme mit Funktionen
Delphi-Quellcode:
Edit:Alternativ kannst du auch die funktion power nehmen
function TForm1.Pot(a, b: Integer): Integer;
var i: Integer; begin For i := 1 to b do begin Result := a*a; end; end; |
Re: Probleme mit Funktionen
aber ich wollte das ja selber schreiben und auch lernen, wie Funktionen funktionieren, aber es geht ja nicht xD warum nicht?
|
Re: Probleme mit Funktionen
Zitat:
|
Re: Probleme mit Funktionen
Nebenbei gesagt ist in der Funktion ein Fehler.
Wenn man
Delphi-Quellcode:
aufruft, wäre das doch nach dieser Funktion:
pot(2,3);
2*2*2*2 Das wäre aber 2^4. Oder sehe ich da was falsch? //Edit: Auch falsch. Es käme bei der Lösung immer a^2 raus, da in der Schleife immer result := steht: Auf jeden Fall ein Fehler! |
Re: Probleme mit Funktionen
Du hast die Funktion in der form1 deklariert und rufst sie ein der unit auf, das geht nicht entweder so:
Delphi-Quellcode:
oder so
procedure BPotenzClick(Sender: TObject);
private { Private-Deklarationen } public { Public-Deklarationen } end; function Pot(a, b: Integer): Integer; var Form1: TForm1; implementation {$R *.dfm} function Pot(a, b: Integer): Integer; var i: Integer; begin For i := 1 to b do begin Result := a*a; end; end; procedure TForm1.BPotenzClick(Sender: TObject); var a, b, c: Integer; begin a := StrToInt(EA.Text); b := StrToInt(EB.Text); c := Pot(a, b); EC.Text := IntToStr(c); end;
Delphi-Quellcode:
procedure BPotenzClick(Sender: TObject);
private { Private-Deklarationen } function Pot(a, b: Integer): Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.Pot(a, b: Integer): Integer; var i: Integer; begin For i := 1 to b do begin Result := a*a; end; end; procedure TForm1.BPotenzClick(Sender: TObject); var a, b, c: Integer; begin a := StrToInt(EA.Text); b := StrToInt(EB.Text); c := Pot(a, b); EC.Text := IntToStr(c); end; |
Re: Probleme mit Funktionen
arghs nur wegen dem vergessenen TForm1. thx =)
vielen Dank für die schnellen Antworten und für den Hinweis auf den Fehler, der allerdings nicht der einzige ist, denn Result := a*a; ist natürlich auch quatsch |
Re: Probleme mit Funktionen
ja, in dieser form liefert pot(a,b) nämlich nichts anderes als a²....
Komisch dass das noch niemand gemerkt hat... |
Re: Probleme mit Funktionen
habe das ganze nun so gelöst:
Delphi-Quellcode:
und es funktioniert^^
function TForm1.Pot(a: Real; b: Integer): Real;
var i: Integer; begin Result := 1; If b > 0 then begin For i := 1 to b do begin Result := Result*a; end; end else begin For i := -1 downto b do begin Result := Result*a; end; Result := 1 / Result; end; end; vielen Dank nochmal für die schnellen Antworten und Tipps =) |
Re: Probleme mit Funktionen
Und wenn du wissen möchtest wie es deutlich schneller geht:
Delphi-Quellcode:
Voraussetzung: a > 0
function TForm1.Pot(a: Real; b: Integer): Real;
begin result := exp(b*ln(a)); end; b darf hierbei sogar Real sein ;). Gruss, Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz