AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Min-Sort Verfahren

Ein Thema von delphi_master · begonnen am 22. Nov 2007 · letzter Beitrag vom 5. Mär 2013
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 11:00
Hallo,

ich wollte das auch mal ausprobieren, aber bei mir kommt irgendwie immer ein Fehler. Könnt ihr mir dabei helfen?
Würdest Du uns auch verraten welche Fehlermeldung?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#12

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 11:23
Da Pascal keinen Unterschied zwischen i und I macht, benutzt du in
Delphi-Quellcode:
for i:= 1 to 20 do
memo1.Lines.Add(inttostr(za[i]));
den äußeren Schleifenindex doppelt. Nimm einfach ein anderen zB k (der dann natürlich deklariert werden muß).
  Mit Zitat antworten Zitat
cobi23

Registriert seit: 25. Feb 2013
12 Beiträge
 
#13

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 11:48
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.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 12:11
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...
  Mit Zitat antworten Zitat
cobi23

Registriert seit: 25. Feb 2013
12 Beiträge
 
#15

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 12:56
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:
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.
Könnt ihr mir bitte helfen?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#16

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 13:23
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]));

Geändert von gammatester ( 4. Mär 2013 um 13:26 Uhr)
  Mit Zitat antworten Zitat
cobi23

Registriert seit: 25. Feb 2013
12 Beiträge
 
#17

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 14:19
Meinst du so?

Code:
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.
das programm hat immer noch die selben probleme
auch wenn ich etwas ändere
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#18

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 15:00
Ich habe mir einmal erlaubt, Deinen Sourcecode ein wenig zu formatieren:
Delphi-Quellcode:
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;
Da frag ich mich schon was Du erreichen willst.
Ü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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
cobi23

Registriert seit: 25. Feb 2013
12 Beiträge
 
#19

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 16:37
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.

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?

Geändert von cobi23 ( 4. Mär 2013 um 16:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Min-Sort Verfahren

  Alt 4. Mär 2013, 16:42
Wenn man sich das mal in Ruhe anschaut:
Zitat:
Delphi-Quellcode:
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; //??, wo liegt der Sinn?
  for I:=1 to 6 do
  begin
    x:=IntToStr(Random(100)+1); //IntToStr dürfte gar nicht funktionieren, x ist integer
    y:=za[k]; //Einmal hin...
    za[k]:=y; //und einmal her, was soll sich geändert haben?
    for k:=1 to 6 do
    memo1.Lines.Add(IntToStr(za[k]));
  end;

end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 17:44 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