![]() |
Delphi-Version: 5
Selectionsort - Problem mit richtiger Zuweisung der Werte
Hey, ich habe hier ein Problem.
Als ich in meinem Programm folgende Prozedur aufrufen ließ, hängt sich Delphi auf. Ich weiß aber nicht, wo der Fehler liegt... hier die Prozedur:
Code:
Dane fur eure Hilfe!
var
Form1: TForm1; Werte: Array[1..max] of Integer; Anzahl,Zahl: integer; [...] procedure TForm1.SelectionSort; var i,k,maxi,j:integer; wert: word; begin maxi := high(Werte); for i := 0 to maxi - 1 do begin wert := werte[i]; k := i; for j := i + 1 to maxi do if werte[j] < wert then begin wert := werte[j]; k := j; end; werte[k] := werte[i]; werte[i] := wert; end; end; Gruß, thechus |
AW: Ich weiß nicht, was da falsch ist
Zitat:
|
AW: Ich weiß nicht, was da falsch ist
Hey,
const max = 1000000; Ich weiß, dass es keinen Sinn hat. Der Lehrer verlangt dies so, zur Vorbereitung auf die bald kommenden dynamischen Arrays, Super schnelle Antwort, wie immer! Gruß, thechus |
AW: Ich weiß nicht, was da falsch ist
Delphi hängt sich nicht auf, sondern sortiert sich nen Wolf.
Ändere mal die eine Zuweisung 'maxi := ...' von 'High(Werte)' auf die tatsächliche Anzahl der im doch recht großen Array enthaltenen Werte. Oder hast Du gleich 1000000000 Werte da drinnen? SelectionSort ist eh ziemlich lahm, weil ja für jedes Element im Schnitt n/2 Vergleiche ausgeführt werden müssen. Und 'n' ist bei dir doch recht groß. |
AW: Ich weiß nicht, was da falsch ist
Hey,
das ist mir gerade aufgefallen, als ich von Herrn Raabe hingewiesen wurde. Ich hab den Wert geändert:
Code:
Anzahl und die Prozedur kommen hier ins Spiel:
procedure TForm1.SelectionSort;
var i,k,maxi,j:integer; wert: word; begin maxi := high(Anzahl); for i := 0 to maxi - 1 do begin wert := werte[i]; k := i; for j := i + 1 to maxi do if werte[j] < wert then begin wert := werte[j]; k := j; end; werte[k] := werte[i]; werte[i] := wert; end; end;
Code:
Momentane Fehlermeldung:
procedure TForm1.Button2Click(Sender: TObject);
var anfang, ende: real; begin ListBox2.clear; Anzahl := StrToInt(Edit1.Text); pause(100); PnlZeit.Caption := 'Die Zeit läuft...'; Anfang := Time; if combobox2.ItemIndex = 0 then bubblesort; if combobox2.ItemIndex = 1 then selectionsort; [...] Es taucht beim Klick auf Button2 ein Fenster mit: "Im Projekt Project1.exe ist ein Exeption der Klasse EAccessViolation aufgetreten[...]" Debugger sagt: [Warnung] Unit1.pas(110): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert Was ist denn da zu tun? Danke für eure Hilfe! Edit: Ich sollte noch hinzufügen, dass er die folgende Zeile Markiert:
Code:
for j := i + 1 to maxi do if werte[j] < wert then
Gruß, thechus |
AW: Ich weiß nicht, was da falsch ist
Zitat:
Zitat:
Grüße |
AW: Ich weiß nicht, was da falsch ist
Zitat:
Hmm... selbst wenn ich beide Werte als Integer deklariere taucht die Fehlermeldung auf. Danke für die Hilfe. Gruß, thechus |
AW: Ich weiß nicht, was da falsch ist
Zitat:
|
AW: Ich weiß nicht, was da falsch ist
Mach aus wert einen Integer. Word ist ohne Vorzeichen, Integer schon. Der Datentyp Word ist eh unsinnig.
|
AW: Ich weiß nicht, was da falsch ist
Zitat:
So hat maxi ja den Wert 100...8Wenn man im Editfeld 100 eingibt) Das Programm generiert ja zunächst eine Liste aus zufälligen Zahlen aus der Menge Anzahl. Somit muss ich doch "High(Werte[i])" nehmen, da das gerade die Werte sind, die unsortiert sind. Davon die größte Zahl. An der Fehlermeldung hat dies aber nichts weiter geändert... Kommt man da vielleicht in Widerspruch mit irgendwas oder habe ich irgendwo einen nicht existierenden Wert generiert? Hier nochmal der Quellcode:
Code:
Danke für die Hilfe... autsch...:oops:
const
max = 1000000; var Form1: TForm1; Werte: Array[1..max] of Integer; Anzahl,Zahl: integer; [...] procedure TForm1.SelectionSort; var i,k,maxi,j,wert:integer; begin maxi := high(Werte[i]); for i := 0 to maxi - 1 do begin wert := werte[i]; k := i; for j := i + 1 to maxi do if werte[j] < wert then begin wert := werte[j]; k := j; end; werte[k] := werte[i]; werte[i] := wert; end; end; Gruß, thechus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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