Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bierschaumzerfall (https://www.delphipraxis.net/149725-bierschaumzerfall.html)

jraxxo 28. Mär 2010 17:08


Bierschaumzerfall
 
Hallo nochmal,
und noch ein Problem: ich soll auch Bierschaumzerfall mit einer For-Schleife coden. Dieser läuft NICHT exponentiell ab, d.h. er verliert alle 60s 12% seines ANFANGSVOLUMENS.
also hab ich (ich brauche sekundengenaue berechnung):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,v: extended;
    i,sec: longint;
begin
  v:=100;
  x:=100;
  for i := 0 to 600 do begin
  x:=x-(0.2*v);
  sec:=i;
  if (v / x = 10) then begin
    Edit1.Text:=(inttostr(sec));
    exit;
  end;
  end;

end
;

Er sagt aber sobald ich aufs Knöpfchen drücke "gleitkommadivision durch null".

Wie immer bedanke ich mich an dieser Stelle für Antworten im voraus.


Joscha

Notxor 28. Mär 2010 17:16

Re: Bierschaumzerfall
 
Zitat:

Zitat von jraxxo
Delphi-Quellcode:
  if (v / x = 10) then begin
...
Er sagt aber sobald ich aufs Knöpfchen drücke "gleitkommadivision durch null".

Es ist ja beim 5. Durchgang eine Division durch 0.
In deinem Bsp kann v/x nie 10 werden, da x=100 immer um 20 verringert wird.

freak4fun 28. Mär 2010 17:17

Re: Bierschaumzerfall
 
Denk mal drüber nach was du da machst. xD

himitsu 28. Mär 2010 17:19

Re: Bierschaumzerfall
 
nach 5 Schleifendurchgängen sollte X auf 0 stehen und "y / x", also "y / 0" verursacht diesen Fehler.

"durch 0" kann nicht berechnet werden.

Zitat:

v / x = 10
PS: Gleitkommaergebnisse auf exakte Gleichheit zu prüfen ist keine gute Idee.
> durch Rundungsfehler kann der Wert auch leicht abweichen und ergäbe dann keine Übereinstimmung.

PSS: Unbedingt FOR? Direkt berechnet ginge ja einfacher.

freak4fun 28. Mär 2010 17:33

Re: Bierschaumzerfall
 
Ich habe mal ein wenig gespielt:
Delphi-Quellcode:
...
 private
  Ende: Boolean;
...

procedure TForm2.Button1Click(Sender: TObject);
var
  BierSchaum: double;
  i: Integer;
begin
  Ende := False;
  BierSchaum := 100;

  for i := 0 to 300 do
  begin
    BierSchaum := BierSchaum - 0.2;
    Edit1.Text := Format('Sekunden: %2d Stand: %2.2f', [i, BierSchaum]);
    Application.ProcessMessages;
    if Ende then
    begin
      break;
    end;
    sleep(1000);
  end;

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  Ende := True;
end;

IceBube 28. Mär 2010 18:35

Re: Bierschaumzerfall
 
hm

Vielleicht sollte man noch "sleep" durch Hier im Forum suchendelay ersetzen?

:)

lg

jraxxo 28. Mär 2010 21:28

Re: Bierschaumzerfall
 
ui. so viele beiträge.
also freak4fun... ich bin mir nich sicher ob du verstanden hast was ich brauch...ich brauch eine funktion die berechnet nach wie viel sek nur noch 10% da sind...das macht deine -wenn auch sehr hübsche - procedure leider nich :(

Luckie 28. Mär 2010 21:32

Re: Bierschaumzerfall
 
Es ist aber kein Problem die Routine entsprechend zu ändern. ;)

SimonRap 28. Mär 2010 21:39

Re: Bierschaumzerfall
 
bin jetzt nich der mathe experte, aber meiner Meinung nach brauch man dafür doch ken ganzes Programm...
er verliert alle 60s 12% von 100...
also jede sekunde: (100/100*12)/60 ... zwar is x/x*ir-was immer ir-was, aber der richtigkeit halber^^
willst wissen, wann das bei 10 is...
also (100-10)*(1/0,2)=...
Wenn ich mich nich irre, is das schon die Anzahl der Sekunden...
[EDIT]kannst das ja noch in ne prozedur packen, die das rechnet^^[/EDIT]

jraxxo 28. Mär 2010 21:45

Re: Bierschaumzerfall
 
simonrap das problem ist ja dass ich genau das tun will aber atm nich so richtig weiterkomme weil ich schon ewig nich mehr mit delphi programmiert hab....
ich will einfach nur fertig werden und ins bett^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
Seite 1 von 2  1 2      

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