Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Min-Sort Verfahren (https://www.delphipraxis.net/103852-min-sort-verfahren.html)

p80286 4. Mär 2013 16:46

AW: Min-Sort Verfahren
 
Nach einem zweiten Blick auf Deinen Sourcecode
würde ich sagen, der compiliert noch nicht einmal:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
....,x,...:integer;
begin
  ...
    x:=IntToStr(Random(100)+1);
   ...
end;
Des weiteren könnte es Dir helfen wenn Du ein wenig Ordnung in Deinen Code bringst.
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

DeddyH 4. Mär 2013 16:48

AW: Min-Sort Verfahren
 
Meine Rede ;)

p80286 4. Mär 2013 22:35

AW: Min-Sort Verfahren
 
[OT] hab ich jetzt auch gemerkt, da fehlte wohl der rote Kasten [/OT]

Gruß
K-H

Jumpy 5. Mär 2013 07:34

AW: Min-Sort Verfahren
 
Ich weise nur mal darauf hin, dass das Problem scheinbar 2x bearbeitet wird:

http://www.delphipraxis.net/newreply...ime=1362468766

Sir Rufo 5. Mär 2013 10:11

AW: Min-Sort Verfahren
 
Also beim Programmieren kommt es auch darauf an, dass man die Arbeit strukturiert und sich diese damit wesentlich vereinfacht.
  • Ein Array mit Integer-Zahlen soll mit Zufallszahlen gefüllt werden
  • Ein Array mit Integer-Zahlen soll sortiert werden
  • Ein Array mit Integer-Zahlen soll in einem Memo ausgegeben werden
Das führt uns doch schon mal zu folgenden Rümpfen:
Delphi-Quellcode:
// 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;
Unsere Hauptaufgabe sieht damit schon sehr reduziert aus
Delphi-Quellcode:
// 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 );
Im ganzen Satz und mit den programmierten Rümpfen (ausgenommen der Sortierung) sieht das dann so aus
(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.

cobi23 5. Mär 2013 17:03

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:
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.
Ich verstehe nicht was von mir verlangt wird. Könnt ihr mal einen Blick drauf werfen und mir helfen.

DeddyH 5. Mär 2013 17:27

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]

Sir Rufo 5. Mär 2013 17:30

AW: Min-Sort Verfahren
 
Lösche die beiden procedures mit
Delphi-Quellcode:
TForm1.*
aus dem implemention Teil und die beiden procedures aus der Klassendefinition.

Dann im Formulardesigner jeweils ein Doppelklick auf die beiden Buttons. Dann solltest du die korrekten Rümpfe haben ;)

cobi23 5. Mär 2013 17:47

AW: Min-Sort Verfahren
 
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);
  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.
Jetzt zeigt er : uselect.pas(44,10) Error: Identifier not found "AFuellen"
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?

Sir Rufo 5. Mär 2013 17:54

AW: Min-Sort Verfahren
 
Die anderen procedures (die mit ohne TForm1.*) musst du wieder nach oben kopieren ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 3 von 4     123 4      

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