Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Geocaching Tool: Ermitteln des Wordwerts und dessen Quersumme zu berechnen (https://www.delphipraxis.net/170863-geocaching-tool-ermitteln-des-wordwerts-und-dessen-quersumme-zu-berechnen.html)

Luckie 6. Okt 2012 21:22

Geocaching Tool: Ermitteln des Wordwerts und dessen Quersumme zu berechnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
GEOToolsWords

GEOToolsWords ist ein Programm, um den Wortwert und dessen Quersumme zu berechnen. Beispiel: Der Wortwert von AB, wenn A = 1 ist, wäre 3. Der Wortwert von HALLO wäre 48 und die Quersumme dann 12. Leerzeichen werden entfernt und das Wort in Großbuchstaben umgewandelt, so wie es beim Geocaching üblich ist.

Die Oberfläche sollte selbsterklärend sein.

Entstanden ist es aufgrund meines neue Hobbies Geocaching. ich musste 55 mal den Wortwert und dessen Quersumme berechnen.

Amateurprofi 8. Okt 2012 00:07

AW: Geocaching Tool: Ermitteln des Wordwerts und dessen Quersumme zu berechnen
 
Hab ich mir mal angeschaut.
Das ganze wurde m.E. eher suboptimal umgesetzt.

NonAlpha-Zeichen werden in die Berechnung eingeschlossen, mit verwirrenden Ergebnissen.
Beispiel : Die Eingabe "." (Dezimalpunkt) führt zu einer Summe von 4294967278.
Nun kann man der Auffassung sein, es sei Sache des Anwenders, nur solche Zeichen einzugeben, die auch berechnet werden sollen, aber dann müsste man auch der Auffassung sein, dass z.B. Blanks nicht entfernt werden müssen.
Also : Wenn schon "Fehleingaben" erkannt werden, dann bitte konsequent.

Die mit der Ermittlung der Summe verbundenen Aktionen
- Blanks entfernen
- In UpperCase wandeln
- Umlaute entfernen (7 Mal das bummelige StringReplace)
sind alle höchst überflüssig, wenn man die Berechnung etwas besser gestaltet.

Wenn ich die Option "A=1" oder "A=26" klicke, dann erwarte ich, dass die aktuelle Eingabe neu bewertet wird.

Nun ja, ich will nicht nur meckern.
Deshalb nachstehend eine verbesserte Prozedur "Calc", die alle anderen Prozeduren in der Unit überflüssig macht und deutlich schneller arbeitet, wobei letzteres hier wohl irrelevant ist.
(Hoffentlich habe ich nichts übersehen).


Delphi-Quellcode:
PROCEDURE TGeoToolsWords.Calc(A1:boolean=true);
var n:integer; sum,digsum,corr:cardinal; s:AnsiString; p:PAnsiChar;
PROCEDURE Add(Value:AnsiChar); overload;
begin
   inc(n);
   s[n]:=Value;
   inc(sum,Ord(Value));
end;
PROCEDURE Add(Value1,Value2:AnsiChar); overload;
begin
   Add(Value1);
   Add(Value2);
end;
begin
   sum:=0;
   if FInputWord<>'' then begin
      SetLength(s,Length(FInputWord)*2);
      p:=PAnsiChar(FInputWord);
      n:=0;
      repeat
         case p^ of
            'A'..'Z' : Add(p^);
            'a'..'z' : Add(AnsiChar(Ord(p^)-Ord('a')+Ord('A')));
            'Ä','ä' : Add('A','E');
            'Ö','ö' : Add('O','E');
            'Ü','ü' : Add('U','E');
            'ß'     : Add('S','S');
         end;
         inc(p);
      until p^=#0;
      FInputWord:=Copy(s,1,n);
      dec(sum,n*(Ord('A')-1));
      if not A1 then sum:=n*27-sum;
   end;
   FSumLetters:=sum;
   digsum:=0;
   while sum>0 do begin
      inc(digsum,sum mod 10);
      sum:=sum div 10;
   end;
   FCrossSum:=digsum;
end;

Luckie 8. Okt 2012 08:34

AW: Geocaching Tool: Ermitteln des Wordwerts und dessen Quersumme zu berechnen
 
Danke für deine Kritik und die Verbesserung des Codes. Ich denke, das werde ich dem nächst in den Code übernehmen.


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