-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
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.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Du brauchst weder MySchlange noch MyRec als private Felder oder globale Variablen. Nochmal in der Zusammenfassung (Implementation von TSchlange ausgelassen):
type
Tperson = record
Name:string;
id:integer;
end;
Tschlange = class
private
next,max:integer;
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Schmeiß jetzt endlich die globalen Variablen raus:!: Du gibst FSchlange nicht wieder frei und greifst zum Teil auf myschlange zu, welche es aber nicht gibt. Außerdm finde ich es befremdlich, dass Du aus einer Methode des Formulars heraus eine reguläre Prozedur aufrufst, welche dann wieder auf Felder des Formulars zurückgreift, das ist doch Blödsinn.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Ich habe gerade noch einmal editiert. Du kannst doch nicht bei jedem Klick auf den Button eine neue Schlange anlegen, das schafft nur Speicherlecks und führt nicht zum Ziel.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Weißt Du eigentlich, was Du da tust bzw. liest Du, was wir schreiben? Wieviele Instanzen von MySchlange willst Du denn anlegen, die Du nie wieder freigeben kannst? Außerdem schau Dir mein Edit in #54 noch einmal an.
Wenn wir die Reihenfolge der Typdeklarationen etwas ändern, kann die Schlange auch ein Feld des Formulars werden:
type
Tperson = record
Name:string;
id:integer;
...
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Das glaube ich nicht, Tim. Du hast MySchlange noch gar nicht erzeugt. Macht aber auch nichts, da Du ihre Methoden ja auch noch nicht aufrufst :mrgreen:
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Indem Du neue Daten eingibst und dann erneut einfuegen aufrufst?
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Ja, aber wieso schreibst Du dann in 9 dieselben Daten nochmal?
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Na, hier:
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Weshalb trägst Du die Daten denn jetzt 2 mal ein?
procedure TForm1.Button1Click(Sender: TObject);
var
MyRec: TPerson;
begin
MyRec.Name := Edit1.Text;
MyRec.id := StrToInt(Edit2.Text);
MySchlange.einfuegen(MyRec);
end;
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
So ähnlich hatte ich mir das auch gedacht. Wozu soll man auch einen Record-Parameter deklarieren, den man dann innerhalb der Funktion gar nicht nutzt, sondern stattdessen auf GUI-Controls zugreift? Macht ja keinen Sinn.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Beim Einfügen soll automatisch rotiert werden? Das hätte einem aber auch gesagt werden können (oder ich habe es überlesen). Ich frage mich dann nur, was die Boolean-Funktion in dem Fall zurückgeben soll, eigentlich kann es dann auch gleich eine Prozedur sein.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Nach meinem Dafürhalten sollte das jetzt stimmen. Wenn nun also der erste (an Array-Position 10) durch die Kasse ist, müssen die anderen nachrücken. Dafür kannst Du dann wieder eine For-Schleife verwenden, musst aber herunterzählen (downto statt to).
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Ich hatte eben noch editiert. BTW: Du solltest das {$R *.dfm} direkt hinter das implementation verschieben.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Genau. Ich persönlich hätte die Kasse ja an Position 1 stehen lassen, aber wenn es absichtlich kompliziert sein soll, bitteschön.
Moment, Next muss dann aber mit 10 initialisiert werden, und bei der Prüfung größer als 0 sein.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Ich habe 2 mal gefragt, wo die Kasse ist. Wenn die also an Position 10 steht statt an der 1, muss ja alles umgedreht werden.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Wie kann das 2. vor dem 1. sein?
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
So brauchst Du Next aber auch nicht mehr. Irgendwie ergibt das alles keinen rechten Sinn in meinen Augen. Denken wir doch einmal logisch und sagen: der erste wird an Position 1 im Array geschrieben, der zweite an Position 2 usw. Dann sähe Einfügen ja so aus:
function tschlange.einfuegen(x: person): boolean;
begin
//hinter dem Array kann man nichts mehr einfügen
Result := Next <= max;
...
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
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.
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Wo steht der erste denn nun? Wenn an Position 1, wozu dann die Schleife?
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
Nun muss ich einmal nachfragen: die erste Person in der Schlange steht auch im Array an Position 1? Oder an Position 10?
-
Forum: Sonstige Fragen zu Delphi
by DeddyH,
14. Mai 2012
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.