![]() |
Chart Diagramm probleme
Sorry, das ich mit so einer hoffenltich Simplen Frage komme.
Habe heute mit Delphi angefangen. Was kann ich gegen die Fehlermeldung: Divison durch 0 machen? Und wie kann ich es machen das M auf der x Achse angezeigt wird. Eigentlich sollten I und n geraden sein und eta eine kurve. Danke schonmal für Hilfe. ![]() var Form1: TForm1; const Pi=3.14159; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var R, C, U, M_r : Real; I, M, M_i, eta : Real; n : Integer; begin R :=StrToFloat(Edit1.Text); C :=StrToFloat(Edit2.Text); U :=StrToFloat(Edit3.Text); M_r:=StrToFloat(Edit4.Text); Series1.Clear; Series2.Clear; Series3.Clear; for n:=0 to 100 do begin {Stromberechnung} I:= (1/R) * (U-(C*n)); {Momentberechnung} M_i:= I * (C/2*Pi); M := M_i - M_r; {Wirkungsgradberechnung} eta:= (M*2*Pi*n) / (U*I); {Kennlinien} Series1.AddXY(M,I,'',clRed); Series2.AddXY(M,(n),'',clBlue); Series3.AddXY(M,eta,'',clGreen); end; end; end. |
AW: Chart Diagramm probleme
Hi,
die Meldung Gleitkommadivision durch 0 bedeutet eigentlich exakt das was da steht. Du dividierst an einer Stelle durch 0, was bekanntlich nicht funktioniert.
Delphi-Quellcode:
Vermutlich steht in Edit1 eine Null.
R :=StrToFloat(Edit1.Text);
[...] {Stromberechnung} I:= (1/R) * (U-(C*n)); Abfangen kannst du das mit
Delphi-Quellcode:
.
try .. except
Delphi-Quellcode:
Sinnvoll ist es auch die Eingaben vor den Berechnungen zu prüfen.
try
I:= (1/R) * (U-(C*n)); except Showmessage('Fehlerbeschreibung'); exit; end; |
AW: Chart Diagramm probleme
Bei Gleitkommawerten im Nenner fragt man GRUNDSÄTZLICH VORHER gegen Null ab (bzw. nicht gegen Null, sondern gegen einen sehr kleinen Absolutwert der Zahl ... if abs(p) < 0.0000001 ...)
und wieso stellt Du eine solch einfache Frage gleich im mehreren Foren parallel - hast Du Angst, das könne niemend beantworten? |
AW: Chart Diagramm probleme
@dalo:
try I:= (1/R) * (U-(C*n)); except Showmessage('Fehlerbeschreibung'); exit; end; wo sehe ich den dann eine Beschreibung werte kann er mir ja so nicht anzeigen? Zitat:
Zitat:
|
AW: Chart Diagramm probleme
Zitat:
Direkt nachdem du die Werte von der Benutzeroberfläche übernommen hast, musst du eine Plausibilitätsprüfung vornehmen:
Delphi-Quellcode:
Falls du später weitere Werte errechnest, die Einfluss auf die Division haben müssen diese auch geprüft werden:
R :=StrToFloat(Edit1.Text);
if R < 0.1 then raise Exception.Create('Widerstand darf nicht kleiner als 0,1 Ohm sein');
Delphi-Quellcode:
Mir scheint ausserdem, dass irgendwas in deiner Berechnung falsch ist.
I:= (1/R) * (U-(C*n));
if Abs(I) < 0.0001 then raise Exception.Create('Strom kleiner als 0,1 mA'); // alternativ könntest du hier auch die Continue Anweisung verwenden um den Wert zu überspringen Evtl. die Formeln so umstellen, dass sich der Strom herauskürzt. Oder auch so:
Delphi-Quellcode:
{Stromberechnung}
I:= (1/R) * (U-(C*n)); if Abs(I) < 0.001 then eta:= 0.0 // Wirkstrom = 0 ==> Wirkungsgrad = 0 else begin {Momentberechnung} M_i:= I * (C/2.0*Pi); M := M_i - M_r; {Wirkungsgradberechnung} eta:= (M*2.0*Pi*n) / (U*I); end; |
AW: Chart Diagramm probleme
Foxi1896, wenn bei einer Berechnung der Nenner Null wird, muß man von der Logik her aus dem Zusammenhang entscheiden, was dann passiert. In der Mathe nennt man das eine Grenzwertbetrachtung.
Im "normalen" Leben muß man entscheiden, ob der ganze Bruch Null wird oder einen anderen unbestimmten Wert annimmt. Denn auch der Zähler kann Null sein, dann ist der Wert 0/0 = unbestimmt = jeder beliebige Wert. Welchen Wert, und ob gültig oder ungültig, kann man nur aus dem geometrischen Zusammenhang bestimmen. Es kann Null, unendlich oder jeder Wert dazwischen sein. Alternativ kann man versuchen, für diese Grenzfälle eine andere Berechnung anzuwenden, die keinen NullNenner erbringt. |
AW: Chart Diagramm probleme
Ah,ok hab es verstanden. DANKE =)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 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-2025 by Thomas Breitkreuz