Autor Beitrag
oktober22
Hält's aus hier
Beiträge: 2

Win XP
D7
BeitragVerfasst: 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:

ausblenden 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;  //hier schreibt delphi immer, das es einen Zeigertyp erwartet ?
 label1.caption := FloatToStr(z);
end;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.

_________________
mfg =P
oktober22
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 12.06.05 19:09 
Potenzieren geht über Power(basis, exponent). Und du musst die unit Math via uses einbinden.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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.0and (Exponent > 0.0then
    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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 18.02.06 15:52 
user profile iconTino 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 18.02.06 19:10 
Es geht nicht um ungerade, sondern um gebrochene Exponenten :roll: . (-2)^3 = -8

AXMD
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 18.02.06 19:39 
user profile iconAXMD 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Sa 18.02.06 19:47 
ausblenden Delphi-Quelltext
1:
if Round(deineZahl) <> deineZahl then //machwas					

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 18.02.06 20:10 
user profile iconTino 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.

user profile iconBorn-to-Frag hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
if Round(deineZahl) <> deineZahl then //machwas					

Und das klappt auch nicht weil ... [ausgeblendet wegen Impertinenz des Fragestellers]...

_________________
Na denn, dann. Bis dann, denn.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 18.02.06 20:16 
user profile iconalzaimar hat folgendes geschrieben:
user profile iconBorn-to-Frag hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
if Round(deineZahl) <> deineZahl then //machwas					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 18.02.06 20:21 
user profile iconGausi 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



BeitragVerfasst: Sa 18.02.06 21:46 
Tut mir leid, ich war ein wenig gereizt.
Habs mitlerweile selbst hinbekommen

ausblenden 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.0and (Exponent > 0.0then
             Result := 0.0
          else  if Exponent = 2 then
             Result := Sqr(Basis)
          else  if (Basis < 0.0and ((helper mod 2) <> 0then
             Result := (Exp(ln(abs(Basis)) * Exponent)) * -1
          else     Result := Exp(Ln(Basis) * Exponent );

end;


Danke trotzdem!

Gruß, Tino