AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Chart Diagramm probleme

Ein Thema von Foxi1896 · begonnen am 5. Jun 2013 · letzter Beitrag vom 6. Jun 2013
Antwort Antwort
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#1

Chart Diagramm probleme

  Alt 5. Jun 2013, 14:04
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.

Geändert von Foxi1896 ( 5. Jun 2013 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Chart Diagramm probleme

  Alt 5. Jun 2013, 15:00
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 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.
Philip
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#3

AW: Chart Diagramm probleme

  Alt 5. Jun 2013, 15:47
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?

Geändert von MeierZwoo ( 5. Jun 2013 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Chart Diagramm probleme

  Alt 5. Jun 2013, 15:55
@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?


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 ..

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.

Geändert von Foxi1896 ( 5. Jun 2013 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Chart Diagramm probleme

  Alt 5. Jun 2013, 17:04
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;
fork me on Github
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#6

AW: Chart Diagramm probleme

  Alt 5. Jun 2013, 17:36
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.

Geändert von MeierZwoo ( 6. Jun 2013 um 08:17 Uhr) Grund: (Rechtschreibung)
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Chart Diagramm probleme

  Alt 6. Jun 2013, 08:08
Ah,ok hab es verstanden. DANKE =)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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