Blubbatobi hat folgendes geschrieben : |
Von unserer Lehrerin haben wir auch nur Arbeitsblätter bekommen wo drauf steht was ein Stack ist und welche Formen es gibt aber nicht wie man ihn programiert... |
Ein Stack zu programmieren ist eigentlich sehr einfach, allerdings habe ich Probleme mit der Aufgabenstellung. Sack ist ein Stapelspeicher bei dem die Informationen gestapelt werden. Ich bin kein Informatiker, vielleicht liegt es daran, aber Stapelspeicher bedeutet für mich, daß man in der Regel den Stapel wieder von oben abträgt. Du schreibst aber etwas von nach unten wandern und das klingt als ob die Werte von unten abgetragen werden sollen. Das klingt für mich eher nach einer Warteschleife.
Ich erkläre dir das Prinzip des Stapelspeichers anhand von ListBox. Setz auf deinem Formular Die Komponenten ListBox, Edit und zwei Buttons. Button1 benennst du "Rauf", Button2 bennenst du "Runter". Rauf überträgt den Wert aus Edit1 auf den Sack, Runter nimmt den wieder vom Stack.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Items.Add(Edit1.Text); Edit1.Text := ''; end;
procedure TForm1.Button2Click(Sender: TObject); begin if ListBox1.Count > 0 then begin Edit1.Text := ListBox1.Items[ListBox1.Count - 1]; ListBox1.Items.Delete(ListBox1.Count - 1); end; end; |
Du brauchst aber ein Sack aus Array. Das Prinzip bleibt aber das gleiche, du mußt dich aber um paar Sachen selbst kümmern.
Mit Arrays und ohne ListBox wäre das in etwas so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| type TMyStack = record Text: array[0..4] of String; Count: Byte; end;
var Stack: TMyStack;
procedure StackRauf(Text: String); begin if Stack.Count > 4 then Exit; Stack.Count := Stack.Count + 1; Stack.Text[Stack.Count - 1] := Text; end;
function StackRunter: String; begin if Stack.Count = 0 then Exit; Result := Stack.Text[Stack.Count - 1]; Stack.Count := Stack.Count - 1; end;
procedure TForm1.Button1Click(Sender: TObject); begin StackRauf(Edit1.Text); Edit1.Text := ''; end;
procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text := StackRunter; end; |