Min-Sort Verfahren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute
Ich brauche dringend hilfe in der Schule müssen wir als Hausübung Zuffalsgenerierte Zahlen in einem memo ausgeben und dies dann sortiert in einem zweiten ausgeben. Das ganze soll mit dem Min - Sort Verfahren geschehen doch leider habe ich keine Ahnung wie das gehen soll :gruebel: !!! Könnt ihr mir bitte helfen :?: Ich habe den Arbeitsauftrag per email bekommen (ich häng in euch an ) |
Re: Min-Sort Verfahren
Naja, steht doch im Text, oder?
Suche in deinem Array den kleinsten Wert und schreibe ihn an die erste Stelle in der Ausgabeliste. Danach suchst du aus dem verbleibenden Rest, den kleinsten Wert und schreibst ihn an die nächste Stelle in der Ausgabeliste, usw. |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gehören nur funktionierende Code-Snippets hinein. |
Re: Min-Sort Verfahren
Schaut man mal über Google, wie der Sortieralgorithmus funktioniert bekommt man sogar bei Wikipedia den fertigen Pascal-Code :-P
Delphi-Quellcode:
Hab ihn nicht getestet, dürfte aber korrekt sein.
{ MinSort, als eine Variante von SelectionSort }
{ Uebergabe: Zu sortierendes Array, das an den Stellen 1 bis n mit natuerlichen Zahlen belegt ist } Procedure MinSort(Var Feld: Array Of LongInt); Var i, j : LongInt; { Zaehlvariablen } Temp, Min: LongInt; { Zwischenspeicher, Minimum } Begin For i := 0 To High(Feld) Do Begin Min := i; For j := i + 1 To High(Feld) Do If Feld[j] < Feld[Min] Then Min := j; Temp := Feld[Min]; Feld[Min] := Feld[i]; Feld[i] := Temp; End; End; { Procedure MinSort } Wenn zum Beispiel in Edit1 die Länge des Arrays (Anzahl dessen Felder) eingegben werden soll, dann geht das wie folgt:
Delphi-Quellcode:
und im Quelltext:
iArray = array of integer;
Delphi-Quellcode:
Vergiss nicht in der FormCreate Randomize; aufzurufen um den Zufallsgenerator zu initialisieren.
if TryStrToInt(Edit1.Text, x) then begin
setlength(iArray, x); for i := 0 to x do iArray[i] := Random(100) else ShowMesage('Fehlerhafte Eingabe. +'Edit1.Text'+ entspricht keinem Integer!'); end; |
Re: Min-Sort Verfahren
Zitat:
|
Re: Min-Sort Verfahren
Jap und zum Selectionsort gehören auch Min- und Maxsort :)
|
Re: Min-Sort Verfahren
Zitat:
|
Re: Min-Sort Verfahren
Mal 'n wenig QällKot spendier:
Delphi-Quellcode:
unit a_scheiss;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } za: array [1 .. 20] of integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i,x,y: integer; begin memo1.Clear; memo2.Clear; for I := 1 to 20 do za[i] := i; for I := 1 to 20 do begin x := random(20-i)+1; y := za[i]; za[i] := za[x]; za[x] := y; end; for i := 1 to 20 do memo1.Lines.Add(inttostr(za[i])); end; procedure TForm1.Button2Click(Sender: TObject); var i,j,m,x: integer; begin for I := 1 to 20 do begin x := i; for j := i+1 to 20 do if za[x] > za[j] then x := j; begin m := za[x]; za[x] := za[i]; za[i] := m; end; memo2.Lines.Add(inttostr(za[i])); end; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end.
Delphi-Quellcode:
//Edit: mal nachgelesen hab
object Form1: TForm1
Left = 0 Top = 0 Caption = 'A Scheiß' ClientHeight = 216 ClientWidth = 335 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 4 Top = 6 Width = 75 Height = 25 Caption = 'erzeuge' TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 4 Top = 32 Width = 75 Height = 25 Caption = 'max sort' TabOrder = 1 OnClick = Button2Click end object Button3: TButton Left = 4 Top = 58 Width = 75 Height = 25 Caption = 'close' TabOrder = 2 OnClick = Button3Click end object Memo1: TMemo Left = 83 Top = 0 Width = 122 Height = 213 Lines.Strings = ( 'Memo1') TabOrder = 3 end object Memo2: TMemo Left = 206 Top = 0 Width = 123 Height = 213 Lines.Strings = ( 'Memo2') TabOrder = 4 end end |
Re: Min-Sort Verfahren
Zitat:
Zitat:
Ganz oben, die Erläuterung. Ich beziehe mich darauf. |
AW: Min-Sort Verfahren
Hallo,
ich wollte das auch mal ausprobieren, aber bei mir kommt irgendwie immer ein Fehler. Könnt ihr mir dabei helfen? :?:
Code:
Bei mir erscheint dann "uselect.pas(57,12) Error: Illegal assignment to for-loop variable "i" "
unit USelect;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } za: array [1..20] of integer; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var i,x,y:Integer; begin memo1.Clear; memo2.Clear; for I:= 1 to 20 do za[i] :=i; for I:= 1 to 20 do begin x:=Random(20-i)+1; y:=za[i]; za[i]:=za[x]; za[x]:=y; for i:= 1 to 20 do memo1.Lines.Add(inttostr(za[i])); end; end; procedure TForm1.Button3Click(Sender: TObject); var i,j,m,x:integer; begin for I:= 1 to 20 do begin x:=i; for j:=i+1 to 20 do if za[x] > za[j] then x:=j; begin m:=za[x] za[x] := za [i]; za[i] := m; end; memo2.Lines.Add(inttostr(za[i])); end; end; end; procedure TForm1.FormCreate(Sender:TObject); begin randomize; end; end. Ich verstehe da nicht was von mir verlangt wird. |
AW: Min-Sort Verfahren
Zitat:
Gruß K-H |
AW: Min-Sort Verfahren
Da Pascal keinen Unterschied zwischen i und I macht, benutzt du in
Delphi-Quellcode:
den äußeren Schleifenindex doppelt. Nimm einfach ein anderen zB k (der dann natürlich deklariert werden muß).
for i:= 1 to 20 do
memo1.Lines.Add(inttostr(za[i])); |
AW: Min-Sort Verfahren
Danke für die Antwort, jetzt kommt aber bei mir diese Fehlermeldung:
"uselect.pas(73,7) Fatal: Syntax error, ";" expected but "identifier ZA" found "
Code:
unit USelect;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } za: array [1..20] of integer; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var i,x,y,k:Integer; begin memo1.Clear; memo2.Clear; for I:= 1 to 20 do za[i] :=i; for I:= 1 to 20 do begin x:=Random(20-i)+1; y:=za[i]; za[i]:=za[x]; za[x]:=y; for k:= 1 to 20 do memo1.Lines.Add(inttostr(za[i])); end; end; procedure TForm1.Button3Click(Sender: TObject); var i,j,m,x:integer; begin for I:= 1 to 20 do begin x:=i; for j:=i+1 to 20 do if za[x] > za[j] then x:=j; begin m:=za[x] za[x] := za [i]; za[i] := m; end; memo2.Lines.Add(inttostr(za[i])); end; end; end; procedure TForm1.FormCreate(Sender:TObject); begin randomize; end; end. |
AW: Min-Sort Verfahren
In dem Fall sagt die Meldung doch schon, was Sache ist :)
Warum wird in der Zeile wohl ein Semikolon erwartet? Kurzer Blick in die Zeile davor... |
AW: Min-Sort Verfahren
Oh, mein Fehler. Danke das du mich darauf hingewiesen hast. Das Programm funktioniert, aber leider kommen bei dem Memo-Feld für die Zahlen immer die gleichen Zahlen. Und wenn ich auf das Button für das Ordnen der Zahlen drücke, kommen unterschiedliche Zahlen heraus.
Code:
Könnt ihr mir bitte helfen?:cry:
unit USelection;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } za: array [1..100] of integer; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var i,x,y,k:integer; begin memo1.Clear; memo2.Clear; for I:=1 to 100 do za[i]:=i; for I:=1 to 100 do begin x:=Random(100-i)+1; y:=za[i]; za[x]:=y; for k:=1 to 100 do memo1.Lines.Add(IntToStr(za[i])); end; end; procedure TForm1.Button3Click(Sender: TObject); var i,j,m,x:integer; begin for I:=1 to 100 do begin x:=i; for j:=i+1 to 100 do if za[x] > za[j] then x:=j; begin m:=za[x]; za[x]:=za[i]; za[i]:=m; memo2.lines.Add(inttostr(za[i])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end. |
AW: Min-Sort Verfahren
Du mußt natürlich den bemängelten doppelten Index in der gesamten Schleife ersetzen, nicht nur in der for-Anweisung, also:
Delphi-Quellcode:
for k:=1 to 100 do
memo1.Lines.Add(IntToStr(za[k])); |
AW: Min-Sort Verfahren
Meinst du so?
Code:
das programm hat immer noch die selben probleme
unit USelection;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } za: array [1..6] of integer; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var i,x,y,k:integer; begin memo1.Clear; memo2.Clear; for I:=1 to 6 do za[k]:=i; for I:=1 to 6 do begin x:=IntToStr(Random(100)+1); y:=za[k]; za[k]:=y; for k:=1 to 6 do memo1.Lines.Add(IntToStr(za[k])); end; end; procedure TForm1.Button3Click(Sender: TObject); var i,j,m,x:integer; begin for I:=1 to 6 do begin x:=i; for j:=i+1 to 6 do if za[x] > za[j] then x:=j; begin m:=za[x]; za[x]:=za[i]; za[i]:=m; memo2.lines.Add(inttostr(za[i])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end. auch wenn ich etwas ändere:( |
AW: Min-Sort Verfahren
Ich habe mir einmal erlaubt, Deinen Sourcecode ein wenig zu formatieren:
Delphi-Quellcode:
Da frag ich mich schon was Du erreichen willst.
procedure TForm1.Button3Click(Sender: TObject);
var i,j,m,x:integer; begin for I:=1 to 6 do begin x:=i; for j:=i+1 to 6 do if za[x] > za[j] then x:=j; begin m:=za[x]; za[x]:=za[i]; za[i]:=m; memo2.lines.Add(inttostr(za[i])); end; end; end; Übrigens ist Delphi natürlich selbstdokumentierend, aber Kommentare erleichtern die Fehlersuche meist ungemein, vor allem wenn darin steht warum etwas gemacht wird. Gruß K-H |
AW: Min-Sort Verfahren
Ich möchte das so haben:
Mittels einen ersten Button soll im 1.Memo-Feld, die Zufallszahlen generiert werden und mittels einen 2.Button soll in einen 2.Memo diese Zufallszahlen mittels selectionsort geordnet werden. Mein Problem ist, dass mein Programm beim ersten button-Klick im Memo die gleichen Zufallszahlen erscheinen unzwar alle 100. Im ersten Memo wird dabei in allen Arrays von 1 bis 100 hochgezählt bis es zur 100 angelangt. Und wenn ich mit den 2.Button die Zahlen sortieren möchte kommt folgende Reihenfolge: 98 98 99 100 100 Und es kommt immer die gleichen zufallszahlen und die gleiche REihenfolge nacht selectionsort. Das ist wirklich zum verzweifeln.:cry: Hier noch mal der Quellcode
Code:
{$mode objfpc}{$H+}
interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } za: array [1..6] of integer; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var i,x,y,k:integer; begin memo1.Clear; memo2.Clear; for I:=1 to 6 do za[k]:=i; for I:=1 to 6 do begin x:=IntToStr(Random(100)+1); y:=za[k]; za[k]:=y; for k:=1 to 6 do memo1.Lines.Add(IntToStr(za[k])); end; end; procedure TForm1.Button3Click(Sender: TObject); var i,j,m,x:integer; begin for I:=1 to 6 do begin x:=i; for j:=i+1 to 6 do if za[x] > za[j] then x:=j; begin m:=za[x]; za[x]:=za[i]; za[i]:=m; memo2.lines.Add(inttostr(za[i])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end. Ach ja ich benutze Lazarus, ist das der Grund dafür? |
AW: Min-Sort Verfahren
Wenn man sich das mal in Ruhe anschaut:
Zitat:
|
AW: Min-Sort Verfahren
Nach einem zweiten Blick auf Deinen Sourcecode
würde ich sagen, der compiliert noch nicht einmal:
Delphi-Quellcode:
Des weiteren könnte es Dir helfen wenn Du ein wenig Ordnung in Deinen Code bringst.
procedure TForm1.Button2Click(Sender: TObject);
....,x,...:integer; begin ... x:=IntToStr(Random(100)+1); ... end; Dann sollte Dir aufffallen, daß Du den wert von x niemals in das Array bzw. das Memo bringst. Also investiere einmal 10 Minuten, und dann sehen wir weiter. Gruß K-H |
AW: Min-Sort Verfahren
Meine Rede ;)
|
AW: Min-Sort Verfahren
[OT] hab ich jetzt auch gemerkt, da fehlte wohl der rote Kasten [/OT]
Gruß K-H |
AW: Min-Sort Verfahren
Ich weise nur mal darauf hin, dass das Problem scheinbar 2x bearbeitet wird:
http://www.delphipraxis.net/newreply...ime=1362468766 |
AW: Min-Sort Verfahren
Also beim Programmieren kommt es auch darauf an, dass man die Arbeit strukturiert und sich diese damit wesentlich vereinfacht.
Delphi-Quellcode:
Unsere Hauptaufgabe sieht damit schon sehr reduziert aus
// Ein Integer-Array mit zufälligen Zahlen füllen
procedure FillArray( var AIntArray : array of Integer; Min, Max : Integer ); begin end; // Ein Integer-Array sortieren procedure SortArray( var AIntArray : array of Integer ); begin end; // Ein Integer-Array in ein Memo ausgeben procedure WriteArrayToMemo( const AIntArray : array of Integer; AMemo : TMemo ); begin end;
Delphi-Quellcode:
Im ganzen Satz und mit den programmierten Rümpfen (ausgenommen der Sortierung) sieht das dann so aus
// Mit Zahlen im Bereich 1 bis 100 füllen
FillArray( MeinArray, 1, 100 ); // Ausgabe im Memo1 WriteArrayToMemo( MeinArray, Memo1 ); // Array Sortieren SortArray( MeinArray ); // Ausgabe in Memo2 WriteArrayToMemo( MeinArray, Memo2 ); (EDIT: ich habe das jetzt auch mal an den Aufgabentext angepasst ;))
Delphi-Quellcode:
unit Main_ViewU;
interface uses SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class( TForm ) Unsortiert_Memo : TMemo; Sortiert_Memo : TMemo; Erzeuge_Button : TButton; MaxSort_Button : TButton; procedure Erzeuge_ButtonClick( Sender : TObject ); procedure MaxSort_ButtonClick( Sender : TObject ); private public end; var Form1 : TForm1; // Array mit den Zahlen MeinArray : array [1 .. 20] of integer; implementation {$R *.dfm} // Ein Integer-Array mit zufälligen Zahlen füllen procedure FillArray( var AIntArray : array of integer; Min, Max : integer ); var LIdx : integer; begin for LIdx := Low( AIntArray ) to High( AIntArray ) do begin AIntArray[LIdx] := Random( Max - Min + 1 ) + Min; end; end; // Ein Integer-Array sortieren procedure SortArray( var AIntArray : array of integer ); begin end; // Ein Integer-Array in ein Memo ausgeben procedure WriteArrayToMemo( const AIntArray : array of integer; AMemo : TMemo ); var LIdx : integer; begin AMemo.Lines.BeginUpdate; try AMemo.Clear; for LIdx := Low( AIntArray ) to High( AIntArray ) do begin AMemo.Lines.Add( IntToStr( AIntArray[LIdx] ) ); end; finally AMemo.Lines.EndUpdate; end; end; procedure TForm1.Erzeuge_ButtonClick( Sender : TObject ); begin // Mit Zahlen im Bereich 1 bis 100 füllen FillArray( MeinArray, 1, 100 ); // Ausgabe im Memo1 WriteArrayToMemo( MeinArray, Unsortiert_Memo ); end; procedure TForm1.MaxSort_ButtonClick( Sender : TObject ); begin // Array Sortieren SortArray( MeinArray ); // Ausgabe in Memo2 WriteArrayToMemo( MeinArray, Sortiert_Memo ); end; end. |
AW: Min-Sort Verfahren
Vielen Dank für dein Hilfe,
Jetzt hab ich dieses Problem, es zeigt uselect.pas(20,15) Error: Forward declaration not solved "TForm1.SelectionsortClick(TObject);" uselect.pas(21,15) Error: Forward declaration not solved "TForm1.ZufallszahlClick(TObject);" uselect.pas(63,1) Fatal: There were 2 errors compiling module, stopping
Code:
Ich verstehe nicht was von mir verlangt wird. Könnt ihr mal einen Blick drauf werfen und mir helfen.
unit Uselect;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Zufallszahl: TButton; Selectionsort: TButton; MemoZufallszahl: TMemo; MemoSelect: TMemo; procedure SelectionsortClick(Sender: TObject); procedure ZufallszahlClick(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; A: array [1..20] of integer; implementation {$R *.lfm} procedure AFuellen(var insArray: array of integer;Min, Max: integer); var i:integer; begin for i:= Low(insArray) to High (insArray) do begin insArray[i]:= Random(Max-Min+1)+Min; end; end; procedure ArraySortieren( var k:array of integer); Var i, j : LongInt; Temp, Min: LongInt; Begin For i := Low(k) To High(k) Do Begin Min := i; For j := i+1 To High(k) Do If k[j] < k[Min] Then Min := j; Temp := k[Min]; k[Min] := k[i]; k[i] := Temp; End; End; end. procedure InsMemo(const insArray: array of integer; AMemo:TMemo); var x:integer; begin AMemo.Lines.BeginUpdate; try AMemo.Clear; for x:= Low(insArray) to High (insArray) do begin AMemo.Lines.Add(IntToStr(insArray[x])); end; finally AMemo.Lines.EndUpdate; end; end; { TForm1 } procedure TForm1.ZufallszahlButtonClick(Sender: TObject); begin AFuellen(A,1,100); InsMemo(A,MemoZufallszahl); end; procedure TForm1.SelectionsortClick(Sender: TObject); begin SortArray(A); InsMemo(A,MemoSelect); end; end. |
AW: Min-Sort Verfahren
Das sieht nach C&P aus, da zumindest im Fall von ZufallszahlClick keine Übereinstimmung im implementation-Abschnitt existiert. Wieso packst Du nicht einfach 2 Buttons auf das Formular, benennst sie entsprechend und schreibst dann den Code in deren OnClick-Handler?
[edit] P.S.: Benutze doch bitte Delphi-Tags, das ist die "Helm"-Schaltfläche im Beitragseditor, dann ist der Code gleich besser zu lesen samt Syntax-Highlighting. [/edit] |
AW: Min-Sort Verfahren
Lösche die beiden procedures mit
Delphi-Quellcode:
aus dem implemention Teil und die beiden procedures aus der Klassendefinition.
TForm1.*
Dann im Formulardesigner jeweils ein Doppelklick auf die beiden Buttons. Dann solltest du die korrekten Rümpfe haben ;) |
AW: Min-Sort Verfahren
Delphi-Quellcode:
Jetzt zeigt er : uselect.pas(44,10) Error: Identifier not found "AFuellen"
unit Uselect;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Zufallszahl: TButton; Selectionsort: TButton; MemoZufallszahl: TMemo; MemoSelect: TMemo; procedure SelectionsortClick(Sender: TObject); procedure ZufallszahlClick(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; A: array [1..20] of integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.ZufallszahlClick(Sender: TObject); begin AFuellen(A,1,100); InsMemo(A,MemoSelect); end; procedure TForm1.SelectionsortClick(Sender: TObject); begin ArraySortieren(A); InsMemo(A,MemoSelect); end; procedure AFuellen(var InsArray:array of integer;Min, Max: integer); var i:integer; begin for i:= Low(InsArray) to High (InsArray) do begin InsArray[i]:= Random(Max-Min+1)+Min; end; end; procedure ArraySortieren( var k:array of integer); Var i, j : LongInt; Temp, Min: LongInt; Begin For i := Low(k) To High(k) Do Begin Min := i; For j := i+1 To High(k) Do If k[j] < k[Min] Then Min := j; Temp := k[Min]; k[Min] := k[i]; k[i] := Temp; End; End; end. procedure InsMemo(const insArray: array of integer; AMemo:TMemo); var x:integer; begin AMemo.Lines.BeginUpdate; try AMemo.Clear; for x:= Low(insArray) to High (insArray) do begin AMemo.Lines.Add(IntToStr(insArray[x])); end; finally AMemo.Lines.EndUpdate; end; end; end. uselect.pas(45,9) Error: Identifier not found "InsMemo" uselect.pas(50,17) Error: Identifier not found "ArraySortieren" uselect.pas(51,10) Error: Identifier not found "InsMemo" uselect.pas(82,1) Fatal: There were 4 errors compiling module, stopping Und was soll ich jetzt machen? |
AW: Min-Sort Verfahren
Die anderen procedures (die mit ohne TForm1.*) musst du wieder nach oben kopieren ;)
|
AW: Min-Sort Verfahren
Nochmals danke. Jetzt kommen diese Fehlermeldungen:
uselect.pas(22,15) Error: Forward declaration not solved "TForm1.InsMemo(const Open Array Of LongInt,TMemo);" uselect.pas(23,15) Error: Forward declaration not solved "TForm1.AFuellen(var Open Array Of LongInt,LongInt,LongInt);" uselect.pas(24,15) Error: Forward declaration not solved "TForm1.ArraySortieren(var Open Array Of LongInt);" uselect.pas(87,1) Fatal: There were 3 errors compiling module, stopping
Delphi-Quellcode:
unit Uselect;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Zufallszahl: TButton; Selectionsort: TButton; MemoZufallszahl: TMemo; MemoSelect: TMemo; procedure SelectionsortClick(Sender: TObject); procedure ZufallszahlClick(Sender: TObject); procedure InsMemo(const insArray: array of integer; AMemo:TMemo); procedure AFuellen(var InsArray:array of integer;Min, Max: integer); procedure ArraySortieren( var k:array of integer); private { private declarations } public { public declarations } end; var Form1: TForm1; A: array [1..20] of integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.ZufallszahlClick(Sender: TObject); begin AFuellen(A,1,100); InsMemo(A,MemoSelect); end; procedure TForm1.SelectionsortClick(Sender: TObject); begin ArraySortieren(A); InsMemo(A,MemoSelect); end; procedure AFuellen(var InsArray:array of integer;Min, Max: integer); var i:integer; begin for i:= Low(InsArray) to High (InsArray) do begin InsArray[i]:= Random(Max-Min+1)+Min; end; end; procedure ArraySortieren( var k:array of integer); Var i, j : LongInt; Temp, Min: LongInt; Begin For i := Low(k) To High(k) Do Begin Min := i; For j := i+1 To High(k) Do If k[j] < k[Min] Then Min := j; Temp := k[Min]; k[Min] := k[i]; k[i] := Temp; End; End; end. procedure InsMemo(const insArray: array of integer; AMemo:TMemo); var x:integer; begin AMemo.Lines.BeginUpdate; try AMemo.Clear; for x:= Low(insArray) to High (insArray) do begin AMemo.Lines.Add(IntToStr(insArray[x])); end; finally AMemo.Lines.EndUpdate; end; end; end. |
AW: Min-Sort Verfahren
Kennst Du den Unterschied zwischen einer Methode und einer regulären Prozedur? Anscheinend nicht, hier scheint mir ein Grundlagenstudium zwingend angesagt.
|
AW: Min-Sort Verfahren
Hab den Fehler gefunden. Danke Leute das ihr mir geholfen habt.
Besonderen Dank an Sir Rufo. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 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