AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktion optimieren

Ein Thema von xtZ · begonnen am 3. Okt 2007 · letzter Beitrag vom 4. Okt 2007
Antwort Antwort
Seite 2 von 4     12 34   
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#11

Re: Funktion optimieren

  Alt 3. Okt 2007, 22:11
Hi alzaimar,

Deine Methode ist zwar sehr schnell, aber sie funktioniert (bei mir) nicht.
Hab das "InitComparison" im Formcreate Ereignis eingefügt und die procedure ersetzt und es kommt immer als Result "False" raus.

//Edit:
Habs, du hattest ein "not" vor FraudChars vergessen.
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Funktion optimieren

  Alt 4. Okt 2007, 02:10
Moin moin,
die Zuweisung zu L kann doch weggelassen werden...
Delphi-Quellcode:
//..
  if Length(s) <> 32 then
  begin
    Result := False;
    Exit;
  end;
  for i := 1 to 32 do
//..
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#13

Re: Funktion optimieren

  Alt 4. Okt 2007, 07:28
Hallo Dax,
dieser Ausdruck ist falsch. Die Bedingung zum Rausfliegen ist schon erfüllt wenn c ausserhalb '0' bis '9' liegt.
    if (c <= '0and c >= '9') or (c <= 'Aand C >= 'F') or (c <= 'aand c >= 'f') then Grüsse
Rainer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Funktion optimieren

  Alt 4. Okt 2007, 07:49
Hi xtZ,

Hier nochmal eine Zusammenfassung (Fehler bereinigt, Optimierungen der Anderen eingebaut):
Delphi-Quellcode:
Var
  FraudChars : Array [Char] Of Boolean;

Procedure InitComparison;
Var
  c : Char;

Begin
  For c:=low(Char) To High (Char) Do FraudChars[c] := True;
  for c:='0to '9do FraudChars[c] := False;
  for c:='ato 'fdo FraudChars[c] := False;
  for c:='Ato 'Fdo FraudChars[c] := False;
End;

function TestFunc(const s: String): Boolean; Inline;
var
  i : Integer;
  
begin
  Result := True;
  if Length(s) <> 32 then
    Result := False
  else for i := 1 to 32 do
    If FraudChar [s[i]] Then Begin
      Result := False;
      Break;
    end;
  end;
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#15

Re: Funktion optimieren

  Alt 4. Okt 2007, 09:11
Hallo,
so verstehts auch jeder:

Delphi-Quellcode:
function TestFunc(const s: String): Boolean; Inline;
var
  i : Integer;
  
begin
  Result := True;
  if Length(s) <> 32 then
    Result := False
  else
    for i := 1 to 32 do
       If FraudChar [s[i]] Then
          Begin
            Result := False;
            Break;
          end;
end;
Grüsse
Rainer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Funktion optimieren

  Alt 4. Okt 2007, 09:13
Zitat von WS1976:
so verstehts auch jeder
Stimmt. Dank Deiner professionellen Hilfe ist aus meinem Amateurgefrickel endlich lesbarer Code geworden.

Wobei man ja geteilter Meinung über die Formatierung sein kann, gelle?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#17

Re: Funktion optimieren

  Alt 4. Okt 2007, 09:28
Richtig, alzimar. Das Einzige, was man vielleicht noch anders schreiben kann/möchte/sollte/haben/sein wäre diese Ecke:
Delphi-Quellcode:
  if Length(s) <> 32 then
    Result := False
Ich würde entweder die Anweisung hinten ans Then anhängen, oder das Then vor die Anweisung runterziehen, damit in 5 Jahren keiner auf die Idee kommt, da noch was hinzufrickeln.
Delphi-Quellcode:
  if Length(s) <> 32 then Result := False
// oder
  if Length(s) <> 32
  then Result := False
@ws1976: nich böse sein, aber bei Deiner Schreibweise würde ich nie wissen, ob jetzt genügend ends da sind und wenn ja, ob sie an der richtigen Stelle sitzen.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: Funktion optimieren

  Alt 4. Okt 2007, 10:04
Zitat von Sidorion:
Richtig, alzimar. Das Einzige, was man vielleicht noch anders schreiben kann/möchte/sollte/haben/sein wäre diese Ecke:
Delphi-Quellcode:
  if Length(s) <> 32 then
    Result := False
Wenn dann aber schon so:
Delphi-Quellcode:
if Length(s) <> 32 then
begin
  Result := False;
end { if Length(s) }
else
begin
  for i := 1 to 32 do
  begin
    if FraudChar [s[i]] then
    Begin
      Result := False;
      Break;
    end; { if FraudChar }
  end; { for i }
end; { else if Length(s) }
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Funktion optimieren

  Alt 4. Okt 2007, 10:08
Ein kleines Quentchen (JA, alte Rechtschreibung, das Wort hat wohl überhaupt nichts mit Quant zu tun ) kann man wohl noch einsparen indem man sich die Zuweisung "Result:=True" am Anfang spart und nur ausführt wenn die Länge passt, da ansonsten eh gleich wieder Result:=False gesetzt wird. Also ab damit in den Else-Zweig
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#20

Re: Funktion optimieren

  Alt 4. Okt 2007, 10:15
Hallo,

wenn wir schon dabei sind, Zuweisungen zu vermeiden, dann gleich richtig:
Delphi-Quellcode:
function TestFunc(const s: String): Boolean; Inline;
var
  i: Integer;
begin
  Result := False;
  if Length(s) = 32 then
  begin
    for i := 1 to 32 do
       if FraudChar [s[i]] then
         Exit;
    Result := True;
  end;
end;
Wobei es hier ja um Geschwindigkeit geht, und die Zuweisung von Result das eax-Register blockiert. Deshalb sollte Result eigentlich nur am Ende der Funktion gesetzt werden. Das darf aber jemand anderes machen...

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:40 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