AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Quick- und Zerlegedort - und beide funktionieren nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Quick- und Zerlegedort - und beide funktionieren nicht

Ein Thema von tankm26 · begonnen am 30. Nov 2006 · letzter Beitrag vom 30. Nov 2006
 
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Quick- und Zerlegedort - und beide funktionieren nicht

  Alt 30. Nov 2006, 09:50
Wenn du Range-Checking angehabt hättest in deinem Projekt oder dir deinen Code
nochmal genau angesehen hättest, dass wärst du vielleicht über deine Misch-Funktion
gestolpert

Delphi-Quellcode:
procedure TForm1.btmischenClick(Sender: TObject);
var w,x,j:integer;
begin
  Randomize;
  for w:=0 to max-1 do begin
    j:=Random(max)+1;
    X:=nummern[w-1];
    nummern[w-1]:=nummern[j-1];
    nummern[j-1]:=x;
  end;
  schreibediebox;
end;
Durch w := 0 to machst du eine korrekte Schleife für dynamische Arrays.
Allerdings greifst du dann mit nummern[w-1] in ersten Durchlauf auf nummern[-1] zu,
was dein Array zerstört und z.B. auf 9 Elemente kürzen kann, da du die interne
Größen-Angabe überschreibst im Speicher.

Wenn du die Funktion so umschreibst funktioniert alles (hab zumindest QuickSort getestet):
Delphi-Quellcode:
procedure TForm1.btmischenClick(Sender: TObject);
var w,x,j:integer;
begin
  for w:=0 to max-1 do begin
    j := Random(max);
    X := nummern[w];
    nummern[w] := nummern[j];
    nummern[j] := x;
  end;
  schreibediebox;
end;
Du musst bei dynamischen Arrays höllisch auf den Index achten ^^
(Zumal dein Code mit den vielen Ein-Buchstaben-Variablen glatt als C++-Code durchgehen würde )

Achso: Die vielen globalen Variablem machen deine Code sehr unübersichtlich und fehleranfällig.
Versuche mal mehr mit Parametern und eigenen Typen zu hantieren.
Manuel
  Mit Zitat antworten Zitat
 


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 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz