AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mein Sortierprogramm funktioniert nicht!!!
Thema durchsuchen
Ansicht
Themen-Optionen

Mein Sortierprogramm funktioniert nicht!!!

Ein Thema von deepdragon · begonnen am 18. Nov 2007 · letzter Beitrag vom 18. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#1

Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 17:34
Hi Leute... ich habe ein sehr großes Problem.. Wir sollen bis morgen ein Delphi-Projekt erstellen, welches die vier Sortieralgorithmen BubbleSort, InsertionSort, QuickSort und HeapSort ausführen kann... Also es soll ein Memo-Feld geben, dass die mit dem Array erstellten Zufallszahlen ausgibt und dann eben vier weitere Memofelder, für jedes Sortierverfahren eins... und wenn man auf den Button Sortieren unterhalb jedes memofeldes klickt, wird das jeweilige Sortierverfahren angewandt... naja und mein Delphi streikt total... also er meldet total komische Fehler... am besten kopier ich hier mal den gesamten Quelltext:

Delphi-Quellcode:
unit USort;

interface

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

type
  TForm1 = class(TForm)
    mZahlenGeneriert: TMemo;
    mBubbleSort: TMemo;
    mInsertionSort: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    btnBubbleSort: TButton;
    btnInsertionSort: TButton;
    edZeitBubble: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    edZeitInsert: TEdit;
    Label6: TLabel;
    edDurchgaengeBubble: TEdit;
    edDurchgaengeInsert: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Panel1: TPanel;
    btnZahlengenerieren: TButton;
    edAnzahl: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Panel2: TPanel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Button1: TButton;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    mQuickSort: TMemo;
    Label25: TLabel;
    mHeapSort: TMemo;
    Label26: TLabel;
    btnHeapSort: TButton;
    Label27: TLabel;
    Label28: TLabel;
    edZeitQuick: TEdit;
    Label29: TLabel;
    Label30: TLabel;
    edDurchgaengeQuick: TEdit;
    Label31: TLabel;
    edZeitHeap: TEdit;
    Label32: TLabel;
    Label33: TLabel;
    edDurchgaengeHeap: TEdit;
    btnQuickSort: TButton;
    procedure btnZahlengenerierenClick(Sender: TObject);
    procedure btnBubbleSortClick(Sender: TObject);
    procedure btnInsertionSortClick(Sender: TObject);
    procedure btnQuickSortClick(Sender: TObject);
    procedure btnHeapSortClick(Sender: TObject);
    procedure edAnzahlChange(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure HeapSort(var A: array of Integer);
    procedure QuickSort(var A: array of Integer);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  a: array[1..1000] of integer;
  b: array[1..1000] of integer;
  c: array[1..1000] of integer;
  d: array[1..1000] of integer;
  Zahl:integer;

implementation

{$R *.dfm}

procedure TForm1.btnZahlengenerierenClick(Sender: TObject);
var i: integer;
begin
mBubbleSort.Clear;
mInsertionSort.Clear;
mQuickSort.Clear;
mHeapSort.Clear;
mZahlenGeneriert.Clear;

Zahl:=strtoint(edAnzahl.text);

randomize();

for i := 1 to 1000 do
begin
a[i]:=random(Zahl+1);
b[i]:=a[i];
c[i]:=a[i];
d[i]:=a[i];
mZahlenGeneriert.lines.Add(inttostr(a[i]));
btnBubbleSort.Enabled:=true;
btnInsertionSort.Enabled:=true;
btnQuickSort.Enabled:=true;
btnHeapSort.Enabled:=true;
end;
end;

procedure TForm1.btnBubbleSortClick(Sender: TObject);
var d,n,k,i, speicher : integer;
           ZeitBubble: Cardinal;
begin
ZeitBubble:= GetTickCount;
d:= 0;
for k := 1 to 1000 do
    begin
    for n := 1 to 999 do
           begin
                if a[n] > a[n+1] then
                      begin
                      speicher:= a[n+1];
                      a[n+1]:= a[n];
                      a[n]:= speicher;
                      d:=d+1;
                      end;
            end;
    end;
    for i:= 1 to 1000 do mBubbleSort.Lines.Add(inttostr(a[i]));
    edZeitBubble.text:= IntToStr(GetTickCount - ZeitBubble);
    edDurchgaengeBubble.text:=IntToStr(d);
    btnBubbleSort.Enabled:= false;
end;


procedure TForm1.btnInsertionSortClick(Sender: TObject);
var e,i,j,v, p : Integer;
    ZeitInsert: Cardinal;
begin
ZeitInsert:= GetTickCount;
e:=0;
for i:= 1 to 1000 do begin

    if a[i] < a[i-1] then begin
      j := i;
      v := a[i];
      while (v < a[j-1]) AND (j > 0) do begin
        a[j] := a[j-1];
        dec(j);
      end;
      a[j] := v;
      e:=+1;
      end;
    edZeitInsert.text:= IntToStr(GetTickCount - ZeitInsert);
    end;
    for p:=1 to 1000 do mInsertionSort.Lines.Add(IntToStr(a[p]));
    edDurchgaengeInsert.Text:=InttoStr(e);
    btnInsertionSort.Enabled:= false;
end;

procedure TForm1.btnQuickSortClick(Sender: TObject);

  procedure QSort(LoIndex, HiIndex: Integer);
  var
    Lo, Hi: Integer;
    Pivot: Integer;
    Swap: Integer;
  begin
    // Wähle stets das mittlere Element als Pivot-Element
    Pivot := d[(LoIndex + HiIndex) div 2];

    // Stelle die Ordnung bzgl. des Pivot-Elements her
    Lo := LoIndex;
    Hi := HiIndex;
    repeat
      while d[Lo] < Pivot do Inc(Lo);
      while d[Hi] > Pivot do Dec(Hi);
      if Lo <= Hi then
      begin
        Swap := d[Lo];
        d[Lo] := d[Hi];
        d[Hi] := Swap;
        Inc(Lo);
        Dec(Hi);
      end;
    until Lo > Hi;

    // ggf. linke Teilliste sortieren
    if LoIndex < Hi then QSort(LoIndex, Hi);

    // ggf. rechte Teilliste sortieren
    if Lo < HiIndex then QSort(Lo, HiIndex);
  end;

begin
  QSort(Low(d), High(d));
end;

procedure TForm1.btnHeapSortClick(Sender: TObject);
procedure HeapSort(var A: array of Integer);

  procedure Swap(var X, Y: Integer);
  var
    Swp: Integer;
  begin
    Swp := X;
    X := Y;
    Y := Swp;
  end;

  procedure SiftDown(Current, MaxIndex: Integer);
  var
    Left, Right, Largest: Integer;
  begin
    Left := Low(A) + (2 * (Current - Low(A))) + 1;
    Right := Low(A) + (2 * (Current - Low(A))) + 2;
    Largest := Current;
    if (Left <= MaxIndex) and (A[Left] > A[Largest]) then Largest := Left;
    if (Right <= MaxIndex) and (A[Right] > A[Largest]) then Largest := Right;
    if (Largest <> Current) then
    begin
      Swap(A[Current], A[Largest]);
      SiftDown(Largest, MaxIndex);
    end;
  end;

  procedure Heapify();
  var
    Middle: Integer;
    i: Integer;
  begin
    Middle := ((Low(A) + High(A) + 1) div 2) - 1;
    for i := Middle downto Low(A) do // Nur die Knoten, die Söhne haben!
      SiftDown(i, High(A));
  end;

var
  i: Integer;
begin
  Heapify();
  for i := High(A) downto Low(A) + 1 do
  begin
    Swap(A[i], A[Low(A)]);
    SiftDown(Low(A), i - 1);
  end;
end;

procedure TForm1.edAnzahlChange(Sender: TObject);
begin
if edAnzahl.text='then
  begin
  MessageDlg('Bitte tragen Sie einen Höchstzahlenwert für die Zufallszahlen ein!',
  mtError, [mbOK], 0);
  edAnzahl.text:='1';
  end;
if ((strtoint(edAnzahl.text) < 1) or (strtoint(edAnzahl.text) > 1000)) then
  begin
  MessageDlg('Die Werte müssen zwischen "1" und "1000" liegen!',
  mtError, [mbOK], 0);
  edAnzahl.text :='1'
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x: TForm;
begin
 x:= Dialogs.CreateMessageDialog('Möchten Sie das Programm wirklich beenden?', dialogs.mtConfirmation,
 dialogs.mbOKCancel);
 if x.ShowModal = mrOK then
 close;
end;

end.
Ich füge auch nochmal das ganze Projekt als rar-datei unten hinzu... aber delphi meldet mir folgende Fehler, wenn ich das Projekt starten will:

in der Zeile bspw:
procedure TForm1.edAnzahlChange(Sender: TObject);
da meint Delphi: ";" erwartet, aber "." gefunden!

aber was soll das?

ich verstehs einfach nicht

es wäre echt lieb, wenn da einer ma kurz drübergucken könnte... ja ich weiß, dass das programm nicht grad sehr übersichtlich ist, aber wenn ihr fragen habt, dann fragt bitte einfach...
achja und die oberfläche ist erstmal nur provisorisch... also nicht, dass ihr denkt, dass es so dann auch im fertigen prg. aussehen soll aber erstmal ist halt wichtig, dass es überhaupt funzt...
Angehängte Dateien
Dateityp: rar sortierverfahren_im_vergleich_188.rar (356,7 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#2

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 19:32
Das ganze Ding ist eine ueble Baustelle. Sorry.
Du hast offenbar noch wenig Planung, was Programmierung angeht.
[raeusper]
Du hast Methoden lokal reingeschraubt, die im Form deklariert werden und da nie gefunden werden koennen und die gesamte Struktur ist vollkommen durcheinander.

Ich koennte Dir das jetzt fixen, aber dann hast Du vermutlich auch nicht viel gelernt.
Ich frage mich wie Du die Exe ueberhaupt zusammenbekommen hast, die da in dem Archiv liegt...???

Aber okay, jetzt habe ich es schon mal offen und werde es mir im Detail anschauen.
Aber eines kann ich Dr gleich sagen: Um das zum Laufen zu bringen, muss man so viel aendern, dass der Lerneffekt fuer Dich bei Null sein duerfte.

vielleicht solltest Du kleinere Broetchen backen.
Eine Liste und ein Sortieralgo.
Offenbar schiebst Du naemlich den Code per Cut and Paste sinnlos in der Gegend herum...

Sorry, das soll keine Beleidigung sein, aber dieser Codefetzen ist schon Hardcore.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#3

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 19:39
Zitat von mashutu:
Das ganze Ding ist eine ueble Baustelle. Sorry.
Du hast offenbar noch wenig Planung, was Programmierung angeht.
[raeusper]
Du hast Methoden lokal reingeschraubt, die im Form deklariert werden und da nie gefunden werden koennen und die gesamte Struktur ist vollkommen durcheinander.

Ich koennte Dir das jetzt fixen, aber dann hast Du vermutlich auch nicht viel gelernt.
Ich frage mich wie Du die Exe ueberhaupt zusammenbekommen hast, die da in dem Archiv liegt...???

Aber okay, jetzt habe ich es schon mal offen und werde es mir im Detail anschauen.
Aber eines kann ich Dr gleich sagen: Um das zum Laufen zu bringen, muss man so viel aendern, dass der Lerneffekt fuer Dich bei Null sein duerfte.

vielleicht solltest Du kleinere Broetchen backen.
Eine Liste und ein Sortieralgo.
Offenbar schiebst Du naemlich den Code per Cut and Paste sinnlos in der Gegend herum...

Sorry, das soll keine Beleidigung sein, aber dieser Codefetzen ist schon Hardcore.
ja du hast schon recht... es stimmt ja... das programm is ne RIESEN-Baustelle...
Ich finds ja eh arschig... unser lehrer wollte eigentlich nur, dass wir zwei Sortieralgorithmen, also Bubble und InsertionSort machen... naja und das hab ich super geil hinbekommen... aber dann meinte er, dass wir das programm erweitern müssen, also noch QuickSort und HeapSort hinzufügen sollen... naja und ihr könnt unten auch mein altes Programm downloaden... da könnt ihr mal sehen, was ich mir da für ne Mühe gemacht habe... Aber jetzt das neue bekomme ich einfach nicht auf die Reihe ... Und ja ich gebs zu, aber ich bin nicht so gut in Informatik... und den Quelltext hab ich auch nur per copy & paste eingefügt... aber ich steh halt voll unter zeitdruck und naja... da is dann halt so ein wirrwar draus geworden, bei dem ich selbst nich richtig durchblicke...
Angehängte Dateien
Dateityp: exe sortierverfahren_im_vergleich_862.exe (416,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 19:45
Zitat von deepdragon:
... aber ich steh halt voll unter zeitdruck und naja... da is dann halt so ein wirrwar draus geworden, bei dem ich selbst nich richtig durchblicke...
Vielleicht nächstes Mal etwas früher anfangen

Beachte, dass wir hier kein Hausaufgabenforum sind. Und deshalb erwarte nicht, dass dir hier einer kompletten Code postet... Dem hast du hier unter anderem bei deiner Anmeldung zugestimmt.

Aber als Anhaltspunkt kann ich dir aber mal das Sort-Demo-Projekt nennen, das bei deiner Delphi Installation mitinstalliert wurde. An das solltest du dich richten, auch wenn die Threadprogrammierung für dein Projekt wohl überdimensioniert ist. Aber wie die Sortieralgorythmen funktionieren, geht dort klar hervor.
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#5

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 19:47
Zitat von Jelly:
Aber als Anhaltspunkt kann ich dir aber mal das Sort-Demo-Projekt nennen, das bei deiner Delphi Installation mitinstalliert wurde. An das solltest du dich richten, auch wenn die Threadprogrammierung für dein Projekt wohl überdimensioniert ist. Aber wie die Sortieralgorythmen funktionieren, geht dort klar hervor.
Wo finde ich das???
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 19:51
Schau mal unter {$Delphi}\Demos\Threads
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
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#7

Kein wunder, dass Dein Programm nicht funzt.

  Alt 18. Nov 2007, 19:55
Zunaechst mal folgende Kardinalfehler:

globale Variablen und Lokale Variablen haben bei Dir den gleichen Namen. Das ist eine Katastrophe und fuehrt zu Fehlern, die man in einem nichttrivialen Programm kaum noch ausfindig machen kann.
Am besten ueberhaupt keine globalen Variablen gar nie nicht verwenden!

In Deinem code wird
A,B,C,D global als Array deklariert und in dem Event 'Bubblesortclick':
d,n,k,i, speicher : integer;

ist wieder eine Variable "d" als integer....

Niemals identifier so benamsen, dass es Ueberschneidungen mit Prozedurnamen aus der VCL oder RTL gibt.
(Hi und Lo sind Routinen der RTL, die das hoeherwertige bzw. niederwertige Byte eines Integers zurueckliefern.

Warum hast Du vier Listen mit Zahlen (Arrays a,b,c,d) statt nur einer?
Es ist doch ohnehin ueberall das selbe drin.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#8

Re: Kein wunder, dass Dein Programm nicht funzt.

  Alt 18. Nov 2007, 20:04
Zitat von mashutu:
Zunaechst mal folgende Kardinalfehler:

globale Variablen und Lokale Variablen haben bei Dir den gleichen Namen. Das ist eine Katastrophe und fuehrt zu Fehlern, die man in einem nichttrivialen Programm kaum noch ausfindig machen kann.
Am besten ueberhaupt keine globalen Variablen gar nie nicht verwenden!

In Deinem code wird
A,B,C,D global als Array deklariert und in dem Event 'Bubblesortclick':
d,n,k,i, speicher : integer;

ist wieder eine Variable "d" als integer....

Niemals identifier so benamsen, dass es Ueberschneidungen mit Prozedurnamen aus der VCL oder RTL gibt.
(Hi und Lo sind Routinen der RTL, die das hoeherwertige bzw. niederwertige Byte eines Integers zurueckliefern.

Warum hast Du vier Listen mit Zahlen (Arrays a,b,c,d) statt nur einer?
Es ist doch ohnehin ueberall das selbe drin.
ja das selbe hab ich meinen kumpel auch gefragt, aber meinte, ich müsste das so machen... aber vorher hatte ich auch nur einen array, weil ja schließlich eh alle nur aus dem einen array die zahlen holen...

und diese demo von delphi ist zwar cool, aber mir is das i-wie zu kompliziert...
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#9

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 20:05
Zitat von deepdragon:
ja du hast schon recht... es stimmt ja... das programm is ne RIESEN-Baustelle...
Du weisst noch nicht mal, was eine Riesen-Baustelle in der Programmierung ist.
Ich kenne Systeme mit ueber einer Million Zeilen Code ...
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#10

Re: Mein Sortierprogramm funktioniert nicht!!!

  Alt 18. Nov 2007, 20:07
Zitat von mashutu:
Zitat von deepdragon:
ja du hast schon recht... es stimmt ja... das programm is ne RIESEN-Baustelle...
Du weisst noch nicht mal, was eine Riesen-Baustelle in der Programmierung ist.
Ich kenne Systeme mit ueber einer Million Zeilen Code ...
ach du scheiße^^

na ok... dann is meins halt net so riesig, aber dennoch riesig genug für mich
ich bräuchte einfach mal nen gescheiten code für Quicksort und Heapsort... aber halt wirklich einen der vielleicht nicht so verwurschtelt ist und keine ahnung... denn mein programm is echt nich mehr zu retten... also ich lösch am besten den quelltext von quick und heapsort und dann bräuchte ich halt mal nen guten anderen... weil den, den ich da hab, der is sau lang und voll kompliziert find ich
  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 09:51 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