![]() |
Potenz einer Zahl
Zitat:
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 |
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. |
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 |
Re: Potenz einer Zahl
Das sollte ungefähr so ausssehen:
Delphi-Quellcode:
Grüße
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: Klaus |
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 |
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. |
Re: Potenz einer Zahl
Falls du aber auf Delphi-Code setzt, gibt es Neutral Generals Code auch in rekursiver Form (evtl. schneller):
Delphi-Quellcode:
(Nicht für negative Exponenten!)
function Potenz(Basis, Exponent: Integer): Int64;
begin if Exponent = 0 then Exit else Result := Basis * Potenz(Basis, Exponent - 1); end; |
Re: Potenz einer Zahl
Zitat:
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. |
Re: Potenz einer Zahl
Kleine Korrektur:
Delphi-Quellcode:
if Exponent = 0 then
Result := 1 |
Re: Potenz einer Zahl
Zitat:
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. |
Re: Potenz einer Zahl
Zitat:
|
Re: Potenz einer Zahl
Zitat:
Ist doch schon ne Weile her, dass ich effektiv mit Rekursion gearbeitet habe. |
Re: Potenz einer Zahl
Und was ist, wenn man 5^(-1/2) berechnen soll? Das geht doch mit keiner Schleife, oder?
|
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. |
Re: Potenz einer Zahl
Zitat:
x^(1/2) wäre ja Wurzel(x). aber x^(-1/2)? Also der Windows-Taschenrechner (in wissenschaftlicher Ansicht) akzeptiert das nicht. |
Re: Potenz einer Zahl
Zitat:
|
Re: Potenz einer Zahl
Zitat:
... oder ist das ein Vista-Feature :mrgreen: ? |
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. |
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^^ |
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. |
Re: Potenz einer Zahl
Zitat:
|
Re: Potenz einer Zahl
Delpji zeigt an, das nicht genügend wirkliche Parameter vorhanden sind. Aber irgendwie hilft mir das nicht weiter
|
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? |
Re: Potenz einer Zahl
Die Signatur lautet ja
Delphi-Quellcode:
D.h., es werden 2 Parameter erwartet: Basis und Exponent. Diese beiden musst Du beim Aufruf auch angeben.
function Potenz(Basis, Exponent: Integer): Int64;
|
Re: Potenz einer Zahl
Thx dieses Problem hab ich jetz beseitigt. aber irgendwie is noch was anderes falsch, da ich keine richtigen Ergebnisse rausbekomme.
|
Re: Potenz einer Zahl
Zeig mal ein Beispiel.
|
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 |
Re: Potenz einer Zahl
Hai Matze89,
irgendwie kann ich bei deiner Frage keinen Zusammenhang zu dem ursprünglichen Thread erkennen. |
Re: Potenz einer Zahl
Zitat:
|
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)
|
Re: Potenz einer Zahl
Zitat:
|
Re: Potenz einer Zahl
:gruebel: Und warum dann jetzt unbedingt die rekursive Variante, wenn Delphi doch
![]() |
Re: Potenz einer Zahl
Wenn ich das richtig verstanden habe, geht es ja gerade um eine eigene Funktion.
|
Re: Potenz einer Zahl
Zitat:
|
Re: Potenz einer Zahl
Zitat:
mein Fehler. Ich habe da etwas falsch gelesen. |
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. |
Re: Potenz einer Zahl
Sry, aber vielleicht solltest Du Dich nochmal mit den Grundlagen vertraut machen (insbesondere was Funktionen angeht).
|
Re: Potenz einer Zahl
So geht's
Delphi-Quellcode:
(aus den Delphi-Dateien)
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; |
Re: Potenz einer Zahl
Zitat:
Zitat:
Zitat:
Bernhard |
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 22:00 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 by Thomas Breitkreuz