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
Seite 1 von 8  1 23     Letzte » 
hotkey

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

Warteschlange realisieren

  Alt 13. Mai 2012, 18:59
Hallo,

als Übung für die kommende Informatik-LK-Klausur möchte ich mich mit der Warteschlange beschäftigen.

Also ich habe 10 Personen , die anstehen , diese 10 Personen sind in einem Array vom Typ person (record) gespeichert , so sieht mein Quellcode bisher aus :

So hatten wir in der Schule damit angefangen.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  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 :=0;
  max := 10;
 end;

function tschlange.einfuegen(x:person):boolean;
 begin
   schlange[next] := x;
  end;

{$R *.dfm}

end.
Im Record haben wir noch die Id hinzugefügt , also es können ja Personen anstehen , die den gleichen Namen und sogar den gleichen Nachnamen haben ( Peter Müller etc) , deswegen eine eindeutige ID.

So , auf dem Formular habe ich erstmal GARNIX.
Und ich weiß auch nicht mehr weiter , bei der function einfuegen(x:person):boolean .

Kriege ich hier einen Tipp , wie ich eine Person jetzt einfügen kann ?
Also z.b , wo ich ein edit-feld habe und wo dann sich eine Person einfügen kann.

Danke schon im Voraus.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 19:24
schlange : array [1..10] of person; ... next:=0; schlange[next] := x; Das wird wohl 'n Fehler geben.

Ich pers würde ein dyn. Array oder eine TList nutzen.


So , auf dem Formular habe ich erstmal GARNIX.
Muss man ja auch nicht unbedingt.

Und ich weiß auch nicht mehr weiter , bei der function einfuegen(x:person):boolean .

Kriege ich hier einen Tipp , wie ich eine Person jetzt einfügen kann ?
Na, mach dir ein Editfeld und einen butten auf das Formular. Im ButtonXClick -Ereignis machst du deine Einfügen function erin und erhöst den Zähler der Warteschlange.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
hotkey

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

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 19:30
Danke erstmal fr deine Antwort.

Aber warum muss der Zähler der Warteschlange erhöht werden ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 19:45
Damit man weis wann die Warteschlange voll ist. Das kann man auch anders realisieren, ist aber, ich sag mal logisch einfacher.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.099 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 19:47
Schalte in den Projektoptionen die Bereichsprüfung an.

Delphi-Quellcode:
    schlange : array [1..10] of person;

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

function tschlange.einfuegen(x:person):boolean;
 begin
   schlange[next] := x;
Auf was wird "next" wohl stehen, beim Einfügen?

PS: Wozu hast du dir "max" nochmals gespeichert? (das kann man ja aus dem Array auslesen)


Mit einem dynamischen Array oder einer Liste würde man sich nicht speichern müssen, wo man grade ist, da man dort einfach immer die letzte Position als die Aktuelle ansehn könnte.

Eine Liste währe für einen Queue/FiFo (Bei Google suchenfirst in first out) eh besser geeignet, da er Möglichkeiten bietet, um die Lsite zu bearbeiten (Einfügen und Löschen).
Ein Array ist mehr für einen Stack/FiLo (Bei Google suchenfirst in last out) geeignet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (13. Mai 2012 um 20:01 Uhr)
  Mit Zitat antworten Zitat
hotkey

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

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 20:01
Also danke erstmal für die Antworten , will aber kurz logisch was klargestellt haben :

Wenn ich jetzt eine Person einfüge in Schlange[1] , dann ist das erste Feld im Array voll , die erste Person muss aber sozusagen an die Kasse , denn das 10.Array Feld , also das letzte , ist ja eigentlich die Stelle , wo die erste Peron steht.

Also muss man ja immer +1 rechnen , oder ?

Damit die erte Person bis schlange[10] vorrückt , und dann immer so weiter , oder ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.099 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 20:03
Ja?
Sollte doch wohl auch logisch sein, oder wieso bist du eigentlich auf die Idee mit der next-Variable gekommen?

Irgendwie mußt du ja auch wissen wo du grade bist.
OK, man könnte alle Felder mit NIL initialisiert halten und wirde jedesmal nachsehn, aber ein NEXT/CURRENT währe bestimmt einfacher.
Ein dynamisches Array oder eine Liste ginge auch, da man dort immer den letzten Eintrag als den aktuellen betrachten könnte.

Und nochmals, schalte besser zukünftig immer die Bereichsprüfung an, denn damit währe dieser Fehler sofort aufgefallen,
wobei man sich auch über ein bissl Debuggen dem Problem hätte annehmen können.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (13. Mai 2012 um 20:06 Uhr)
  Mit Zitat antworten Zitat
hotkey

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

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 20:10
Naja , das hat der Lehrer hinprogrammiert , konnte aber nicht fragen , was next heißen soll , weil ich grade an etwas anderem programmiert habe xD.

Also , trotzdem danke für die Antwort.

Also , wir haben jetzt den Code , hab diesen [0] Befehl korrigiert :


Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  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] := x;
  end;

{$R *.dfm}

end.
Wenn ich jetzt ein Edit-Feld habe , und ich gebe dort zum Beispiel Peter ein , das ist ja ein String , also :

Delphi-Quellcode:
....
//
schlange[1] := form1.edit1.text;
Das geht ja nicht wegen den Datentypen , wie behebe ich diesen Fehler ?

2. Denkansatz von mir :

Delphi-Quellcode:
...
//
schlange.name[1]:= form1.edit1.text;
Geht das hier ?
Wie setze ich das um , dass ich einen Namen ins Array speichern kann.
Der record heißt person , ich bin ein bisschen durcheiannder , wie ihr seht , bin aber eifrig am Überlegen , also bitte nciht denken , dass ich nix mache oder so.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.099 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 20:14
Stattdessen im Unterricht besser zuhören?

Zitat:
schlange.name[1] := Geht das hier ?
Gegenfrage: Was ist wohl das Array, Schlange oder Name?


Und vergiß nicht das Next zu setzen.
Frage dazu: Was passiert wohl, wenn du mehrmals nacheinander "einfuegen" aufrufst?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
hotkey

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

AW: Warteschlange realisieren

  Alt 13. Mai 2012, 20:17
Hab ja zugehört , aber das Programmieren hatte mich grad in den Bann gezogen und ich saß vor dem Rechner like this : *-* xd

Also wenn ich mehrmals einfügen drücke , geht er sozusagen aus dem Array raus , ich muss es begrenzen , deswegen max , und max ist ja 10.

Wenn ich ne for-schleife hätte müsste ich...to max do schreiben.

Also das Array heißt ja Schlange.

Aber wenn ich einfach schlange[1]:=form1.edit1.text; schreibe , geht das nicht.

Ich muss ihm ja sagen , dass er , wenn auf das Record zugreift , den "Namen" im Record , der auf String ist , aufgreifen.

Also ins Array einfügen , aber im Record dann mit "Name" ansprechen lassen.

Vielleicht
schlange[1].name:=form1.edit1.text;

Bin mir aber nicht sicher
Felix
  Mit Zitat antworten Zitat
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 06:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf