| Autor |
Beitrag |
oktober22
Hält's aus hier
Beiträge: 2
Win XP
D7
|
Verfasst: So 12.06.05 19:08
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.
_________________ mfg =P
oktober22
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 12.06.05 19:09
Potenzieren geht über Power(basis, exponent). Und du musst die unit Math via uses einbinden.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: 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
      
Beiträge: 222
|
Verfasst: 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.
|
|
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 18.02.06 19:10
Es geht nicht um ungerade, sondern um gebrochene Exponenten  . (-2)^3 = -8
AXMD
|
|
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 18.02.06 19:39
AXMD hat folgendes geschrieben: | Es geht nicht um ungerade, sondern um gebrochene Exponenten . (-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
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: Sa 18.02.06 19:47
Delphi-Quelltext 1:
| if Round(deineZahl) <> deineZahl then |
_________________ Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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]...
_________________ Na denn, dann. Bis dann, denn.
|
|
Gausi
      
Beiträge: 8553
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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.
_________________ Na denn, dann. Bis dann, denn.
|
|
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
|
|