Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion mit Repeat-Schleife erzeugt falsches Ergebnis (https://www.delphipraxis.net/51621-funktion-mit-repeat-schleife-erzeugt-falsches-ergebnis.html)

Neotracer64 16. Aug 2005 01:40


Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Es ist für mich wirklich ein Mysterium.
Ich poste jetzt mal eine Funktion, die etwas berechnen soll.
Zuerst kam etwas falsches raus, deswegen habe ich Testdrucke mit Showmessage eingebaut und plötzlich
kommt das richtige raus. Eigentlich dürfte der Befehl ShowMessage(); doch wohl kaum das Ergebnis beinflussen, aber seht selbst:

Delphi-Quellcode:
function CalculateSerial: String;
var
  CalcString : String;
  i: Integer;
  edx: Integer;
begin

CalcString := 'Aimkill';
i:=1;

Repeat
edx := edx + ord(CalcString[i]);
//Showmessage(CalcString[i]+' -- '+ IntToStr(ord(CalcString[i])));
i:=i+2;
Until i > Length(CalcString);

result:=IntToStr(edx);

end;
Ergebnis ohne ShowMessage: 4405795
Ergebnis mit Showmessage: 387

Das Ergebnis mit ShowMessage stimmt. Ich hab nachgerechnet.
Nun bin ich gespannt was ihr dazu sagt.

Luckie 16. Aug 2005 01:56

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Eventuell wird durch das ShowMessage der Speicher anderst organisiert. Ich nehme mal an, dass ohne ShowMessage im Speicher Mist steht, weil da was nicht stimmt bzw. du unsauber mit dem Speicher umgehst. Dein ShowMessage biegt es aber wieder ungewollt hin. Oder was auch sein kann: Ohne dein ShowMessage optimiert der Compiler da was weg, weil die Werte nicht benutzt werden oder so. Gibt der Compiler ohne ShowMessage irgendwie einen Hint oder ein warning aus?

Neotracer64 16. Aug 2005 02:01

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Danke Luckie !
Du hast Recht. :shock:
Und zwar gibt er die Warnung aus, dass edx nicht initialisiert wurde. Ich hab jetzt einfach mal edx:=0; am Anfang der Funktion hingeschrieben und jetzt klappts. Man ist das peinlich :pale:

Ich dachte das muss man nicht machen. Oder ist es sauberer jede Variable mit :=0 oder :='' zu "initialisieren" ?

Luckie 16. Aug 2005 02:05

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Wenn ihnen nicht unbedingt ein Wert zugewiesen wird, mit Sicherheit. Globale variablen am besten gleich bei der Deklarartion initialisieren.

Neotracer64 16. Aug 2005 02:07

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Ich werde diesen Ratschlag befolgen.

Vielen Dank Luckie. So spät in der Nacht noch dabei Usern zu helfen. Das find ich wirklich überaus nett von dir. :thumb:

:dp:

Pr0g 16. Aug 2005 03:05

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
 
Statt
Delphi-Quellcode:
i := i + 2;
kannst du auch
Delphi-Quellcode:
Inc(i, 2);
schreiben.


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