AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm Selectionsort-Programm erstellen für Schule
Thema durchsuchen
Ansicht
Themen-Optionen

Programm Selectionsort-Programm erstellen für Schule

Ein Thema von cobi23 · begonnen am 4. Mär 2013 · letzter Beitrag vom 5. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
cobi23

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

Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 00:39
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.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 01:40
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ß
Volker Zeller
  Mit Zitat antworten Zitat
cobi23

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

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 12:43
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
"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 13:12
Zitat:
A: array (1..6) of Integer;
-->A: array [1..6] of Integer;
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
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 13:21
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.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd
Online

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#6

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 14:22
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!
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd
Online

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#7

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 14:27
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]));
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de

Geändert von joachimd ( 4. Mär 2013 um 15:13 Uhr) Grund: Knoten im Hirn
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 14:56
Wieso High() - 1?
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
cobi23

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

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 15:08
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?
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd
Online

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#10

AW: Programm Selectionsort-Programm erstellen für Schule

  Alt 4. Mär 2013, 15:13
Wieso High() - 1?
hab Variable rausgeschmissen und (-1) übersehen...werd's korrigieren
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:12 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