Einzelnen Beitrag anzeigen

mani64

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

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 12:07
Hallo,

ja, so funktioniert das Einfügen, d.h. du schreibst angegebene Namen immer auf den nächst niedrigeren Platz.
Das ist aber erst die halbe Miete.
Wie fügst du ein, wenn next = 0 ist, d.h. die Schlange voll ist? Dann musst du anfangen, die Elemente zu verschieben, und zwar erst verschieben und danach einfügen.

Es sollte also irgendwie so weitergehen:

Code:
function tschlange.einfuegen(x: person):boolean;
 begin
   //hinter dem Array kann man nichts mehr einfügen
   Result := Next >0;
   if Result then
     begin
 
      //Daten an aktuelle Array-Position schreiben
       schlange[Next].Name := x.Name;
       schlange[Next].Id := x.id;
       //Position abziehen
       dec(Next);
     end
     else begin // next =0
       // 9 auf 10 schieben, 8 auf 9 schieben usw. - For-Schleife dafür verwenden
       // an Stelle 1 das Neue einfügen
     end;
 end;

Wie du die For-Schleife zum Verschieben programmierst, das wurde ja oben schon erwähnt (for i:=9 downto 1 do ... schlange[i+1]:=schlange[i]).
Außerdem solltest du x.id eindeutig machen, z.B. erst im Constructor mit id:=1 initialisieren, dann beim Einfügen schlange[next].id:=id und danach mit inc(id) immer um eins erhöhen, sobald du eine Person eingefügt hast. Die Id wird also vom Programm vergeben, zum Einfügen gibt man nur den Namen ein.
Ich würde daher der Einfüge-Funktion nur den Namen und nicht den ganzen Record übergeben, wie du es früher schon mal hattest, denn den kannst du aus dem Edit-Feld einfach übernehmen. Somit hast du im id der zuletzt eingefügten Person auch gleich die Anzahl der Leute, die insgesamt an der Kasse waren, um bei dem Beispiel zu bleiben.
  Mit Zitat antworten Zitat