AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Warteschlange realisieren

Ein Thema von hotkey · begonnen am 13. Mai 2012 · letzter Beitrag vom 14. Mai 2012
Antwort Antwort
mani64

Registriert seit: 8. Apr 2009
49 Beiträge
 
Delphi 5 Professional
 
#1

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 23:30
Hallo,

du musst erst verschieben und dann einfügen, und zwar musst du von Platz 9 abwärts verschieben (9 auf 10, 8 auf 9, ... bis zu 1 auf 2). Dann hast du Platz 1 frei und kannst dort den neuen Namen einfügen.
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#2

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 09:38
Hallo,

also bei mir sieht es jetzt so aus :

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
  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[next].Name := form1.edit1.text;

    for i:=1 to 9 do
     schlange[next] := schlange[next+1];
     end;

{$R *.dfm}

end.
Zum Beispiel kann der String Peter jetzt in allen Feldern des Arrays stehen , wie mani64 netterweise gesagt hat , Peter soll aber als erster an der Kasse stehen , aber wie gebe ich die anderen Array-Felder frei?
Ich will ja noch andere Persoenn hinzufügen.
Felix

Geändert von hotkey (14. Mai 2012 um 09:40 Uhr)
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:00
Hallo,

also bei mir sieht es jetzt so aus :

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
  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[next].Name := form1.edit1.text;

    for i:=1 to 9 do
     schlange[next] := schlange[next+1];
     end;

{$R *.dfm}

end.
Zum Beispiel kann der String Peter jetzt in allen Feldern des Arrays stehen , wie mani64 netterweise gesagt hat , Peter soll aber als erster an der Kasse stehen , aber wie gebe ich die anderen Array-Felder frei?
Ich will ja noch andere Persoenn hinzufügen.
Aaaaalso, da will ich mich auch mal hier reinhängen:

Ich verstehe die bisherige Logik so, das die Person an Position Schlange[1] an der Kasse steht und weitere Personen hinzu kommen, während Person 1 noch wartet, bis alle Artikel abgerechnet sind, weshalb Person[2], Person[3],... solange warten müssen. DEshalb muss auch der Zähler "next" immer um eins
erhöht werden. Weil Person[1] in Schlange[1] an der Kasse steht.

Erst dann eght es weiter:

Person[1] hat bezahlt:
Person[2] rückt vor auf Position 1
Person[3] rückt vor auf Position 2
...
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#4

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:07
Hallo,

genau so ist es.

Also wenn ich eien Person einfüge zum Beispiel schlange[1]:= 'Otto';

Dann ist Otto doch im ersten Feld drin , im ersten Array-Feld, ich will aber , dass Otto in das 10. Array Feld kommt , ich stelle es mir so waagerecht vor sozusagen.

Das 10.Array Feld ist die erste Position an der Schlange , in das 9. Array Feld kommt dann zum Beispiel Peter , der als zweiter ansteht.

Semantisch habe ich es ja verstanden , aber es bröckelt bisschen bei der Umsetzung.

Also ein Element im Array ins 10. Feld verschieben , sodass andere Felder für andere Personen , die noch kommen werden , verfügbar sind.
Felix
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:08
Guten Morgen,

bist Du, für die Klausur, auf Array und Record beschränkt?

Einfacher, wie schon mehrmals gesagt, wird es, wenn Du ein TList verwendest.
Würdest Du TPerson von Record auf Klasse umstellen, könntest Du ein TObjectList verwenden.

Beide haben den Vorteil, das ein Hinzufügen von Elementen am
Listenenden passiert (es sei denn man fügt ein (insert).
Wird ein Element von Position 0 entfernt, rücken alle anderen Elemente
automatisch um eine Position nach vorne.
Um das Verschieben in der Liste muss man sich dann nicht mehr kümmern.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:12
Und wenn man bei dem statischen Array of Record bleiben muss, stellt man folgende Überlegungen an:
- Next initial auf 1
- Einfügen eines Datensatzes an Position Next, anschließend Next um 1 erhöhen
- Entfernen des ersten Elements -> alle folgenden um eine Position nach vorn kopieren

Dabei muss man dann noch beachten, wo man auf Next und wo man auf die lokale Schleifenvariable zugreift.
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
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#7

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:13
Leider darf ich nur Arrays und Records benutzen , denn mit Listen wäre es zu einfach s
Felix
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#8

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:24
Also bis jetzt Also next wird ja auf 1 initialisiert und dann wird auch next in der for-Schleife um 1 erhöht, sodass dann zum Beispiel Otto auf Feld 10 vorrückt , siehe For-Schleife :


Delphi-Quellcode:
function tschlange.einfuegen(x:person):boolean;
  var i:integer;
    begin
      schlange[next].Name := form1.edit1.text;

    for i:=1 to 9 do
     schlange[next] := schlange[next+1];
     end;
Die Frage ist jetzt , ob das semantisch so korrekt ist ?

Ich gebe jetzt zum Beispiel in form1.edit1.text Otto ein.

Dann rückt doch Otto in schlange[10] auf , oder ?

Das ist ja der Sinn der for-Schleife ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#9

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:28
Das Problem hier ist, dass du Next zwar mit 1 initialisierst, aber später nie änderst.
Du schreibst also bei jedem Schleifendurchlauf vom Array Index 2 (Next+1) in den Array Index 1 (Next)
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay

Geändert von alphaflight83 (14. Mai 2012 um 10:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 10:32
Nun muss ich einmal nachfragen: die erste Person in der Schlange steht auch im Array an Position 1? Oder an Position 10?
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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:18 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