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 Potenzrechnung (https://www.delphipraxis.net/98302-potenzrechnung.html)

poterp 24. Aug 2007 16:12


Potenzrechnung
 
Hallo,
ich habe da ein Problem und zwar ich versuche ein Potenzergebnis durch ein Gauge zu ermitteln
aber irgendwie klappt es nicht. So folgt sieht mein code aus:
Delphi-Quellcode:
procedure Form1.OKBtnClick(Sender: TObject);
begin
Timer1.enabled := true;
Timer1.Interval := 10;

end;

procedure Form1.Timer1Timer(Sender: TObject);
var
i, x, y, ergebnis,ergebnis2: integer;
begin
  x:=StrToInt(Edit1.Text);
  y:=StrToInt(Edit2.Text);
  Ergebnis:= x / y;
  Ergebnis2:= ergebnis*100;
  Gauge1.progress := gauge1.progress + 1;
  if gauge1.Progress = ergebnis2 then Timer1.enabled :=false;
  Label1.Caption:= inttostr(ergebnis);

end;
Ich vermute,dass irgendwas in meiner Formel stimmt nicht. kann mir jemanden helfen?
grüß
poter

3_of_8 24. Aug 2007 16:17

Re: Potenzrechnung
 
Das Ergebnis der Operation x/y ist in Delphi ein Real, kein Integer. Daher musst du ergebnis als Real (oder Single/Double/Extended) definieren. Eine weitere Möglichkeit wäre, x/y durch x div y zu ersetzen.
Übrigens brauchst du insgesamt nur eine Variable.

Delphi-Quellcode:
procedure Form1.OKBtnClick(Sender: TObject);
begin
  Timer1.enabled:=true;
  Timer1.Interval:=10;
end;

procedure Form1.Timer1Timer(Sender: TObject);
var
  percent: Integer;
begin
  percent:=StrToInt(Edit1.Text)*100 div StrToInt(Edit2.Text);
  Gauge1.progress:=gauge1.progress+1;
  if gauge1.Progress=percent then
    Timer1.enabled:=false;
  Label1.Caption:= inttostr(percent);
end;
EDIT: Schau dir mal das Grundlagentutorial auf http://dsdt.info an. Und was hat das ganze mit Potenzrechnung zu tun?

poterp 24. Aug 2007 16:47

Re: Potenzrechnung
 
Hallo,
es lauft nicht richtig.
das ergbnis von 8 von 25 bezogen auf 100 kommt richtig.
er kann nicht rechnen:
65 von 15 bezogen auf 100
800 von 72 bezogen auf 100 sollte ich circa 111,11% bekommen.
Da habe ich folgendes gemacht
Delphi-Quellcode:
Gauge1.MinValue:=0;
Gauge1.MaxValue:=100;
aber es hilft nicht
grüß
Poter

3_of_8 24. Aug 2007 16:52

Re: Potenzrechnung
 
Er rechnet definitiv richtig, er rundet wahrscheinlich nur falsch.

Du wirst definitiv keine 111.11% erhalten, weil du MaxValue=100 hast und außerdem ist 800/82 ungefähr 11,1%. Warum setzt du nicht einfach den Wert des Gauges gleich auf 11?

poterp 24. Aug 2007 17:24

Re: Potenzrechnung
 
Ja,ich hab es nochmal probiert aber ich kriege bestimmt ergbnis richtig und ander falsch zb:
25 von 50 bezogen auf 100 sollte 12,5% rauskommen aber kommt bei Gauge1.Max:= 1000; 5% bei Gauge1.Max:= 100 ; kommt 50% raus
bei
800 von 500 bezogen auf 100 sollte 160% raus. Bei Gauge1.Max:= 1000; kommt 16% raus aber der Label Zeigt es richtig. es muss die möglichkeit geben zb 160% auf den Gauge zu kriegen oder?

3_of_8 24. Aug 2007 18:15

Re: Potenzrechnung
 
Ja, gibt es. Du setzt Max auf 100. Oder du multiplizierst den Wert mit 10.

Und was meinst du mit "25 von 50 bezogen auf 100"?

Klaus01 25. Aug 2007 11:14

Re: Potenzrechnung
 
Zitat:

Zitat von poterp
25 von 50 bezogen auf 100 sollte 12,5% rauskommen ..

25 von 50 ist 0,5 -> das ganze in Prozent (bezogen auf 100) ist dann 50%

Grüße
Klaus

poterp 25. Aug 2007 11:32

Re: Potenzrechnung
 
Hallo,
es klappt nicht bei Gauge1.Max:= 100; und das Ergebnis * 10 multiplizieren.

3_of_8 25. Aug 2007 11:42

Re: Potenzrechnung
 
1. "Es klappt nicht" ist keine Fehlerbeschreibung
2. Ich habe gesagt Max auf 100 setzen _ODER_ mit 10 multiplizieren.

Klaus01 25. Aug 2007 11:55

Re: Potenzrechnung
 
Hallo Peter,

so funktioniert es bei mir.
Ich habe das mit einer Progressbar (smooth = true) gemacht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.enabled := true;
  Timer1.Interval := 10;
  Gauge1.Position:=0;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i, x, y: Integer;
  ergebnis,ergebnis2: extended;
  Faktor: Integer;
begin
  Faktor := 100;
  x:=StrToInt(Edit1.Text);
  y:=StrToInt(Edit2.Text);

  Ergebnis:= x / y;
  if ergebnis > 1 then
    gauge1.Max:=Faktor*(trunc(ergebnis)+1)
  else
     Gauge1.Max := Faktor;

  Ergebnis2:= ergebnis*Faktor;
  Gauge1.Position := gauge1.Position + 1;
  if gauge1.Position >= ergebnis2 then // >= wegen Vergleich Integer mit extended
    Timer1.enabled :=false;
  Label1.Caption:= Floattostr(ergebnis);

end;
[edit] noch eine Frage, warum willst Du das denn unbedingt mit einem Timer lösen? [/edit]

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 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