AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Rangieren in Delphi über Listen
Thema durchsuchen
Ansicht
Themen-Optionen

Rangieren in Delphi über Listen

Ein Thema von Royale · begonnen am 20. Mai 2008 · letzter Beitrag vom 20. Mai 2008
Antwort Antwort
Royale
Registriert seit: 20. Sep 2007
Wie der Titel schon sagt, ein Rangierprogramm mit Delphi über Listen. War ein Unterrichtsproject.




Delphi-Quellcode:
unit main;

interface

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

// *********************************************************************************
// TWaggon

type
    TWaggon = class(TObject)
    public
          Name: string;
end;

// *********************************************************************************
// TGleis

type
    TGleis = class(TStapel)
    public
          // ListBox, in der die aktuelle Belegung des Gleises angezeigt werden soll

          ListBox: TListBox;

          constructor Create; override;

          // Funktionen, die auch die ListBox-Ausgabe ändern müssen

          procedure Push(Element: TObject); override;
          procedure Pop; override;
end;

// ********************************************************************************

type
  TForm1 = class(TForm)
    GleisALbx: TListBox;
    GleisCLbx: TListBox;
    GleisBLbx: TListBox;
    WaggonAnzahlEdt: TEdit;
    Label1: TLabel;
    WaggonsErzeugenBtn: TBitBtn;
    RangierenBtn: TBitBtn;
    Label2: TLabel;
    Label3: TLabel;
    Image1: TImage;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    BitBtn1: TBitBtn;
    Label7: TLabel;
    procedure WaggonsErzeugenBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RangierenBtnClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    

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

var
  Form1: TForm1;
  GleisA, GleisB, GleisC: TGleis;

implementation

{$R *.DFM}

// ******************************************************************************
// TGleis

constructor TGleis.Create;
begin
     inherited Create;
     
     ListBox := nil;
end;

procedure TGleis.Push(Element: TObject);
begin
     inherited Push(Element);

     // ggf. Änderung auch in der ListBox ausführen

     if ListBox <> nil then
     begin
          ListBox.items.insert(0, TWaggon(Top).Name);
          ListBox.repaint;
     end;
end;

procedure TGleis.Pop;
begin
     inherited Pop;

     // ggf. Änderung auch in der ListBox ausführen

     if ListBox <> nil then
     begin
          ListBox.items.delete(0);
          ListBox.repaint;
     end;
end;

// *************************************************************************
// annfang

procedure TForm1.FormCreate(Sender: TObject);
begin
     // Gleis-dinger machen

     GleisA := TGleis.create;
     GleisB := TGleis.create;
     GleisC := TGleis.create;

     // Den Gleisen eine ListBox zuweisen

     GleisA.ListBox := GleisALbx;
     GleisB.ListBox := GleisBLbx;
     GleisC.ListBox := GleisCLbx;



     randomize;
end;

// Erzeugen zufälliger Waggon auf A

procedure TForm1.WaggonsErzeugenBtnClick(Sender: TObject);
var
   anzahl, i: integer;
   waggon: TWaggon;
begin
     // Anzahl der Waggons reintuen

     try
        anzahl := strtoint(WaggonAnzahlEdt.text);
     except
           showmessage('MÖÖP, falsch');
           exit;

     end;


     //*****************************************
     for i := 1 to anzahl do
     begin // Waggons erzeugen


          waggon := TWaggon.create;
          waggon.name := chr(trunc(random(25)) + 65); //ascci ansprechung der buchstaben

          // Neuen Waggon auf Gleis A hinzufügen.

          GleisA.push(waggon);
     end;
     //*****************************************
end;

// BEGINN SORTIEREN

procedure TForm1.RangierenBtnClick(Sender: TObject);
var
   KleinsterName: string;
begin
     // ausführen, bis fertig
     while not GleisA.IsEmpty do
     begin
          // speichern kleinster waggon um zu wissen welcher auf Gleis C muss und speichern

          KleinsterName := '';

          // alle auf b verschieben :-: den ersten waggon auf a ermitteln beim vorgang



          while not GleisA.IsEmpty do
          begin
               // Name des aktuell ersten Waggons auf Gleis A alphabetisch vor
               // dem bisher alphabetisch kleinsten Namen der verbliebenen
               // Waggons?

               if (KleinsterName = '') or (TWaggon(GleisA.Top).Name < KleinsterName) then
                  KleinsterName := TWaggon(GleisA.Top).Name;

               // waggon von a auf b verschieben
               // und a löschen

               GleisB.Push(GleisA.Top);
               GleisA.Pop;

               // pause zum nachvollziehen

               sleep(100);
          end;

          // Verschieben nach c oder nach a zurück

          while not GleisB.IsEmpty do
          begin
               // Entscheidung a oder c

               if TWaggon(GleisB.Top).Name = KleinsterName then
                  GleisC.Push(GleisB.Top)
               else
                   GleisA.Push(GleisB.Top);

               // und auf B löschen.

               GleisB.Pop;

               // warten zum nachvollziehen

               sleep(100);
          end;
     end;


     {verwendete listenbefehle: push=  element einfügen
                                pop: element aus liste ermitteln und löschen}

end;





procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form1.Close;
end;

end.
Angehängte Dateien
Dateityp: exe rangieren_208.exe (693,5 KB, 24x aufgerufen)
 
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#2
  Alt 20. Mai 2008, 10:40
Könntest Du bitte den Quellcode auch als Anhang anhängen?
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#3
  Alt 20. Mai 2008, 10:48
Hallo Royale Schaue dir bitte noch folgendes an:
Wie Stelle ich mein Programm vor
Jens
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:58 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