![]() |
AW: Warteschlange realisieren
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. |
AW: Warteschlange realisieren
Leider darf ich nur Arrays und Records benutzen , denn mit Listen wäre es zu einfach s
|
AW: Warteschlange realisieren
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:
Die Frage ist jetzt , ob das semantisch so korrekt ist ?
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; 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 ? |
AW: Warteschlange realisieren
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) |
AW: Warteschlange realisieren
Nun muss ich einmal nachfragen: die erste Person in der Schlange steht auch im Array an Position 1? Oder an Position 10?
|
AW: Warteschlange realisieren
Stimmt , aber leider hört jetzt irgendwie mein Latein auf.
Ich weiß nicht , wie ich den semantischen bzw. logischen Fehler jetzt hier beseitigen soll. :oops: |
AW: Warteschlange realisieren
Wo steht der erste denn nun? Wenn an Position 1, wozu dann die Schleife?
|
AW: Warteschlange realisieren
// kann gelöscht werden.
|
AW: Warteschlange realisieren
Delphi-Quellcode:
Hallo,
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; also wenn ich jetzt diesen Befehl hier betrachte
Delphi-Quellcode:
Dann heißt es ja für mich , dass im ersten Feld des Arrays , jetzt das steht , was ich ins Edit-Feld eingebenen habe , zum Beispiel Otto.
schlange[next].Name := form1.edit1.text;
Dann ist das erste Feld im Array also [1] besetzt mit dem String von Otto , so , und jetzt will ich aber , dass Otto VORRÜCKT nämlich auf Feld Nummer 10 , also auf das letzte Feld im Array , also auf [10] , also bei schlange[10] soll Otto stehen bzw. sein , das wollte ich eigentlich mit der for-Schleife hinkriegen , aber anscheiennd ist da ein logischer Fehler , für den ich leider keien Ansätze mehr habe. |
AW: Warteschlange realisieren
Erklär mir das mal: einfügen an Stelle 1 und dann verschieben nach Stelle 10? Wieso nicht gleich an Stelle 10 einfügen? Ich kann Deiner Logik nicht folgen, sry.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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