![]() |
AW: Warteschlange realisieren
Haha , daran habe ich garnicht gedacht irgendwie xD.
Hab viel zu kompliziert gedacht , also so sieht es dann jetzt , nach deinem Tipp , danke nochmals , aus :
Delphi-Quellcode:
Und jetzt möchte ich , dass mit einer Showmessage-Prozedur mir angezeigt wird , wer zm Beispiel als 3. an der Kasse steht.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; private { Private declarations } public { Public declarations } end; person = record Name:string; id:integer; end; Tschlange = class private next,max:integer; schlange : array [1..10] of person; public function einfuegen(x:person):boolean; constructor create; end; var Form1: TForm1; implementation constructor tschlange.create; begin next :=1; max := 10; end; function tschlange.einfuegen(x:person):boolean; var i:integer; begin schlange[10].Name := form1.edit1.text; schlange[9].Name:= form1.edit2.text; schlange[8].name:=form1.edit3.text; // for i:=1 to 9 do //schlange[next] := schlange[next+1]; end; {$R *.dfm} begin end. Geht das so hier : [delphi procedure anzeigen; begin showmessage(high(schlange[8])) [/dephi] |
AW: Warteschlange realisieren
So brauchst Du Next aber auch nicht mehr. Irgendwie ergibt das alles keinen rechten Sinn in meinen Augen. Denken wir doch einmal logisch und sagen: der erste wird an Position 1 im Array geschrieben, der zweite an Position 2 usw. Dann sähe Einfügen ja so aus:
Delphi-Quellcode:
function tschlange.einfuegen(x: person): boolean;
begin //hinter dem Array kann man nichts mehr einfügen Result := Next <= max; if Result then begin //Daten an aktuelle Array-Position schreiben schlange[Next].Name := x.Name; schlange[Next].Id := x.Id; //Position erhöhen inc(Next); end; end; |
AW: Warteschlange realisieren
Ja , danke für den großen Denkanstoß.
Irgendwie habe ich es bisschen durcheiander gebracht , sorry. Aber jetzt ist es doch keine Warteschlange mehr , oder ? Denn im ersten Array-Feld befindet sich ja eine Person , und später dann auch im zweiten Array-Feld. Dann ist das zweite Array-Feld ja aber vor dem ersten Array-Feld , ist ja sowas wie Drängeln , oder nicht ? |
AW: Warteschlange realisieren
Wie kann das 2. vor dem 1. sein?
|
AW: Warteschlange realisieren
Na , es geht doch so oder nciht :
Array : 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 Otto| Peter| <----- ? ----> | Kasse So wird das ja eingefügt , nach deiner Function , erst kommt Otto rein , danach Peter. Peter ist dann aber vor Otto , obwohl Otto als erster da war , verstehst du , was ich meine ?:oops: |
AW: Warteschlange realisieren
Ich habe 2 mal gefragt, wo die Kasse ist. Wenn die also an Position 10 steht statt an der 1, muss ja alles umgedreht werden.
|
AW: Warteschlange realisieren
Warteschlange (FiFo) heißt doch:
Warteschlange leer: Person1 bekommt den ersten Platz in der Warteschlange Eine weiter Person kommt hinzu Person2 bekommt den zweiten Plaz in der Warteschlange Person1 wird zuerst an der Kasse bedient. Ist Person1 fertig wird sie aus der Warteschlange entfernt (mit Gewalt) und Person zwei rückt an Position 1 und wird dann bedient. Grüße Klaus |
AW: Warteschlange realisieren
Oh , tut mir Leid, habs wohl übersehen.
Also Kasse ist "nach" Array-Feld Nummer 10. Das heißt , next muss doch 10 sein , oder nciht ? Und dann statt inc (next , muss dec(next) stehen , oder ? Also:
Delphi-Quellcode:
function tschlange.einfuegen(x: person):boolean;
begin //hinter dem Array kann man nichts mehr einfügen Result := Next <= max; //next ist 10 if Result then begin //Daten an aktuelle Array-Position schreiben schlange[Next].Name := x.Name; schlange[Next].Id := x.id; //Position erhöhen ->> // POSITION abziehen dec(Next); end; end; |
AW: Warteschlange realisieren
Genau. Ich persönlich hätte die Kasse ja an Position 1 stehen lassen, aber wenn es absichtlich kompliziert sein soll, bitteschön.
[edit] Moment, Next muss dann aber mit 10 initialisiert werden, und bei der Prüfung größer als 0 sein. [/edit] |
AW: Warteschlange realisieren
Also , jetzt sieht es so aus :
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; private { Private declarations } public { Public declarations } end; person = record Name:string; id:integer; end; Tschlange = class private next,max:integer; schlange : array [1..10] of person; public function einfuegen(x:person):boolean; constructor create; end; var Form1: TForm1; myschlange:Tschlange; implementation constructor tschlange.create; begin next :=10; max := 10; end; function tschlange.einfuegen(x: person):boolean; begin //hinter dem Array kann man nichts mehr einfügen Result := Next <= max; // MUSS ICH HIER WAS ÄNDERN ? if Result then begin //Daten an aktuelle Array-Position schreiben schlange[Next].Name := x.Name; schlange[Next].Id := x.id; //Position erhöhen dec(Next); end; end; {$R *.dfm} end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz