Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!! (https://www.delphipraxis.net/57463-brauch-hilfe-zum-thema-sortieralgorithmus-dringend.html)

Jacqybaby 21. Nov 2005 19:58


brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

ích bin neu hier also bitte nicht gleich meckern wenn ich was falsch mache oder was nicht verstehe.
Ich bin noch dazu ein totaler Anfänger in sachen programmieren. Wir haben in der Schule die Aufgabe bekommen ein Projekt in Delphi zu programmieren in dem der Nutzer zw. den verschiedenen Sortierverfahren wählen kann. Ich bin gerade dabei die Minimum- bzw. Maximumsuche zu schaffen d.h., dass das kleinste Element gleich an den Anfang gesetzt wird, den Algorithmus dazu hab schon nur mit dem Anzeigen klappt es nicht. Dazu muss man wissen das der Nutzer eine beliebige Zahl für Anzahl der Elemente eintippen kann und dannach werden der Anzahl enstprechende Zufallszahlen gezogen die dann sortiert werden sollen. Das mit den Zahlen ziehen funktioniert, wenn ich aber auf den Button "sortieren" klicke bekommen ich nur Nullen angezeigt und ich weiß nicht woran es liegt.

Ihc wäre euch sehr verbunden wenn das auch mit einfachen befehlen geht, wir hatten nämlich noch nicht sehr viel Befehle und ich möchte nicht das es dann heißt ich habe das irgendwo geklaut.

MFG Jacqybaby

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Home: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    PageControl1: TPageControl;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    PageControl2: TPageControl;
    TabSheet6: TTabSheet;
    TabSheet7: TTabSheet;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Edit3: TEdit;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    zufall: TListBox;
    zufall1: TListBox;
    zufall3: TListBox;
    zufall2: TListBox;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    sortiert: TListBox;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    ListBox2: TListBox;
    Label29: TLabel;
    Label30: TLabel;
    ListBox3: TListBox;
    Label31: TLabel;
    Label32: TLabel;
    ListBox4: TListBox;
    Label33: TLabel;
    Edit5: TEdit;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Edit6: TEdit;
    Label38: TLabel;
    Label39: TLabel;
    Label40: TLabel;
    Edit7: TEdit;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    Edit8: TEdit;
    Label44: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

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

procedure TForm1.Button6Click(Sender: TObject);
var z,a,i:integer;
begin
randomize;
a:=strtoint(edit1.Text);
    for i:=1 to a do
    begin
    z:=random(100);
    zufall.Items.Add(inttostr(z));
    end;
end;

procedure TForm1.Button9Click(Sender: TObject);
var z,a,i:integer;
begin
randomize;
a:=strtoint(edit2.Text);
    for i:=1 to a do
    begin
    z:=random(100);
    zufall1.Items.Add(inttostr(z));
    end;
end;


procedure TForm1.Button11Click(Sender: TObject);
var z,a,i:integer;
begin
randomize;
a:=strtoint(edit3.Text);
    for i:=1 to a do
    begin
    z:=random(100);
    zufall2.Items.Add(inttostr(z));
    end;
end;

procedure zufall(n:integer; var z:integer);
var i:integer;
begin
randomize;

z:=random(100);

end;

procedure TForm1.Button13Click(Sender: TObject);
var z,n,i:integer;
begin
n:=strtoint(edit1.Text);
for i:=1 to n do
begin
zufall.Items.Add(inttostr(z));
end;
end;
procedure TForm1.Button17Click(Sender: TObject);
begin
zufall.Items.Clear;
edit1.Text:='';
sortiert.Items.Clear;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
zufall1.Items.Clear;
edit2.Text:='';

end;

procedure minimumsuche(n:integer; var h:array of integer);
var    i,j,min,hilfsvar:integer;
begin
for i:=1 to n-1 do
begin
min:=1;
       for j:=i+1 to n do
             if h[j]<min then min:=j;
             hilfsvar:=h[min];
             h[min]:=h[i];
             h[i]:=hilfsvar;
       end;


end;

procedure TForm1.Button7Click(Sender: TObject); {"sortieren"-Button}
var n,i:integer;
    h:array[0..10000] of integer;
begin
n:=strtoint(edit1.Text);
minimumsuche(n,h);
for i:=1 to n do
    begin
    sortiert.Items.Add(inttostr(h[i]));
    end;
end;

end.
Falls ihr noch irgendwelche Dateien aus dem Projekt braucht bescheid sagen ich hänge die dann an !!!

neuronet 21. Nov 2005 20:55

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zuerst mal herzlich Willkommen in der DelphiPraxis, Jacqybaby!!!!


So, hab mal dran rumgeschraubt und nun funktioniert das Ganze.

Schau es Dir mal an, und wenn Du noch fragen hast, dann melde Dich...

Jacqybaby 21. Nov 2005 21:06

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
ja super funktioniert, nur leider versteh ich jetzt garnichts mehr, wie gesagt ich bin nen totaler Anfänger und die meisten behfehle kenne ich nicht, wenn das meine Lehrerin sieht merkt die gleich das ich das nicht gemacht habe. Mir würde es mehr helfen wenn du mir sagst was ich falsch gemacht hab. Ihc hab in der Zwischenzeit auch ein bisschen weiter gemacht und das einzige problem ist das ich nicht weiß wie ich das array h inklusive der zugeordneten Zufallszahlen von einer Prozedur in eine andere übertragen kann.

MFG Jacqybaby

neuronet 21. Nov 2005 21:12

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Definiere das Array nicht in der Prozedur, sondern im "Interface" Teil oder direkt nach "implementation", dann kannst Du es von jeder Prozedur aus abrufen und bearbeiten.

malo 21. Nov 2005 21:15

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Zitat:

Zitat von Jacqybaby
Ihc hab in der Zwischenzeit auch ein bisschen weiter gemacht und das einzige problem ist das ich nicht weiß wie ich das array h inklusive der zugeordneten Zufallszahlen von einer Prozedur in eine andere übertragen kann.

Mit Parametern, denke ich mal. So:
Delphi-Quellcode:
procedure bekomme(h: array of integer);
begin
  h[5] := 123456;
end;

procedure uebertrage(h: array of integer);
begin
  bekomme(h);
end;
Oder was meinst du?


Oder so wie neuronet...

neuronet 21. Nov 2005 21:24

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Bevor ich es vergesse:

Du solltest vor dem Generieren der Zufallszahlen auf jeden Fall prüfen, ob edit1 überhaupt einen gültigen Wert enhält, sonst verabschiedet sich das Programm...

Jacqybaby 21. Nov 2005 21:25

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
in einer Prozedur ziehe ich Zufallszahlen und weise diese den Feldern zu
Delphi-Quellcode:
procedure TForm1.prozufall(n:integer; var h:array of integer);
var i,z:integer;
begin
randomize;
for i:=1 to n do
begin
z:=random(100);
h[i]:=z;
end;


end;

procedure TForm1.Button13Click(Sender: TObject);
var n,i:integer;
    h:array[0..10000] of integer;
begin
n:=strtoint(edit1.Text);
for i:=1 to n do
begin
prozufall(n,h);
zufall.Items.Add(inttostr(h[i]));
end;
end;
so und nun muss ja mit den elementen des Arrays gearbeitet werden

Delphi-Quellcode:
procedure TForm1.minimumsuche(n:integer; var h:array of integer);
var    i,j,min,hilfsvar:integer;
begin
for i:=1 to n-1 do
begin
min:=1;
       for j:=i+1 to n do
             if (h[j]<min) then min:=j;
             hilfsvar:=h[min];
             h[min]:=h[i];
             h[i]:=hilfsvar;
       end;


end;
ich glaube hier liegt der fehler, weil ich nacher wenn ich das sortierte array in einer Listbox ausgeben will dann werden statt den geordneten Zahlen nur Nullen angezeigt.

Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var n,i:integer;
    h:array[0..10000] of integer;
begin
n:=strtoint(edit1.Text);
minimumsuche(n,h);
for i:=1 to n do
begin
    sortiert.Items.Add(inttostr(h[i]));
    end;
end;
^
^
So versuche ich das sortierte array anzeigen zu lassen aber wie gesagt kommen nur Nullen.

MFG Jacqybaby

neuronet 21. Nov 2005 21:34

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var n,i:integer;
    h:array[0..10000] of integer;
begin
  n:=strtoint(edit1.Text);
  minimumsuche(n,h);
  for i:=1 to n do
  begin
    sortiert.Items.Add(inttostr(h[i]));
  end;
end;
So definierst Du das Array ja neu, anstatt es zu übernehmen, demnach ist es ja leer.

Wenn dann müsste es eher so aussehen:

Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var n,i:integer;
    h:array[0..10000] of integer;
begin
  n:=strtoint(edit1.Text);
  // hier die Zahlen aus zufall in h einlesen
  for i:=1 to zufall.count do
    h[i]:=strtoint(zufall.items[i]);
  // nun hast Du Deine Zufallszahlen in h und kannst damit weiterarbeiten
  minimumsuche(n,h);
  for i:=1 to n do
  begin
    sortiert.Items.Add(inttostr(h[i]));
  end;
end;

Jacqybaby 21. Nov 2005 21:39

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
hat sich erledigt, ich hab falsch geguckt

MFG Jacqybaby

Jacqybaby 21. Nov 2005 21:57

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
wenn ich deinen Quellcode einfüge bekomme ich folgenden Fehler angezeigt.


Was tun ?

MFG Jacqybaby

neuronet 21. Nov 2005 22:02

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Kann sein, dass es so sein muss:

Delphi-Quellcode:
  h[i]:=strtoint(zufall.items[i-1]);
Bin mir nicht sicher, ob TListBox mit Index 0 oder 1 anfängt... :(

sniper_w 21. Nov 2005 22:03

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
anstatt:
Delphi-Quellcode:
for i:=0 to n do
sollte
Delphi-Quellcode:
for i:=0 to zufall.count-1 do

Jacqybaby 21. Nov 2005 22:11

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
super auf jeden fall bekomme ich jetzt schon mal die Zufallszahlen statt Nullen angezeigt allerdings nicht ganz sortiert, d.h. die Reihenfolge ist durcheinander aber wiederum verschieden zu der Reihenfolge der Listbox in der die Zufallszahlen angezeigt werden.


MFG Jacqybaby

neuronet 21. Nov 2005 22:14

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Das liegt dann am Sortieralgorithmus...

Schau mir den noch mal genauer an...

Jacqybaby 21. Nov 2005 22:22

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
danke danke danke funktionniert.

MFG Jacqybaby

neuronet 21. Nov 2005 22:25

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Versuch's mal so:

Delphi-Quellcode:
procedure minimumsuche(n:integer; var h:array of integer);
var
  i,hilfsvar:integer;
  fertig: boolean
begin
  repeat
    fertig:=true;
    for i:=1 to n-1 do Begin
      if h[i] > h[i+1] then Begin
        hilfsvar:=h[i];
        h[i]:=h[i+1];
        h[i+1]:=hilfsvar;
        fertig:=false;
      end;
    end;
  until fertig;
end;

neuronet 21. Nov 2005 22:26

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Okay....

Sharky 22. Nov 2005 07:01

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Hai Jacqybaby,

nehme die Bilder doch bitte aus dem Posting und hänge sie als Anhang an. Das eine Bild hat ca 220 kByte und das andere auch über 130 kB. Nicht jeder der hier reinschaut hat eine DSL-Flatrate ;-)

Danke :-D

Um dies zu machen musst Du einfach nur in dem jeweiligen Posting von Dir auf den EDIT Button klicken. Dies geht allerdings nur innerhalb von 24 Stunden nach erstellen des Beitrages. Wenn Du es in dieser Zeit nicht schaffen solltest melde die Beiträge über das [!] Symbol einfach dem Team. Einer von uns wird sich der Sache dann sicher annehmen.

Jacqybaby 22. Nov 2005 10:22

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
Ok ich bin soweit fertig mit dem Projekt jetzt fehlt mir nur noch ein Algorithmus zum Thema sortieren durch einfügen und das Messen der benötigten Zeit, kann mir jemand sagen wie das gehen soll ? Kann mir nicht vorstellen, dass das funktioniert. kennt jemand noch einen anderen Algorithmus zum sortieren duch Einfügen außer dem hier:

Delphi-Quellcode:
 
procedure TForm1.whileschleife(n:integer; var h:array of integer);
var i,j,li,re,m,x:integer;
begin
for i:=2 to n Do
begin
     x:=h[i];
     li:=1;
     re:=i-1;
              while li<=re do
              begin
              m:=(li+re)div 2;
              if x<h[m] then re:=m-1 else li:=m+1
              end;

     For j:=i-1 downto li do h[j+1]:=h[j];
     h[li]:=x;
     end;
end;
???

MFG Jacqybaby

neuronet 22. Nov 2005 12:18

Re: brauch hilfe zum Thema Sortieralgorithmus !!!Dringend!!!
 
So sollte es eigentlich funktioniere (nur noch editX anpassen):

Delphi-Quellcode:
procedure TForm1.whileschleife(n:integer; var h:array of integer);
var
  i, j, hilf      : integer;
  start, ende, diff: TDateTime
begin
  start:=Time; // Aktuelle Systemzeit speichern
  for i:=1 to n do begin
    j:=i;
    hilf:=h[i];
    while (j > 1) and (h[j-1] > hilf) do begin
      h[j]:=h[j-1];
      Dec(j);
    end;
    h[j]:=hilf;
  end;
  ende:=Time;       // Aktuelle Systemzeit speichern      
  diff:=ende-start; // Differenz berechenen
  editX.Text:=timetostr(diff); // Differenz ausgeben
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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