AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

Ein Thema von Neotracer64 · begonnen am 16. Aug 2005 · letzter Beitrag vom 16. Aug 2005
Antwort Antwort
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#1

Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 01:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 01:56
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#3

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 02:01
Danke Luckie !
Du hast Recht.
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

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

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

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 02:05
Wenn ihnen nicht unbedingt ein Wert zugewiesen wird, mit Sicherheit. Globale variablen am besten gleich bei der Deklarartion initialisieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#5

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 02:07
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.

  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#6

Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis

  Alt 16. Aug 2005, 03:05
Statt
i := i + 2; kannst du auch
Inc(i, 2); schreiben.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:38 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