AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschachtelte Schleifen - Gesamtfortschritt

Ein Thema von Luckie · begonnen am 27. Feb 2008 · letzter Beitrag vom 28. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:22
Ich habe zwei verschachtelte Schleife:
Delphi-Quellcode:
for i := 0 to x do
begin
  while j < y do
  begin
    // hier Gesamtfortschritt ermitteln
  end;
end
Wie ermittele ich jetzt in der inneren Schleife den Gesamtfortschritt? Ich stehe da irgendwie auf dem Schlauch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:24
i*y+j
wenn j bei 0 anfängt
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:25
Wie meinst du das? Wie wird j erhöht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:35
j wird immer um eins inkrementiert. Und ich sehe, da gibt es noch eine kleine Hürde, vor der while-Schleife wird die Zählvariable der while-Schleife immer auf null gesetzt:
Delphi-Quellcode:
for i := 0 to x do
begin
  j := 0; // <-- !!!
  while j < y do
  begin
    j_total := j_total + j
    // hier Gesamtfortschritt ermitteln
  end;
end
Ich denke, da bräuchte ich eine Hilfsvariable: j_total := j_total + j oder so was.

@sirius: Ich bräuchte es in Prozent.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:39
Naja, dann noch durch y*(x+1) teilen. Aber warum nimmst du eine While-Schleife? Kann es sein, das y hin und wieder schwankt oder j nicht bei 0 anfängt?

Edit: Teil 2 hat sich grad geändert
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#6

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:41
( i*y+j ) / ( x*y ) * 100 = Prozent
Position Maximum
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 11:51
Richtig sähe es so aus:
Delphi-Quellcode:
PosTotal := 0;
    for Pass := 0 to FOverWriteCount do
    begin
      // Schreibpuffer füllen
      for i := 0 to Length(Buffer) div SizeOf(TTrippleByte) - 1 do
        if (Pass < Low(Mask)) or (Pass > High(Mask)) then
        begin
          Buffer[i * SizeOf(TTrippleByte)] := Random(256);
          Buffer[i * SizeOf(TTrippleByte) + 1] := Random(256);
          Buffer[i * SizeOf(TTrippleByte) + 1] := Random(256);
        end
        else
          PTrippleByte(@Buffer[i * SizeOf(TTrippleByte)])^ := Mask[Pass];

      // Datei überschreiben
      SetFilePointer(H, 0, nil, FILE_BEGIN);
      Pos := 0;
      while Pos < Sectors do
      begin
        PosTotal := PosTotal + Pos; // MP
        SendMessage(Parent, FCM_DELFILE_PROG, Trunc((Pass* (Sectors+PosTotal)) / (FOverWriteCount * Sectors) * 100), 0);
        i := Min(Sectors - Pos, Length(Buffer) div Integer(SectorSize));
        if not WriteFile(H, Buffer[0], i * SectorSize, W, nil)
          or (Integer(W) <> i * SectorSize) then
          Exit;
        Inc(Pos, i);
      end;
    end;
Damit wird eine Datei sicher gelöscht durch mehrmaliges Überschreiben mit bestimmten Bitmustern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 15:32
Du tust übrgiens FOverwritecount+1 mal die Datei überschreiben.
Und du durchläufst die Whileschleife in i-Schritten, wobei i anfangs konstant bei "length(buffer) div Sectorsize" und im letzten Durchgang meist auf Sectors-Pos fällt.

Damit hat die while-Schleife immer Sectors/(length(buffer) div Sectorsize) Druchläufe (evtl. einen mehr) und die For-Schleife hat FWriteCount+1 Druchläufe. Die musst du nur multiplizieren.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 15:47
Ich werde noch mal wahnsinnig:
Delphi-Quellcode:
    PosTotal := 0;
    for Pass := 0 to FPassCount - 1 do
    begin
      if Assigned(OnShredderPass) then
        OnShredderPass(self, Pass + 1, FPassCount);
      // Schreibpuffer füllen
      for i := 0 to Length(Buffer) div SizeOf(TTrippleByte) - 1 do
        if (Pass < Low(Mask)) or (Pass > High(Mask)) then
        begin
          Buffer[i * SizeOf(TTrippleByte)] := Random(256);
          Buffer[i * SizeOf(TTrippleByte) + 1] := Random(256);
          Buffer[i * SizeOf(TTrippleByte) + 1] := Random(256);
        end
        else
          PTrippleByte(@Buffer[i * SizeOf(TTrippleByte)])^ := Mask[Pass];

      // Datei überschreiben
      SetFilePointer(H, 0, nil, FILE_BEGIN);
      Pos := 0;
      while Pos < Sectors do
      begin
        i := Min(Sectors - Pos, Length(Buffer) div Integer(SectorSize));
        if not WriteFile(H, Buffer[0], i * SectorSize, W, nil)
          or (Integer(W) <> i * SectorSize) then
          Exit;
        Inc(Pos, i);

        if Assigned(OnShredderProgress) then
        begin
          PosTotal := PosTotal + Pos; // MP
          p := ((PosTotal / Sectorsize) / (FPassCount * Sectors/(length(buffer)) / Sectorsize) * 100); // !!!
          OnShredderProgress(self, Trunc(p));
        end;
      end;
    end;
Das liefert mindestens um den Faktor 1.000 zu hohe Werte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Verschachtelte Schleifen - Gesamtfortschritt

  Alt 27. Feb 2008, 15:54
Zitat von Desmulator:
( i*y+j ) / ( x*y ) * 100 = Prozent
Position Maximum
Ich komme auf

(i*y+j) / ((x+1)*y) * 100 = Prozent
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:55 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