Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Chart Diagramm probleme (https://www.delphipraxis.net/175192-chart-diagramm-probleme.html)

Foxi1896 5. Jun 2013 14:04

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.

http://forum.delphi-treff.de/index.p...824#post433824

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.

Darlo 5. Jun 2013 15:00

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:
R :=StrToFloat(Edit1.Text);

[...]

{Stromberechnung}
I:= (1/R) * (U-(C*n));
Vermutlich steht in Edit1 eine Null.

Abfangen kannst du das mit
Delphi-Quellcode:
try .. except
.

Delphi-Quellcode:
try
   I:= (1/R) * (U-(C*n));
except
   Showmessage('Fehlerbeschreibung');
   exit;
end;
Sinnvoll ist es auch die Eingaben vor den Berechnungen zu prüfen.

MeierZwoo 5. Jun 2013 15:47

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?

Foxi1896 5. Jun 2013 15:55

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 von MeierZwoo (Beitrag 1217571)
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 ...)

wie mache ich den da dann sinnvoll weiter? .. .then ..

Zitat:

Zitat von MeierZwoo (Beitrag 1217571)
und wieso stellt Du eine solch einfache Frage gleich im mehreren Foren parallel - hast Du Angst, das könne niemend beantworten?

naja habe jetzt gedacht das die einen nur in dem forum und die anderen im anderen. Und so schneller eine Antwort bekomme.

sx2008 5. Jun 2013 17:04

AW: Chart Diagramm probleme
 
Zitat:

Zitat von Foxi1896 (Beitrag 1217572)
naja habe jetzt gedacht das die einen nur in dem forum und die anderen im anderen. Und so schneller eine Antwort bekomme.

Nö, in diesem Forum kriegst du die besten Antworten weil es das beste Delphi Forum ist.

Direkt nachdem du die Werte von der Benutzeroberfläche übernommen hast, musst du eine Plausibilitätsprüfung vornehmen:
Delphi-Quellcode:
R :=StrToFloat(Edit1.Text);
if R < 0.1 then
  raise Exception.Create('Widerstand darf nicht kleiner als 0,1 Ohm sein');
Falls du später weitere Werte errechnest, die Einfluss auf die Division haben müssen diese auch geprüft werden:
Delphi-Quellcode:
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
Mir scheint ausserdem, dass irgendwas in deiner Berechnung falsch ist.
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;

MeierZwoo 5. Jun 2013 17:36

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.

Foxi1896 6. Jun 2013 08:08

AW: Chart Diagramm probleme
 
Ah,ok hab es verstanden. DANKE =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz