![]() |
Fehlermeldungen aller Art ~
Hallö zusammen :) Ich mal wieder.
Ich bastel immernoch an meinem Sortier-Programm herum und bekomme es einfach nicht auf die Reihe. Morgen ist Abgabe .. Ogott. Für ein paar meiner Fragen hab ich hier im Forum durch rumsuchen und durchlesen schon so meine Antworten gefunden, aber da gibt es noch Sachen, die ich nicht schaffe. Aaaaalso. Ich soll eine Datenmenge (Unsortierte Nachnamen) mit Hilfe von 3 Sortieralgorithmen sortieren. Meine Wahl fiel auf Bubblesort, Mergesort, sowie Quicksort. Der Bubble funktioniert auch( YUHU! :-D ), aber bei den anderen beiden hängt es ein bisschen ... Beim Merge kommt (beim Ausführen des Programms -> Ausführen des Mergesorts) eine Fehlermeldung "Zugriffsverweigerung". Und ich komme einfach nicht dahinter wieso. o_O Der Quicksort sagt mir ständig eine Meldung nach der anderen, noch bevor ich das Programm überhaupt öffnen kann. Diesmal ist es "Nicht genügend wirkliche Parameter". Könntet ihr bitte einmal drüber schauen? Vielleicht wisst ihr ja, wo meine Fehler liegen :s Hier mein Code :oops: :
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Heading: TLabel; BubbleButton: TButton; QuickButton: TButton; MergeButton: TButton; OpenButton: TButton; Eingabe: TEdit; OpenDialog1: TOpenDialog; Label2: TLabel; Ausgabe: TListBox; SaveDialog1: TSaveDialog; Speichern: TEdit; SaveButton: TButton; RadioGroup1: TRadioGroup; Aufsteigend: TRadioButton; Abfallend: TRadioButton; procedure OpenButtonClick(Sender: TObject); procedure BubbleButtonClick(Sender: TObject); procedure MergeButtonClick(Sender: TObject); procedure MergeSort(var L,R: Integer); procedure QuickButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; txtfile: Textfile; save: string; Feld, Merken: Array of string; Z: Integer; implementation {$R *.DFM} procedure Quicksort(l,r: Integer;var a : array of integer); var i, j, Merke, Mitte: Integer; begin i := l; j := r; Mitte := a[(l+r) div 2]; repeat while a[i] < Mitte do Inc(i); while Mitte < a[j] do dec(j); if i <= j then begin Merke := a[i]; a[i] := a[j]; a[j] := Merke; inc(i); dec(j); end; until i > j; if l < j then Quicksort(l,j,a); if i < r then Quicksort(i,r,a); end; procedure TForm1.MergeSort(var L, R : integer ); var i, j, k, m, m2 : Integer; begin if R>L then begin m:= (R+L) div 2; m2:= m+1; MergeSort( L, m); MergeSort( m2, R); for i:= L to m do Merken[i]:= Feld[i]; i:= L; for j:= m+1 to R do Merken[R+m+1-j]:= Feld[j]; j:= R; for k:= L to R do begin if (Merken[i] < Merken[j]) then begin Feld[k]:= Merken[i]; inc(i); end else begin Feld[k]:= Merken[j]; dec(j); end; end; end; end; procedure TForm1.OpenButtonClick(Sender: TObject); var A: Integer; begin Z:=0; OpenDialog1.Execute; Eingabe.Text:=OpenDialog1.Filename; AssignFile(txtfile, Eingabe.text); reset (txtfile); while not eof (txtfile) do begin Z:= Z+1; readln (txtfile, save); Ausgabe.items.add(save); end; Setlength(Feld, Z); reset(txtfile); for A:= 0 to Z-1 do begin readln (txtfile, Feld[A]); end; end; procedure TForm1.BubbleButtonClick(Sender: TObject); var x: Integer; Temp: String; Done: Boolean; begin Ausgabe.clear; repeat done:= True; for x := Low(Feld) to High(Feld) -1 do begin if Feld[x] > Feld[x+1] then begin Temp := Feld[x]; Feld[x] := Feld[x+1]; Feld[x+1] := Temp; Done := False; end; end; until done; if Aufsteigend.checked=True then begin for x:= Low(Feld) to High(Feld) do begin Ausgabe.Items.add(Feld[x]); end; end else if Abfallend.checked=True then begin for x:= High(Feld) downto Low(Feld) do begin Ausgabe.Items.add(Feld[x]); end; end; end; procedure TForm1.MergeButtonClick(Sender: TObject); var g,c,x: Integer; begin c:= Low(Feld); g:= High(Feld); Ausgabe.clear; begin MergeSort (c,g); if Aufsteigend.checked=True then begin for x:= Low(Feld) to High(Feld) do begin Ausgabe.Items.add(Feld[x]); end; end else if Abfallend.checked=True then begin for x:= High(Feld) downto Low(Feld) do begin Ausgabe.Items.add(Feld[x]); end; end; end; end; procedure TForm1.QuickButtonClick(Sender: TObject); var i,j: Integer; begin i:= Low(Feld); j:= High(Feld); Ausgabe.clear; begin QuickSort (i,j); end; end; end. |
AW: Fehlermeldungen aller Art ~
Formatier Deinen Code mal nachvollziehbar und sag uns dann, in welchen Zeilen Fehlermeldungen kommen. Zumindest ich habe keine Lust, mich da durchzuwühlen.
|
AW: Fehlermeldungen aller Art ~
Erstmal empfehle ich dir, die Indexprüfung, in den Projektoptionen zu aktivieren, vorallem wenn man Kreuz und Quer in Arrays rummacht.
Und dann ... [edit] DeddyH war schneller |
AW: Fehlermeldungen aller Art ~
1. Sprechende Variablennamen verwenden. "i, j, k, m, m2 : Integer;" Wenn du in zwei Monaten noch weißt was m2 macht, haste Glück gehabt.
2. Bei den Fehlern wird auch immer eine Zeile angegeben 3. Der Fehler nennt sich doch sicher "Zugriffsverletzung" und nicht "Zugriffsverweigerung" 4. Deinem Merken-Array im Mergesort weist du nirgends eine Länge zu (oder ich hab's übersehen) 5. Schau dir mal die Signatur deiner Quicksort-Method an. Wieviele Parameter? So und nun den Aufruf anschauen. Wieviele Parameter? |
AW: Fehlermeldungen aller Art ~
Ohne hinzugucken würde ich bei i,j,k auf Zählvariablen tippen. Das ist allgemein so üblich, also alles halb so wild.
Viel lustiger ist, das Du Code abschreibst, den du überhaupt nicht verstehst. Ist es das, was man heutzutage in der Schule lernt? Schade eigentlich. |
AW: Fehlermeldungen aller Art ~
Der Quicksort ist so in Ordnung, allerdings solltest Du mal nachdenken mit was Du Ihn aufrufen willst
Delphi-Quellcode:
Da wo Du ihn aufrufen willst übergibst Du a also das zu sortierende Integer Array nicht
procedure Quicksort(L, R: Integer; [b]var a: array of Integer[/b]);
statt dessen kruschtelst DUu mit Feld herum welches so deklariert ist
Delphi-Quellcode:
Feld, Merken: Array of string;
|
AW: Fehlermeldungen aller Art ~
Bitte gib deinem ersten Beitrag einen aussagekräftigen Titel, der auch etwas über das Problem aussagt.
|
AW: Fehlermeldungen aller Art ~
Zitat:
|
AW: Fehlermeldungen aller Art ~
Zitat:
|
AW: Fehlermeldungen aller Art ~
Hat sich ja wohl mittlerweile von allein erledigt:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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