Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Potenzberechnung mit Delphi (https://www.delphipraxis.net/139592-potenzberechnung-mit-delphi.html)

Optiplex 1. Sep 2009 06:10


Potenzberechnung mit Delphi
 
Moin zusammen.
Ich bin mal wieder zu blöd (bitte keine Antwort darauf). Ich suche eine Funktion mit der ich X hoch Y berechnen kann. X u. Y sind beides Integer Werte. Also was ich berechnen möchte ist z.B. 2 hoch 3 = 8, leider finde ich in Delphi keine Funktion dafür. Habe schon die Funktionen Power und IntPower getestet komme aber nicht auf den Ergebniswert 8. Kann mir jemand sagen wie man eine solche Gleichung mit Delphi lösen kann.

Danke und Gruß Dieter

Satty67 1. Sep 2009 06:29

Re: Potenzberechnung mit Delphi
 
Power(2, 3) gibt bei mir 8.

Wie hast Du die Funktion angewendet?

himitsu 1. Sep 2009 06:37

Re: Potenzberechnung mit Delphi
 
Zitat:

bitte keine Antwort darauf
OK, ich sag nix *zustimmendnick*

Delphi-Quellcode:
Function MySlowPower(i, e: Integer): Integer;
  Begin
    If e < 0 Then Raise Exception.Create('der Exponent ist mir zu klein');
    Result := 1;
    While e > 0 do Begin
      Result := Result * i;
      Dec(e);
    End;
  End;
:stupid:

BAMatze 1. Sep 2009 07:01

Re: Potenzberechnung mit Delphi
 
Ansonsten kann man sich das ja auch schön in einer kleinen rekursiven Funktion selber bauen.

Delphi-Quellcode:
function TForm1.Hoch(iBasis: Integer; iHoch: Integer) : integer;
begin
  if iHoch > 1 then result := iBasis * Hoch(iBasis, iHoch-1)
  else result := iBasis;
end;
Natürlich sollte man noch den Sonderfall z.B.("Hoch NULL")abfangen werden, dann sieht das ungefair so aus:

Delphi-Quellcode:
function TForm1.Hoch(iBasis: Integer; iHoch: Integer) : double;
begin
  if iHoch = 0 then result := 1
  else
    begin
      if iHoch >0 then
        begin
          if iHoch > 1 then result := iBasis * Hoch(iBasis, iHoch-1)
          else result := iBasis;
        end
      else
        begin
          if iHoch < -1 then result := 1/iBasis * Hoch(iBasis, iHoch+1)
          else result := 1/iBasis;
        end;
    end;
end;
Ist mal schnell geschrieben, hoffe hat sich kein Fehler eingeschlichen.

MfG
BAMatze

Edit: Es wurde dabei auch von ganzzahligen Potenzen ausgegangen. Für reale Potenzen sollte auch der Algorithmus angepasst werden.

Stevie 1. Sep 2009 07:32

Re: Potenzberechnung mit Delphi
 
Igitt Rekursion :shock: :lol:

Delphi-Quellcode:
function Power(x, y: Integer): Double;
var
  i: Integer;
begin
  Result := 1;
  if y >= 0 then
  begin
    for i := 1 to y do
    begin
      Result := Result * x;
    end;
  end
  else
  begin
    for i := -1 downto y do
    begin
      Result := Result / x;
    end;
  end;
end;

fajac 1. Sep 2009 08:16

Re: Potenzberechnung mit Delphi
 
Delphi-Quellcode:
function Hoch (ABasis, AExponent : Integer) : Integer;
begin
  result := Trunc (exp(AExponent * ln(ABasis)));
end;

Optiplex 1. Sep 2009 08:20

Re: Potenzberechnung mit Delphi
 
Erstmal danke an alle für die klasse Antworten, besonderst möchte ich denen Danken die sich gleich die Mühe gemacht haben eine eigene Function zu schreiben. Wenn alle Stricke reißen werde ich eine von diesen Functionen benutzen. Was ich allerdings nicht verstehe ist, dass ich mit den Funktionen Power und IntPower aus der Unit Math nicht ans Ziel gekommen bin.

Zitat:

Zitat von Satty67
Power(2, 3) gibt bei mir 8.

Wie hast Du die Funktion angewendet?

Na, wie man eine Funktion so anwendet
Delphi-Quellcode:
procedure Irgendwas;
var Ergebnis:real;
begin
  Ergebnis:=Power(2,3);
end;
Im Ergebnis steht dann bei mir 3,653xxxxxxxe+3215 oder sowas aber nicht 8 und das ist was ich nicht verstehe, was mache ich falsch?

Gruß Dieter

Sharky 1. Sep 2009 08:23

Re: Potenzberechnung mit Delphi
 
Eventuell weill Du einen falschen Datentyp für das Ergebniss verwendest?
Versuche mal anstelle von real einen Integertype (int, cardinal),

Optiplex 1. Sep 2009 08:28

Re: Potenzberechnung mit Delphi
 
Hallo Sharky,
Zitat:

Zitat von Sharky
Eventuell weill Du einen falschen Datentyp für das Ergebniss verwendest?
Versuche mal anstelle von real einen Integertype (int, cardinal),

Laut Hilfe ist der Datentyp Extended was einem Real-Wert entspricht

Gruß Dieter

himitsu 1. Sep 2009 08:30

Re: Potenzberechnung mit Delphi
 
Zitat:

Delphi-Quellcode:
procedure Irgendwas;
var Ergebnis:real;
begin
  Ergebnis:=Power(2,3);
end;

Ergebnis wird nicht verwendet und daher vom Compiler entfernt ... heißt, die Variable gibt es nach der Zuweisung vermutlich nicht mehr (Codeoptimierungen halt) und der Debugger ließt was "Falsches" aus :stupid:

wenn schon "sinnlose" Funktionen, dann bitte die ungenutzte Variable auch wenigstens noch mal umsonst verwenden :lol:
Delphi-Quellcode:
procedure Irgendwas;
var Ergebnis: real;
begin
  Ergebnis := Power(2, 3);
  if Ergebnis = 8 then ;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz