Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Exponentialfunktion in Delphi
wayne123 - So 16.01.11 22:14
Titel: Exponentialfunktion in Delphi
Ich hab ein Problem. Ich weiß nicht wie ich die Potez in Delphi machen soll, sodass die Hochzahl eine Variabel ist. Weiß hier vllt jemand, wie man das möglichst unkompliziertt machen kann?
Moderiert von
Martok: Topic aus Sonstiges (Delphi) verschoben am So 16.01.2011 um 22:40
wayne123 - So 16.01.11 22:30
Und wie würde das bei einem Beispiel aussehen? Bei mir kommt nämlich immer: Undefinierter Bezeichner Power.
jaenicke - So 16.01.11 22:32
Steht doch da...
Die musst du auch in die uses schreiben... :roll:
wayne123 - So 16.01.11 22:42
Verdammt, vergessen ^^. Aber Power kann ich ja nicht in Verbindung mit einer For-Schleife benutzen, oder, wegen Integer und Extended? Wie könnte ich das dann machen, dass der die Werte für ganz viele unterschiedliche z(Hochzahl) Werte ausrechnet?
platzwart - So 16.01.11 22:47
Ehm... wie bitte? Was willst du?
jaenicke - So 16.01.11 22:49
Du kannst auch eine ganze Zahl (Integer) als Kommazahl (Extended) übergeben. Das ist eigentlich kein Problem. Nur das Ergebnis ist natürlich wieder Extended und nicht Integer.
Wenn du dazu schreiben würdest was du versucht hast (hast du ja hoffentlich...), könnten wir dir auch sagen was da falsch ist.
wayne123 - So 16.01.11 22:52
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math;
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Edit4: TEdit; Label2: TLabel; Label3: TLabel; Edit5: TEdit; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; procedure Button1Click(Sender: TObject); private public end; const w=1.54; var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var x,y,z: extended; begin x:= StrToFloat(Edit1.Text); y:= StrToFloat(Edit2.Text); Edit3.Text:= FloatToStr((2*x*y)/(x+y)); for z:= 1 to 25 do begin Power(w,z):=extended; end; Edit4.Text:= FloatToStr(223*Power) end;
end. |
Moderiert von
Martok: Delphi-Tags gesetzt
wayne123 - So 16.01.11 23:10
Okay, ich seh schon, dass ich da nur Mist gemacht habe, war wohl zu müde, weil ich in den etzten paar Tage immer sehr spät im Bett war. Ich guck mir das morgen nochmal an und falls ich wieder Probleme mit Integer und Extended bei der for-Schleife habe, melde ich mich hier nochmal, da ich ja weiß, dass mir hier ständig meine groben Fehler beim Programmieren aufgezeigt werden.
Martok - So 16.01.11 23:24
Hallo!
Bitte verwende für Quellcode die entsprechenden [delphi
]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
Quelltext
1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG107ac9c8fe676154cf7b2d002a022f5b}</span></span> |
Wird:
Oben Rechts neben deinem Beitrag findest du dazu die "Bearbeiten"-Funktion, dort einfach ändern und speichern. Danke!
Viele Grüße,
Martok
Tranx - Mo 17.01.11 03:38
Hallo, habe mir mal Deine Prozedur vorgenommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var x,y,z: extended; begin x:= StrToFloat(Edit1.Text); y:= StrToFloat(Edit2.Text); Edit3.Text:= FloatToStr((2*x*y)/(x+y)); for z:= 1 to 25 do begin Power(w,z):=extended; end; Edit4.Text:= FloatToStr(223*Power) end; |
Also zwei Zeilen ergeben für mich gar keinen Sinn.
1.
Delphi-Quelltext
1:
| Power(w, z) := extended; |
Extended ist keine Variable, sondern ein Variablentyp, somit hat dies keinen Wert. Und auf der rechten Seite der Zuweisung müssen nun mal Werte stehen. Es muss ja etwas zugewiesen werden.
Dann ist das nächste: Power ist eine Funktion, ihr kann also nichts zugewiesen werden. Power kann nur auf der rechten Seite stehen, denn sie liefert als Funktion einen Wert:
Das wäre in Deinem Fall eine mögliche korrekte Zeile.
2.
Delphi-Quelltext
1:
| Edit4.Text := FloatToStr(223*Power) |
Hier wird zwar Power auf der richtigen Seite, jedoch ohne Parameter benutzt. Entweder ist in diesem Fall Power eine Variable, was dann jedoch zur Konfusion führt, wenn man Variablen (Die jedoch in dem Cosde nicht definiert ist) und Funktionen gleich benennt, oder es ist eben doch die Funktion, und dann benötigt Power zwei Parameter, nämlich Basis und Exponent. Nebenbei: Bei der letzten Zeile vor "end;" kann man das abschließende Komma weglassen. Ich schließe jedoch alle Zeilen, welche ein Komma erlauben, mit diesem ab. Denn wenn ich den Text erweitere, vergesse ich nicht, das Komma in der Zeile hinzuzufügen. In jedem Fall merkt der Compiler den Fehler, falls er auftritt.
Allerdings verstehe ich nicht, was die Schleife soll. Du berechnest irgendwelche Werte und gibst letztendlich einen Wert aus. Wofür dann die Schleife? Da ist nicht mal eine Summenbildung des Typs:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Summe := 0.0; for z := 1 to 25 do begin Summe := Summe + Power(w,z); end; Edit4.Text:= FloatToStr(Summe); |
oder ähnliche Konstrukte. Klär uns hierin doch mal auf! ;)
Fiete - Mo 17.01.11 17:06
Moin wayne123,
Dein Problem ist auch ohne die Unit Math lösbar:
entspricht x=2^3
wobei x vom Typ extended sein muß.
exp ist die e-Funktion, ln der Logarithmus zur Basis e
Gruß
Fiete
wayne123 - Mo 17.01.11 19:32
Ja, ich hab gemerkt, dass ich da völligen Quatsch gemacht habe. Habs jetzt auch einfacher gelöst, musste deswegen nur mehr schreiben. Ich hätte noch die Werte vergleichen lassen müssen für mein Programm, damit am Ende der Wert rauskommt, der am nahesten an dem Wert ist, der eingegeben wird, aber das geht ja durch if-then. Wäre doch:
X=Eingabewert y=jeweiliger Wert, der rauskommt z= Variabel für Rechnung mit Ergebnis y
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| KlErgebnis:= 99999 for z:= 1 to 25 do begin Rechnung if y<=x then begin Differenz:= x-y if Differenz<KlErgebnis then begin KlErgebnis:=Differenz end; else Differenz:= y-x if Differenz<KlErgebnis then begin KlErgebnis:=Differenz end; |
Moderiert von
Martok: Delphi-Tags gesetzt
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!