Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm Selectionsort-Programm erstellen für Schule (https://www.delphipraxis.net/173562-programm-selectionsort-programm-erstellen-fuer-schule.html)

cobi23 3. Mär 2013 23:39

Programm Selectionsort-Programm erstellen für Schule
 
Hallo Delphi-Praxis,

für einen Vortrag über Selectionsort in Informatik möchte ich selber ein Programm dafür erstellen. Da Selectionsort als einfach zu programmieren galt, dachte ich, dasss es einfach wäre. Jedoch wurde ich schnell eines Besseren belehrt und verzweifle geradezu.

Ich hab gehört, dass man dafür Arrays braucht, aber ich keine Ahnung davon, da wir Arrays nie im Unterricht behandelt haben. Es wäre schön, wenn ihr mir helfen könnnte.

Das Programm soll Zahlen zufällig generieren und diese dann ordnen.

Volker Z. 4. Mär 2013 00:40

AW: Programm Selectionsort-Programm erstellen für Schule
 
Hallo,

und herzlich willkommen in der DP.

Zitat:

Ich hab gehört, dass man dafür Arrays braucht, aber ich keine Ahnung davon, da wir Arrays nie im Unterricht behandelt haben. Es wäre schön, wenn ihr mir helfen könnnte.

Aus der OH
Zitat:

Ein Array ist eine indizierte Menge von Elementen desselben Typs (des sogenannten Basistyps). Da jedes Element einen eindeutigen Index hat, kann ein Array (im Gegensatz zu einer Menge) denselben Wert mehrmals und mit unterschiedlicher Bedeutung enthalten. Arrays können statisch oder dynamisch zugewiesen werden.
Für Deine Anforderung
Delphi-Quellcode:
// so wenn die Arraygrenzen fix sind (0..100 ist nur ein Beispiel)
var
  A : array [0..100] of Integer; // hier Basistyp Integer, kann aber auch ein anderer Basistyp sein
Delphi-Quellcode:
// oder wenn es dynamisch sein soll
var
  A : array of Integer; // mit SetLength (A, 100) dann dem Array Speicher zuweisen
Dann kannst Du z. B. folgende Zuweisungen machen:
Delphi-Quellcode:
A [0] := 2;
A [1] := 5;
A [2] := 1;
A [3] := 7;
A [4] := 3;
...
A [100] := 143;
und auf die Elemente Deines Arrays zugreifen, z. B.:
Delphi-Quellcode:
if A [0] = 1 then
  TuWas
else
  TuWasAnderes
Wenn Du dann Dein Array initialisiert hast, dann musst Du nur noch sortieren - fertig.

Mit repeat und for Schleifen bist Du sicherlich vertraut. Dann schau Dir noch die Random Funktion an ggf. selectionsort auf Wikipedia und Du solltest Dein Programm für den Vortrag einfach runterprogen.

Gruß

cobi23 4. Mär 2013 11:43

AW: Programm Selectionsort-Programm erstellen für Schule
 
Danke für die Antwort, aber vorstellen was ich machen soll kann ich mir nicht. Könntest du mir sagen wie man die Zufallszahlen ins Memo bekommt? Ich möchte 6 zufällige Zahlen per Knopfdruck auf das erste Memo bekommen und diese dann mittels eines weiteren diese dann ordnen.

Ich habe versucht ein Prozedur einzufügen, irgendwie gelingt mir das nicht.
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 FormCreate(Sender: TObject);
    procedure Selectionsort(var A: array [1..6] of Integer);
  private
    { private declarations }
    A: array (1..6) of Integer;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
procedure SelectionSort(var A: array of Integer);
var
  i, j: Integer;
  pos, temp: Integer;
begin
  for i := 1 to 6 - 1 do
  begin
    pos := i;
    for j := i + 1 to 6 do
    begin
      if A[j] < A[pos] then
        pos := j;
    end;

    temp := A[i];
    A[i] := A[pos];
    A[pos] := temp;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;






end.
Es kommt folgende Fehlermeldung " uselect.pas(23,42) Fatal: Syntax error, "OF" expected but "[" found
"

DeddyH 4. Mär 2013 12:12

AW: Programm Selectionsort-Programm erstellen für Schule
 
Zitat:

Delphi-Quellcode:
A: array (1..6) of Integer;

-->
Delphi-Quellcode:
A: array [1..6] of Integer;

Angel4585 4. Mär 2013 12:21

AW: Programm Selectionsort-Programm erstellen für Schule
 
Mir persönlich gefällt es nicht, das es sowohl den Parameter mit dem Namen A gibt, als auch die private Variable mit dem Namen A.
Geht zwar, da man auf das eine mit self.A zugreifen kann, aber ist meiner Meinung nach sehr unschön, da man gerade am Anfang das verwechseln könnte und denkt es wäre beides das selbe.

joachimd 4. Mär 2013 13:22

AW: Programm Selectionsort-Programm erstellen für Schule
 
Zitat:

Zitat von Volker Z. (Beitrag 1205813)
Für Deine Anforderung
Delphi-Quellcode:
// so wenn die Arraygrenzen fix sind (0..100 ist nur ein Beispiel)
var
  A : array [0..100] of Integer; // hier Basistyp Integer, kann aber auch ein anderer Basistyp sein
Delphi-Quellcode:
// oder wenn es dynamisch sein soll
var
  A : array of Integer; // mit SetLength (A, 100) dann dem Array Speicher zuweisen
Dann kannst Du z. B. folgende Zuweisungen machen:
Delphi-Quellcode:
A [0] := 2;
A [1] := 5;
A [2] := 1;
A [3] := 7;
A [4] := 3;
...
A [100] := 143;   ////<<<<<<<<AUA!!!!

Das array wäre natürlich von 0..99, nicht von 0..100!

joachimd 4. Mär 2013 13:27

AW: Programm Selectionsort-Programm erstellen für Schule
 
Zitat:

Zitat von cobi23 (Beitrag 1205853)
Danke für die Antwort, aber vorstellen was ich machen soll kann ich mir nicht. Könntest du mir sagen wie man die Zufallszahlen ins Memo bekommt?

Du packst die Zufallszahlen ins array und gibst dann das array in ein Memo aus:
Delphi-Quellcode:
for i:=Low(myArray) to High(myArray) do
  myArray[i]:= //zufallszahl - OH: Random
myMemo.Clear;
for i:=Low(myArray) to High(myArray) do
  myMemo.Lines.Add(IntToStr(myArray[i]));

DeddyH 4. Mär 2013 13:56

AW: Programm Selectionsort-Programm erstellen für Schule
 
Wieso High() - 1?

cobi23 4. Mär 2013 14:08

AW: Programm Selectionsort-Programm erstellen für Schule
 
Ich hab so probiert, dass ich im ersten memo die zufallszahlen habe, aber ich krieg die zahlen im 2.memo nicht geordnet. Da kommt überall 0 raus.
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;
    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 }
    Zufallszahl: integer;
    A: 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);
const Zufallsbereich=100;
begin
 Memo1.Lines[0]:=IntToStr(Random(Zufallsbereich)+1);
 Memo1.Lines[1]:=IntToStr(Random(Zufallsbereich)+1);
 Memo1.Lines[2]:=IntToStr(Random(Zufallsbereich)+1);
 Memo1.Lines[3]:=IntToStr(Random(Zufallsbereich)+1);
 Memo1.Lines[4]:=IntToStr(Random(Zufallsbereich)+1);
 Memo1.Lines[5]:=IntToStr(Random(Zufallsbereich)+1);
end;

procedure TForm1.Button3Click(Sender: TObject);
var i,j,m,x:integer;
const n=5;
begin
  for i:=0 to 5 do
  begin
    x:=i;
    for j:=i+1 to n do
    if A[x] > A[j] then
    x:=j;
    begin
    m:=A[x];
    A[x]:=A[i];
    A[i]:=m;
    memo2.lines.Add(inttostr(A[i]));
    end;
  end;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

end.
könnt ihr mir mal schreiben, wie man es richtig macht?

joachimd 4. Mär 2013 14:13

AW: Programm Selectionsort-Programm erstellen für Schule
 
Zitat:

Zitat von DeddyH (Beitrag 1205879)
Wieso High() - 1?

hab Variable rausgeschmissen und (-1) übersehen...werd's korrigieren;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Seite 1 von 2  1 2      

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