Autor Beitrag
xman236
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1



BeitragVerfasst: Mo 28.02.11 22:09 
Hat Jemand von TQueue gehoert ??
Ich habe naemlich eine Frage zum dequeue-Procedure. Das Procedure sieht wie unter aus.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TQueue.dequeue;
var
    hilf : TKnoten;
  begin
    if not self.isEmpty then begin
      hilf := self.hatBug.nachfolger;
      self.hatBug.setzeNachfolger(hilf.nachfolger);
      if kenntEnde = hilf then kenntEnde := hatBug;
      hilf.destroy;
    end
  end;


Das Procedure habe ich wie unten angewendet.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TfrmMain.tiKassierenTimer(Sender: TObject);
begin
hKundeschlange.dequeue;
end;



Eigentlich soll das erste Element der hKundeschlange weggeloescht.Doch es wird auf dem Listbox nicht weggeloescht. Woran liegt das?

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 22:24 
user profile iconxman236 hat folgendes geschrieben Zum zitierten Posting springen:
Hat Jemand von TQueue gehoert ??
Die deutschen Bezeichner zeigen deutlich, dass es keine bekannte Klasse sein kann. Das ist nur irgendetwas Kleines von einem Lehrer gebasteltes oder so. ;-)

user profile iconxman236 hat folgendes geschrieben Zum zitierten Posting springen:
Eigentlich soll das erste Element der hKundeschlange weggeloescht.Doch es wird auf dem Listbox nicht weggeloescht. Woran liegt das?
Das weiß ich nicht. Den Quelltext, in dem du auf die ListBox zugreifst, hast du ja nicht gepostet. :nixweiss:

Wie sieht denn der Code aus, mit dem du den Eintrag aus der ListBox löschen möchtest?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 28.02.11 22:26 
klingt nach
Generics.Collections.TQueue

D2009 +


Entfernt das oberste Element aus der Warteschlange.


Zitat:


Dequeue entfernt das oberste Element aus der Warteschlange und gibt es zurück. Count wird um 1 dekrementiert. Wenn Count bereits 0 ist, wird ein Fehler ausgelöst.

Ein OnNotify-Ereignis zeigt an, dass ein Element aus der Warteschlange entfernt wurde. Dequeue entspricht Extract, außer dass der Ereigniscode angibt, dass ein Element entfernt und nicht extrahiert wurde.

Dequeue arbeitet ähnlich wie Peek, außer dass Dequeue ein Element aus der Warteschlange entfernt.

Dies ist eine O(1)-Operation.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 22:28 
An den deutschen Bezeichnern (und der geposteten Prozedur aus der Klasse) siehst du ja, dass es nicht die Standard-TQueue ist. ;-)

// EDIT:
Nebenbei gab es TQueue auch vor Delphi 2009 schon in der Unit Contnrs soweit ich mich entsinne.
xman236 Threadstarter
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1



BeitragVerfasst: Mo 28.02.11 22:30 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TfrmMain.tiKassierenTimer(Sender: TObject);
begin
hKundeschlange.dequeue;
end;


Das Procedure ist fuer mich eigentlich der Befehl, der das Element aus der Schlange wegloescht.

Ist das falsch?

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 22:30 
Aus der Schlange ja, aber was hat das mit der Listbox zu tun? ;-)
xman236 Threadstarter
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1



BeitragVerfasst: Mo 28.02.11 22:33 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TfrmMain.tiKassierenTimer(Sender: TObject);
begin
liKundeschlange.items.delete(0);
end;


Eigentlich war das mein Befehl. Der Lehrer hat mir aber gemeckert, dass ich nicht mit
der Schlange gearbeitet hast, sondern nur ausgetrickt habe. Deswegen habe ich jetzt dieses dequeue-Procedure verwendet.

Was willst du jetzt genau sehen?

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 22:35 
Naja, aber irgendwo musst du genau diesen Befehl zum Löschen aus der Listbox ja trotzdem benutzen, sonst wird das auch nicht passieren.

Du könntest z.B. nach dem Löschen aus der TQueue die Daten daraus neu in die Listbox einlesen.
xman236 Threadstarter
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1



BeitragVerfasst: Mo 28.02.11 22:41 
Eherlich gesagt, verstehe ich das Meckerei von dem Lehrer nicht ganz.
Unsere Aufgabe ich mit der Schlange (TQueue) ,was nach dem Moto : Immer der Reihe nach-
Wer zuerst kommt, ist auch zuerst dran, arbeitet, eine Supermarket-Kasse zu simulieren.


Ich habe eine Kundeschlange eingebaut und habe fuenf Kasse dargestellt. Die Kundeschlange
verteilt sich in die verschiedene Kasse und ihre Ware werden dort kassiert.

Da ich aber mit dem Befehl, liKundeschlange.items.delete(0); gearbeitet habe, koennen mehrere Kunde an den verschiedenen Kassen gleichzeitig weggeloescht werden,
was das Moto der Schlange, Immer der Reihe nach, schaedigt.

Ist das richtig, was der Lehrer hier meckert?

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 22:48 
Schwachsinn, da du immer nur den obersten eintrag in der Listbox weglöscht. Das einzige was halt nicht dem Konzept der Warteschlange entspricht ist, das du eben auch den 5 löschen könntest mit dem befehl wenn du als parameter 4 statt 0 übergibst. und das wird vermutlich auch das argument deines Professors gewesen sein.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 28.02.11 22:50 
Hey,

so wie du das gemcht hast geht das natürlich auch, aber wenn die Aufgabe heißt, das ihr dazu eine TQueue benutzen sollt, dann musst du dich danach richten. Ansonsten wäre das Thema verfehlt - 6 setzten (so nach dem Motto).
Wir mussten sowas auch mal in der Schule machen. Dabei sollten Daten und GUI getrennt werden. Also die wartenden Kunden in der TQueue und eine extra Methode, die die daten (die Kunden) dann in der GUI darstellt. Wenn du das so machst, dann meckert deni Lehrer bestimmt nicht mehr ;)

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^