Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.357 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 07:16
Zitat von Luckie:
Zitat von Satty67:
Btw: Macht die vorherige Zuweisung auf die lokale Variable CurrentPLZ überhaupt Sinn?
Kann ich nicht sagen. Es erhöht aber die Lesbarkeit und man kann es einfacher debuggen.
Naja, es ist ein Assemblerbefehl mehr.
Code:
mov edi,[ecx+edx*4]
cmp esi,edi
Ohne die Zuweisung kann der Wert bei ecx+edx*4 auch direkt mit dem Wert im esi Register verglichen werden. Da aber meistens mehr mit der Variablen gemacht wird als ein simpler Vergleich, habe ich es so gelassen.

Denn meistens wird mehrfach auf den Eintrag im Array zugegriffen in der Schleife, was dann viel mehr Aufwand ist. Deshalb ist es meistens mit Zwischenvariable schon besser, also wollte ich das nicht ausgerechnet ansprechen, auch wenn es hier einen Assemblerbefehl mehr kostet.

Zitat von Luckie:
Das sieht irgendwie komisch bzw. umständlich aus.
Ja, aber nicht unbedingt wegen der Bedingung. Du weist am Anfang doch ohnehin PLZ an Result zu. Wofür benutzt du danach denn trotzdem weiter PLZ und legst jedesmal wieder den neuen Wert in Result?
Delphi-Quellcode:
function GetNextLowerPLZFromList(var PLZ: Integer; PLZSunHours: TPLZSunHours): Integer;
begin
  // Raises EPLZNotInList exception if no lower PLZ can be found
  Result := PLZ;

  while (not IsPLZInList(Result, PLZSunHours)) and (Result <> -1) do
    Dec(Result);
  if Result = -1 then
    Raise EPLZNotInList.Create(rsENotInList);
end;
Sinnvoller wäre aber ja wohl eine Betrachtung des nächstkleineren Arrayeintrags statt alle Postleitzahlen durchzuprobieren.
Dafür müsstest du nur einmal dein Array durchgehen und alle vorhandenen Postleitzahlen betrachten. Das geht selbst bei einem unsortierten Array vermutlich schneller. Schließlich werden in deinem Array ja nicht so viele Postleitzahlen sein.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat