Delphi-PRAXiS
Seite 2 von 8     12 34     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 13. Mai 2012 20:21

AW: Warteschlange realisieren
 
Hey , ich hab es hinbekommen jackpot :D

So sieht es 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;
 begin
   schlange[next].Name := form1.edit1.text;
  end;

{$R *.dfm}

end.
Jetzt ist das , was ich ins Edit-Feld eingebe , im ersten Feld des Arrays gespeichert oder ?

hotkey 13. Mai 2012 20:29

AW: Warteschlange realisieren
 
So , aber ich bekomme hier einen Fehler :

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; // FEHLER



  end;
WOllte dieses Aufrücken programmieren , aber er sagt mir " Inkompatile Typen "
Wie soll ich da vorgehen?

hans ditter 13. Mai 2012 20:50

AW: Warteschlange realisieren
 
Moin Hotkey! :)

Schau dir nochmal genau deinen Code an:

Delphi-Quellcode:
for i := 1 to 9 do
  schlange[next]:=schlange[next]+1;
Da springen mir gleich zwei Fehler ins Auge:

1. benutzt du i überhaupt nicht, machst also 9 Mal dasselbe. Und zwar weist du neunmal schlange[next] schlange[next]+1 zu.

Und da liegt 2. der nächste Fehler: wenn du der Position x aus Schlange die Position x+1 zuweisen willst, musst du Delphi das auch so mitteilen:
Delphi-Quellcode:
schlange[next]:=schlange[next + 1]

hotkey 13. Mai 2012 21:03

AW: Warteschlange realisieren
 
Hallo , danke für den Tipp , jetzt compiliert er wenigstens.

Das mit der for-Schleife habe ich gemacht , damit ich den Namen , den ich ins Edit-Feld eingebe , aufrücken kann.

Also , wenn ich den Namen eingebe , ist er ja zuerst im ersten Feld des Arrays , und durch die For-Schleife wollte ich das ganze in das 10.Feld einrücken lassen.

Ist das semantisch überhaupt korrekt , also die For-Schleife , das mit +1 und so ?

hans ditter 13. Mai 2012 21:47

AW: Warteschlange realisieren
 
Moin!

Ich muss jetzt nochmal fragen, was du genau vor hast:

Ich stell mir das grad wie eine Supermarktkasse vor: Peter (mein Bsp. ;) ) hat alles in seinem Einkaufswagen und geht jetzt Richtung Kasse. Dabei kommt er bei Platz 1 (schlange[1]) an und will vorrücken auf Platz 10 (schlange[10]), also der Kasse. Ist das richtig?

In dem Fall musst du eine for-Schleife programmieren, die dir Peter durch das Array schiebt:

Delphi-Quellcode:
for i := 1 to 9 do
  schlange[i + 1] := schlange[i];
Das wäre dann auch ziemlich das, was du schon programmiert hast.

Allerdings mal logisch überlegt... hast du auch bedacht, dass Peter dann theoretisch auf allen Plätzen vor der kasse steht? Wenn du Peter einen Platz weiterschiebst, musst du seinen alten Platz ja auch wieder frei machen! ;)

mani64 13. Mai 2012 23:30

AW: Warteschlange realisieren
 
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.

hotkey 14. Mai 2012 09:38

AW: Warteschlange realisieren
 
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.

schöni 14. Mai 2012 10:00

AW: Warteschlange realisieren
 
Zitat:

Zitat von hotkey (Beitrag 1166396)
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
...

hotkey 14. Mai 2012 10:07

AW: Warteschlange realisieren
 
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.

Klaus01 14. Mai 2012 10:08

AW: Warteschlange realisieren
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Seite 2 von 8     12 34     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