Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fortschritt darstellen (https://www.delphipraxis.net/41151-fortschritt-darstellen.html)

whiteshark 26. Feb 2005 22:16


Fortschritt darstellen
 
Moin Leute;

:wall: Ich habe mal wieder ein Problem. Wir sollen ein Programm schreiben, dass die Sortieralgorithmen vergleicht. Das ist mit ja gelungen. Nun wollte ich als kleine Spielerrei einen Fortschrittbalken einbauen. Ich wollte ihn der einfach halber erst mal nur für das Zufallsfahlen generieren verwenden.
Delphi-Quellcode:
procedure listefuellen
var a:array[1..100000] of integer;
var check:integer;
var n:integer;
begin

n:=strtoint(edit1.text);
randomize;

check:=n/10;

for i:=1 to n do
        begin
        a[i]:=random(n+10);
        end;

for j:=1 to n do
        begin
        if(j>=1*check) then image_fort1.Visible:=true;
        if(j>=2*check) then image_fort2.Visible:=true;
        if(j>=3*check) then image_fort3.Visible:=true;
        if(j>=4*check) then image_fort4.Visible:=true;
        if(j>=5*check) then image_fort5.Visible:=true;
        if(j>=6*check) then image_fort6.Visible:=true;
        if(j>=7*check) then image_fort7.Visible:=true;
        if(j>=8*check) then image_fort8.Visible:=true;
        if(j>=9*check) then image_fort9.Visible:=true;
        if(j>=10*check) then image_fort10.Visible:=true;
        memo1.lines.add(inttostr(a[j]));
        end; // end of if-abfrage
end; // end of LISTEFÜLLEN
Meine Idee war es, immer die Zehntel abzufragen. Immer wenn ein Zehntel voll ist soll der Balken um eine Einheit zunehmen. D.h. wenn für n=65000 eingesetzt wird müsste alle 6500 eine Einheit addiert werden. Das tut es aber net. Wo liegt das Problem?

Matze 26. Feb 2005 22:23

Re: Fortschritt darstellen
 
Zu deinem problem kann ich nichts sagen, da ich es nicht gant verstehe.

Aber einige Tipps:

==> Der Code ist schlecht formatiert
==> Das hier:

Delphi-Quellcode:
for j:=1 to n do
        begin
        if(j>=1*check) then image_fort1.Visible:=true;
        if(j>=2*check) then image_fort2.Visible:=true;

        [...]
kannst du vereinfachen, indem du zu begin

Delphi-Quellcode:
if(j>=j*check) ...
schreibst und image_fort per Delphi-Referenz durchsuchenFindComponent ansprichst.

gordon freeman 26. Feb 2005 22:25

Re: Fortschritt darstellen
 
Warum benutzt du nicht eine fertige Lösung, wie zum Beispiel die Progressbar, dann könnte man das ganze schön leicht errechnen:

Delphi-Quellcode:
Progressbar1.position := ((j / n)* 100) div 1;

bttb930 26. Feb 2005 22:31

Re: Fortschritt darstellen
 
die antwort auf deine frage: zuerst wird die i-schleife durchlaufen, dann die j-schleife

also egal wie hoch n ist: zuerst werden die zufallszahlen generiert (ALLE!) und erst dann deine fortschrittsanzeige

du müsstest für das was du willst die beiden schleifen zu einer zusammen fassen

Binärbaum 26. Feb 2005 22:34

Re: Fortschritt darstellen
 
Vielleicht wäre es so besser:

Delphi-Quellcode:
procedure listefuellen;
var a: array of integer;//dynamisches Array
    check, n, i: integer;
begin
  n:= strtoint(Edit1.Text);
  Randomize;
  check:= n div 10;
  SetLength(a, n);//Länge festlegen

  for i:=1 to n do
  begin
    a[i-1]:=random(n+10);
    if(j>=1*check) then image_fort1.Visible:=true;
    if(j>=2*check) then image_fort2.Visible:=true;
    if(j>=3*check) then image_fort3.Visible:=true;
    if(j>=4*check) then image_fort4.Visible:=true;
    if(j>=5*check) then image_fort5.Visible:=true;
    if(j>=6*check) then image_fort6.Visible:=true;
    if(j>=7*check) then image_fort7.Visible:=true;
    if(j>=8*check) then image_fort8.Visible:=true;
    if(j>=9*check) then image_fort9.Visible:=true;
    if(j>=10*check) then image_fort10.Visible:=true;
    memo1.lines.add(inttostr(a[i-1]));
  end; //for-Schleife
end; //LISTEFÜLLEN
IMHO ist es aber mit einer Progressbar-Komponente einfacher (und auch eleganter), den Fortschritt anzuzeigen. Auch dieses if(j>=1*check) then ... könnte man anders lösen.

MfG
Binärbaum

whiteshark 26. Feb 2005 22:54

Re: Fortschritt darstellen
 
Ja, das mag ja sein. Aber ich bin noch ein völliger Anfänger in Sachen Delphi :oops: und da war das für mich erstmal die beste Lösung. Und des habe ich mich bei der DP angemeldet um auf Fragen Antworten zu bekommen und um mich weiter zu bilden.


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