Delphi-PRAXiS
Seite 8 von 8   « Erste     678   

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)

DeddyH 14. Mai 2012 17:38

AW: Warteschlange realisieren
 
Du brauchst weder MySchlange noch MyRec als private Felder oder globale Variablen. Nochmal in der Zusammenfassung (Implementation von TSchlange ausgelassen):
Delphi-Quellcode:
type
  Tperson = record
    Name:string;
    id:integer;
  end;

  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    (* FSchlange gehört jetzt dem Formular und ist auch nur von dem zu erreichen *)
    FSchlange: TSchlange;
  public
    { Public declarations }
  end;

//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  (* Instanz anlegen *)
  FSchlange := TSchlange.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  (* Instanz freigeben*)
  FSchlange.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyRec: TPerson;
begin
  MyRec.Name := Edit1.Text;
  MyRec.id := StrToInt(Edit2.Text);
  FSchlange.einfuegen(MyRec);
end;
So einfach kann das sein.

hotkey 14. Mai 2012 17:43

AW: Warteschlange realisieren
 
Vielen Dank :

Delphi-Quellcode:
unit Unit1;

interface

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

type

  Tperson = record
    Name:string;
    id:integer;
  end;


 
  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;



  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    { Private declarations }
     FSchlange : Tschlange;
  public
    { Public declarations }
  end;




var
  Form1: TForm1;


implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
var i:integer;
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   // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];

            end;

end;





procedure TForm1.Button1Click(Sender: TObject);
var MyRec:Tperson;
begin
myrec.Name := edit1.text;
myrec.id := strtoint(edit2.text);
Fschlange.einfuegen(myrec);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Fschlange := Tschlange.create;
end;



procedure TForm1.FormDestroy(Sender: TObject);
begin
Fschlange.Free;
end;

end.

Jetzt ist es semantisch und syntaktisch korrekt , oder ?

Das heißt , ich kann jetzt 10 Sachen in ein Array mit 10 Feldern reinhauen , oder ?

DeddyH 14. Mai 2012 17:47

AW: Warteschlange realisieren
 
Wirf den Compiler an und probier es aus. Abgesehen davon, dass Du vergessen hast, in der einfuegen-Methode nach dem Aufrücken noch die neuen Daten einzutragen, ist mir jetzt nichts mehr aufgefallen.

hotkey 14. Mai 2012 17:49

AW: Warteschlange realisieren
 
Hab es compiliert , passt alles.

Das andere mache ich erstmal jetzt später , hab keine Power mehr , Gehirn ist müde xD.

Vielen vielen Dank an alle und besonders an dich DeddyH , tut mir Leid , ich bin noch ein Anfänger , ich übe aber fleißig :D

Das war eine Warteschlange , bald kommt der Kellerspeicher , ich hoffe , da wirst du mir wieder helfen.

Schönen Tag noch an alle ! :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 Uhr.
Seite 8 von 8   « Erste     678   

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