Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Potenzieren
oktober22 - So 12.06.05 19:08
Titel: Potenzieren
So ich habe nun den Crashkurs gemacht und ich muss sgn er hat mir schon geholfen doch 1 frage hab ich schon:
ich will einen button so programmieren das beim drücken eine zahl potenziert wird
was hab ich da flasch gemacht?
also ausschnitt aus meinem quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var x, y, z: Real; begin x := StrtoFloat(edit1.text); y := StrToFloat(edit2.text); z := x^y; label1.caption := FloatToStr(z); end; |
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
delfiphan - So 12.06.05 19:09
Potenzieren geht über Power(basis, exponent). Und du musst die unit Math via uses einbinden.
Christian S. - So 12.06.05 19:10
Hallo!
Potenzieren in Delphi funktioniert nicht mit ^, sondern über die Funktion power. Einfach mal in der Delphi-Hilfe gucken, da steht drin, wie man die benutzt. :-)
Grüße
Christian
//edit: Zu langsam :motz:
Delete - Sa 18.02.06 14:44
Hallo, bin neu hier und stecke gerade noch in den Anfängen des Programmierens mit Delphi :)
Hab mal ne Frage zum Potenzieren:
Die Aufgabe ist es ein Programm zum Potenzieren zu schreiben, bei welchem folgende Standardfunktion als Vorlage gilt:
Exp(a * Ln(b))
Ich habe mir folgendes überlegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Function Potenz(Basis, Exponent: Extended): Extended; begin if Exponent = 0.0 then Result := 1.0 else if (Basis = 0.0) and (Exponent > 0.0) then Result := 0.0 else if Exponent = 2 then Result := Sqr(Basis) else Result := Exp(Ln(Basis) * Exponent );
end;
procedure TForm1.Button1Click(Sender: TObject); var eBasis, eExponent, eResult: Extended; begin eBasis := strtofloat(edit1.text); eExponent := strtofloat(edit2.text); eResult := Potenz(eBasis, eExponent); edit3.Text := floattostr(eResult); end;
end. |
Jedoch besteht nun das Problem, dass ich bei "negativer Basis" und "ungeradem Exponenten" eine Fehlermeldung bekomme.
Habe mir schon überlegt dies eine zusätzliche if-then-Anweisung auszugleichen, indem man bspw.
if (Basis < 0.0) and (Exponent mod 2 = 1) then [...]
jedoch lässt sich das anscheinend mit "Extended" nicht vereinbaren.
Kann mir vllt jemand weiterhelfen? (Bitte nicht mit dem Power-Befehl... - da die Aufgabe auch nach Aufgabenstellung gelöst werden soll)
Gruß, Tino
AXMD - Sa 18.02.06 15:52
Tino the Rino hat folgendes geschrieben: |
Habe mir schon überlegt dies eine zusätzliche if-then-Anweisung auszugleichen, indem man bspw. if (Basis < 0.0) and (Exponent mod 2 = 1) then [...]
jedoch lässt sich das anscheinend mit "Extended" nicht vereinbaren. |
Modulo funktioniert auch nicht mit Gleitkommazahlen.
AXMD
Jetstream - Sa 18.02.06 16:40
negative zahl hoch gebrochener exponent -> imaginäre zahl.
das geht nicht.
negative zahl hoch ungerader exponent -> negative zahl.
müsste funktionieren.
Delete - Sa 18.02.06 19:04
| Zitat: |
| Modulo funktioniert auch nicht mit Gleitkommazahlen. |
Ja, das ist mir beim Anzeigen der Fehlermeldung auch schon bewusst geworden.
Aber wie kann ich denn jetzt nun eine if-then-Anweisung vereinbaren, das das Programm auch Lösungen ermittelt, wenn ich "negative Zahlen" und "ungeraden Exponenten" hab?
Also, das halt wie schon gesagt ne negative Zahl rauskommt?
AXMD - Sa 18.02.06 19:10
Es geht nicht um ungerade, sondern um gebrochene Exponenten :roll: . (-2)^3 = -8
AXMD
Delete - Sa 18.02.06 19:39
AXMD hat folgendes geschrieben: |
| Es geht nicht um ungerade, sondern um gebrochene Exponenten :roll: . (-2)^3 = -8 |
Ja, schön, dass du so ein Genie bist, aber das Programm rechnet aber die "-8" trotzdem nicht aus - und das "(-2)^3 = -8" ist, weiß ich auch noch...
Ich will einfach nur wissen wie ich dem PC sagen kann, dass er bei "negativer Basis" und "ungeraden Exponenten" das Absolutglied der Basis bildet also "abs(Basis)" und dann ganz normal weiterrechnet.
--> Ich brauche nur den Befehl, da es mit MOD nicht geht...
Denn dann multipliziert man das Ergebnis einfach mit "-1" und schon wäre das Problem gelöst! Also ich bin net unbedingt der Dümmste in Mathematik und brauche hier derweil keine klugen Ratschläge.
Mir wäre weißgott mehr geholfen, wenn ihr mal auf meine Frage eingehen würdet!
Gruß, Tino
Born-to-Frag - Sa 18.02.06 19:47
Delphi-Quelltext
1:
| if Round(deineZahl) <> deineZahl then |
alzaimar - Sa 18.02.06 20:10
Tino the Rino hat folgendes geschrieben: |
Ja, schön, dass du so ein Genie bist, aber das Programm rechnet aber die "-8" trotzdem nicht aus - und das "(-2)^3 = -8" ist, weiß ich auch noch...
......Also ich bin net unbedingt der Dümmste in Mathematik und brauche hier derweil keine klugen Ratschläge
...
Mir wäre weißgott mehr geholfen, wenn ihr mal auf meine Frage eingehen würdet!
|
Bischen unverschämt, wenn du mich fragst. Und Deine Mathenkentnisse sind aber wirklich ziemlich rudimentär, wenn Du rationale Exponenten über eine Moduloopration klassifizieren willst. Insofern ist die Nachhilfe schon verständlich.
Versuch es mal mit Höflichkeit, das könnte im späteren Leben noch was bringen. Hier kommst Du jedenfalls so nicht weiter.
Born-to-Frag hat folgendes geschrieben: |
Delphi-Quelltext 1:
| if Round(deineZahl) <> deineZahl then | |
Und das klappt auch nicht weil ... [ausgeblendet wegen Impertinenz des Fragestellers]...
Gausi - Sa 18.02.06 20:16
alzaimar hat folgendes geschrieben: |
Born-to-Frag hat folgendes geschrieben: | Delphi-Quelltext 1:
| if Round(deineZahl) <> deineZahl then | |
Und das klappt auch nicht weil ... [ausgeblendet wegen Impertinenz des Fragestellers]... |
Doch, das sollte schon klappen, wenn man den Extended-Wert direkt durch umkonvertieren eines Strings erhält und man auf Ganzzahligkeit prüfen möchte. Ansonsten gilt natürlich durchaus manchmal
2 + 0.1 - 0.1 <> 2. Oder meintest du was anderes?
Den gerundeten Wert kann man dann mit Mod bearbeiten.
alzaimar - Sa 18.02.06 20:21
Gausi hat folgendes geschrieben: |
| .... Oder meintest du was anderes?.. |
Bei Vergleichen von Extended-Werten auf Gleichheit habe ich einen Pavlov-Reflex bezüglich 'klappt nicht'. Aber Du hast Recht.
Delete - Sa 18.02.06 21:46
Tut mir leid, ich war ein wenig gereizt.
Habs mitlerweile selbst hinbekommen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Function Potenz(Basis, Exponent: Extended): Extended; var helper: integer; begin Result := Exponent / 2; helper := Trunc(Result); if Exponent = 0.0 then Result := 1.0 else if (Basis = 0.0) and (Exponent > 0.0) then Result := 0.0 else if Exponent = 2 then Result := Sqr(Basis) else if (Basis < 0.0) and ((helper mod 2) <> 0) then Result := (Exp(ln(abs(Basis)) * Exponent)) * -1 else Result := Exp(Ln(Basis) * Exponent );
end; |
Danke trotzdem!
Gruß, Tino
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!