Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Potenz einer Zahl (https://www.delphipraxis.net/107477-potenz-einer-zahl.html)

BullsEye 28. Jan 2008 14:10


Potenz einer Zahl
 
Zitat:

Die Potenz einer Zahl (Basis Exponent) soll berechnen werden. Eingegeben wird
die Basis und der Exponent.
Kann mir da vllt einer Helfen? Das Prob ist, das ich so wirklich GAR KEINE Ahnung hab wie ich das anstellen soll. Soweit ich weiß hat das auch was mit hoch "n" (n= beliebige Zahl) zu tun und ich weiß auch net wie man das Prob lösen könnte. also es gibt ja auf der Tastatur ² und ³ aber wenn ich nun "hoch 7 z.B." hab.

Eine Lösung wäre ja vllt ne extra Editfeld.

Das ganze soll zu dem mit einer FOR Schleife gelöst sein. Das ist eine Hausaufgabe meiner Klassen. Die anderen 6 Aufgaben hab ich sonst auch schon fertig.

Danke nu schonma

sirius 28. Jan 2008 14:13

Re: Potenz einer Zahl
 
Ich nehme an, ihr arvbeitet komplett mit natürlichen Zahlen (wegen der for-Schleife).
Du hast zwei Edit felder.
Und was würdest du jetzt auf dem Papier machen, wenn du 3^6 rechnest? Richtig 3*3*3*3*3*3! Und das packkst du jetzt in eine For-Schleife.

Matze 28. Jan 2008 14:15

Re: Potenz einer Zahl
 
Hallo,

überlege doch mal an einfachen Beispielen, wie das gehen könnte.

Beispiele:

2^3 = 2*2*2
5^6 = 5*5*5*5*5*5

Du musst folglich in einer Schleife, die von 1 bis zur Potenz läuft, die Basis an deine Rückgabevariable multiplizieren.

Grüße

Klaus01 28. Jan 2008 14:15

Re: Potenz einer Zahl
 
Das sollte ungefähr so ausssehen:

Delphi-Quellcode:
var
  i,zahl, exp : Integer;

if exp = 0 then
  zahl := 1
else
  if exp > 1 then
    for i := 2 to exp do
      zahl:= zahl * zahl:
Grüße
Klaus

Neutral General 28. Jan 2008 14:18

Re: Potenz einer Zahl
 
Hi,

:arrow:

function Potenz(Basis, Exponent: Integer): Int64;
var i: Integer;
begin
Result := 1;
for i:= 1 to Exponent do
Result := Result*Basis;
end;


Das wäre die Funktion ohne zu überlegen. Ansonsten würde ich dir empfehlen die ersten 2-3 Posts nochmal zu lesen und selbst drauf zu kommen ;)

Gruß
Neutral General

RavenIV 28. Jan 2008 15:31

Re: Potenz einer Zahl
 
In Delphi gibt es ja die Funktion Power.
Da Du diese aber nicht verwenden darfst/sollst, musst Du es selber bauen.
Die Hinweise meiner Vorredner sind absolut richtig.

Die Funktion Power in Delphi macht auch nix anderes, ist jedoch in Assemblercode hinterlegt.
Somit könnte sie schneller sein, als selbstgeschriebener Delphi-Code.
Vermutlich ist der Assembler-Teil auch stark optimiert.

fLaSh11 28. Jan 2008 15:41

Re: Potenz einer Zahl
 
Falls du aber auf Delphi-Code setzt, gibt es Neutral Generals Code auch in rekursiver Form (evtl. schneller):

Delphi-Quellcode:
function Potenz(Basis, Exponent: Integer): Int64;
begin
  if Exponent = 0 then
    Exit
  else
    Result := Basis * Potenz(Basis, Exponent - 1);
end;
(Nicht für negative Exponenten!)

RavenIV 28. Jan 2008 15:45

Re: Potenz einer Zahl
 
Zitat:

Zitat von fLaSh11
Falls du aber auf Delphi-Code setzt, gibt es Neutral Generals Code auch in rekursiver Form (evtl. schneller):

Rekursion ist hier natürlich schöner.
Aber die Vorgabe ist, dass er es mit einer for-Schleife machen muss.

Ausserdem wird die Rekursion in dem Beispiel langsamer sein, als die Schleifen-Variante.
Vor allem bei grossen Exponenten.

DeddyH 28. Jan 2008 15:45

Re: Potenz einer Zahl
 
Kleine Korrektur:
Delphi-Quellcode:
if Exponent = 0 then
  Result := 1

RavenIV 28. Jan 2008 15:48

Re: Potenz einer Zahl
 
Zitat:

Zitat von DeddyH
Kleine Korrektur:
Delphi-Quellcode:
if Exponent = 0 then
  Result := 1

Da muss noch mehr korrigiert werden.
So würde IMMER 1 rauskommen, weil am Ende der Rekursion der Exponent auf 0 steht.

Aber ich denke, dass dies nur zur Veranschaulichung gedacht war, dass man es auch rekursiv machen kann.

Dax 28. Jan 2008 16:01

Re: Potenz einer Zahl
 
Zitat:

Zitat von RavenIV
Da muss noch mehr korrigiert werden.
So würde IMMER 1 rauskommen, weil am Ende der Rekursion der Exponent auf 0 steht.

Eigentlich nicht. In höheren Ebenen wird sukzessive mit Basis multipliziert.

RavenIV 28. Jan 2008 16:08

Re: Potenz einer Zahl
 
Zitat:

Zitat von Dax
Zitat:

Zitat von RavenIV
Da muss noch mehr korrigiert werden.
So würde IMMER 1 rauskommen, weil am Ende der Rekursion der Exponent auf 0 steht.

Eigentlich nicht. In höheren Ebenen wird sukzessive mit Basis multipliziert.

Du hast Recht.
Ist doch schon ne Weile her, dass ich effektiv mit Rekursion gearbeitet habe.

Ultimator 28. Jan 2008 16:09

Re: Potenz einer Zahl
 
Und was ist, wenn man 5^(-1/2) berechnen soll? Das geht doch mit keiner Schleife, oder?

fLaSh11 28. Jan 2008 16:13

Re: Potenz einer Zahl
 
Doch, geht genauso!
Bei Gleitkommazahlen als Exponenten wirds mit der Methode schwierig. Nutze hier Power. Mit Negativen ist es auch einfach. Zu Beginn deiner Potenzier-Funktion den Kehrwert der Basis bilden und dann normal weiterrechnen.

RavenIV 28. Jan 2008 16:15

Re: Potenz einer Zahl
 
Zitat:

Zitat von Ultimator
Und was ist, wenn man 5^(-1/2) berechnen soll? Das geht doch mit keiner Schleife, oder?

Ist das überhaupt eine gültige Formel.

x^(1/2) wäre ja Wurzel(x).
aber x^(-1/2)?

Also der Windows-Taschenrechner (in wissenschaftlicher Ansicht) akzeptiert das nicht.

Dax 28. Jan 2008 16:17

Re: Potenz einer Zahl
 
Zitat:

Zitat von RavenIV
x^(1/2) wäre ja Wurzel(x).
aber x^(-1/2)?

Das wäre 1 / x^0.5

Khabarakh 28. Jan 2008 16:26

Re: Potenz einer Zahl
 
Zitat:

Zitat von RavenIV
Also der Windows-Taschenrechner (in wissenschaftlicher Ansicht) akzeptiert das nicht.

Natürlich tut er das, so abartig schlecht ist er nun auch wieder nicht...

... oder ist das ein Vista-Feature :mrgreen: ?

Medium 29. Jan 2008 01:35

Re: Potenz einer Zahl
 
x^k = exp(k*ln(x))

Und nun ratet mal, was die Funktion Power() macht. Für ganzzahlige Exponenten, positive und negative, gibts eine sehr hübsche kleine handassemblierte Funktion. Die ist, sinnigerweise, iterativ.

dominikkv 29. Jan 2008 06:57

Re: Potenz einer Zahl
 
Ist zwar alles schön und gut aber er hat die Hausaufgabe das mit einer Schleife zu lösen.
Dass kann man natürlich mit Power etc machen, ist aber nicht Sinn der Übung.

Wie gasagt, selbst nachdenken oder bei Neutral General spicken^^

Matze89 26. Jun 2008 10:11

Re: Potenz einer Zahl
 
[ function Potenz(Basis, Exponent: Integer): Int64;
begin
if Exponent = 0 then
Exit
else
Result := Basis * Potenz(Basis, Exponent - 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Basis,Exponent,Ergebnis : Integer;
begin
Basis:= StrToInt(Edit1.Text);
Exponent:= StrToInt(Edit2.Text);
Ergebnis:= IntToStr(Potenz);

end;

end.
]

kann mir aml jem. sagen, was hier falsch ist? ich möchte, das ich eine Zahl eingebeben, und dann will ich die Potenz berechnen.

DeddyH 26. Jun 2008 10:24

Re: Potenz einer Zahl
 
Zitat:

Delphi-Quellcode:
 Ergebnis:= IntToStr(Potenz);

Schau Dir diese Zeile nochmal in Ruhe an.

Matze89 26. Jun 2008 10:32

Re: Potenz einer Zahl
 
Delpji zeigt an, das nicht genügend wirkliche Parameter vorhanden sind. Aber irgendwie hilft mir das nicht weiter

rollstuhlfahrer 26. Jun 2008 10:36

Re: Potenz einer Zahl
 
HI,

1. "DELPHI"-Tags gibts auch, bitte zur lesbarkeit editieren.
2. ----------------

Stell dir doch mal deinen Aufruf un Ruhe vor. Du hast eine Funktion, die 2 Werte benötigt. (Form: Funktion(1, 2)) :!:
Dann machst du das ganze mal schrittweise, also Wert von Funktion in eine Variable und die dann in String konvertieren.
So solltest du auf den Fehler kommen

Bernhard :wink:

EDIT: Mal ne Frage um auf die Lösung zu kommen: Wie soll die Funktion eigentlich erfahren, welches jetzt Basis und Exponent sind?

DeddyH 26. Jun 2008 10:37

Re: Potenz einer Zahl
 
Die Signatur lautet ja
Delphi-Quellcode:
function Potenz(Basis, Exponent: Integer): Int64;
D.h., es werden 2 Parameter erwartet: Basis und Exponent. Diese beiden musst Du beim Aufruf auch angeben.

Matze89 26. Jun 2008 10:45

Re: Potenz einer Zahl
 
Thx dieses Problem hab ich jetz beseitigt. aber irgendwie is noch was anderes falsch, da ich keine richtigen Ergebnisse rausbekomme.

DeddyH 26. Jun 2008 10:46

Re: Potenz einer Zahl
 
Zeig mal ein Beispiel.

Matze89 26. Jun 2008 10:52

Re: Potenz einer Zahl
 
zum beispiel hab ich die Basis 3 eingegeben, den Exponenten 2 und kam auf das Ergebniss von 169787972918927484
aber bei Basis 2 und Exponent 3 ging es irgendwie, da kamm ich auch auf 8

Sharky 26. Jun 2008 10:58

Re: Potenz einer Zahl
 
Hai Matze89,

irgendwie kann ich bei deiner Frage keinen Zusammenhang zu dem ursprünglichen Thread erkennen.

DeddyH 26. Jun 2008 11:04

Re: Potenz einer Zahl
 
Zitat:

Zitat von sharky
Hai Matze89,

irgendwie kann ich bei deiner Frage keinen Zusammenhang zu dem ursprünglichen Thread erkennen.

Öhh, wieso? :gruebel: Es geht doch immer noch um eine Funktion zur Berechnung der Potenz.

Matze89 26. Jun 2008 11:08

Re: Potenz einer Zahl
 
ich will ein Programm erstellen, wo ich eine Zahl eingebe,( zum Beispiel 3) sie mit einer eingegebenen Zahl potenziere( zum beispiel 4) und dann das Ergebniss ausgegeben wird( dies wäre bei dem Beispiel 81)

DeddyH 26. Jun 2008 11:10

Re: Potenz einer Zahl
 
Zitat:

Delphi-Quellcode:
 if Exponent = 0 then
  Exit

Was soll denn hier zurückgegeben werden? Tipp: Eine Zahl hoch 0 ergibt 1.

leddl 26. Jun 2008 11:11

Re: Potenz einer Zahl
 
:gruebel: Und warum dann jetzt unbedingt die rekursive Variante, wenn Delphi doch Delphi-Referenz durchsuchenPower mitliefert? :gruebel:

DeddyH 26. Jun 2008 11:13

Re: Potenz einer Zahl
 
Wenn ich das richtig verstanden habe, geht es ja gerade um eine eigene Funktion.

leddl 26. Jun 2008 11:16

Re: Potenz einer Zahl
 
Zitat:

Zitat von DeddyH
Wenn ich das richtig verstanden habe, geht es ja gerade um eine eigene Funktion.

Äääähm, Matze89 ist nicht der ursprüngliche Threadersteller... Und wenn er schon einfach nur eine hier gepostete Funktion abschreiben will, dann kann er doch auch gleich Bordmittel benutzen, oder? :zwinker:

Sharky 26. Jun 2008 17:39

Re: Potenz einer Zahl
 
Zitat:

Zitat von DeddyH
[...]Öhh, wieso? :gruebel: Es geht doch immer noch um eine Funktion zur Berechnung der Potenz.

Sorry,

mein Fehler. Ich habe da etwas falsch gelesen.

Matze89 26. Jun 2008 18:08

Re: Potenz einer Zahl
 
[c function Power(basis, Exponent: Extended):Extended;
begin
power(basis,Exponent);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Basis,Exponent,Ergebnis : Integer;
begin
Basis:= StrToInt(Edit1.Text);
Exponent:= StrToInt(Edit2.Text);
Edit3.Text:= IntToStr(Power(basis, Exponent));

end;

end.


ich hab es jetz mal mit Power probiert, komme da aber auch nicht weiter.

DeddyH 26. Jun 2008 18:11

Re: Potenz einer Zahl
 
Sry, aber vielleicht solltest Du Dich nochmal mit den Grundlagen vertraut machen (insbesondere was Funktionen angeht).

Macci 26. Jun 2008 18:28

Re: Potenz einer Zahl
 
So geht's

Delphi-Quellcode:
function IntPower(X: Extended; I: Integer): Extended;
var
  Y: Integer;
begin
  Y := Abs(I);
  Result := 1.0;
  while Y > 0 do begin
    while not Odd(Y) do
    begin
      Y := Y shr 1;
      X := X * X
    end;
    Dec(Y);
    Result := Result * X
  end;
  if I < 0 then Result := 1.0 / Result
end;
(aus den Delphi-Dateien)

rollstuhlfahrer 26. Jun 2008 22:48

Re: Potenz einer Zahl
 
Zitat:

Zitat von RavenIV
Aber die Vorgabe ist, dass er es mit einer for-Schleife machen muss.

Wo ist denn die For-Schleife hinverschwunden? (Auch wenn die Lösung phantastisch funktionieren sollte)


Zitat:

Zitat von Matze89
Delphi-Quellcode:
{ function Power(basis, Exponent: Extended):Extended;
begin
  power(basis,Exponent);
end;}

procedure TForm1.Button1Click(Sender: TObject);
var Basis,Exponent,Ergebnis : Integer;
begin
  Basis:= StrToInt(Edit1.Text);
 Exponent:= StrToInt(Edit2.Text);
// Edit3.Text:= IntToStr(Power(basis, Exponent));
  Edit3.Text := FloatToStr(Power(basis, exponent));

end;

So dürfte es dann gehen


Zitat:

Zitat von Matze89
zum beispiel hab ich die Basis 3 eingegeben, den Exponenten 2 und kam auf das Ergebniss von 169787972918927484
aber bei Basis 2 und Exponent 3 ging es irgendwie, da kamm ich auch auf 8

Schon mal die Schleife debuggt? Die Zahl sieht aus, als ob sie die Obergrenze von Int64 wäre.

Bernhard

Matze89 28. Jun 2008 22:38

Re: Potenz einer Zahl
 
Hab Schleife noch nich debuggt.
thx, habs jetz aba och hinbekommen mit der Potenzrechnung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr.

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