Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Warteschlange realisieren (https://www.delphipraxis.net/168288-warteschlange-realisieren.html)

hotkey 14. Mai 2012 10:49

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:
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.
Und jetzt möchte ich , dass mit einer Showmessage-Prozedur mir angezeigt wird , wer zm Beispiel als 3. an der Kasse steht.
Geht das so hier :

[delphi procedure anzeigen;
begin
showmessage(high(schlange[8]))
[/dephi]

DeddyH 14. Mai 2012 10:55

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;

hotkey 14. Mai 2012 11:01

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 ?

DeddyH 14. Mai 2012 11:04

AW: Warteschlange realisieren
 
Wie kann das 2. vor dem 1. sein?

hotkey 14. Mai 2012 11:07

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:

DeddyH 14. Mai 2012 11:10

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.

Klaus01 14. Mai 2012 11:12

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

hotkey 14. Mai 2012 11:15

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;

DeddyH 14. Mai 2012 11:16

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]

hotkey 14. Mai 2012 11:19

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 16:45 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

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