Autor Beitrag
Blubbatobi
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 21.06.09 14:17 
Hallo Leute,

ich hab ein kleines Problem und zwar soll ich im Informatikunterricht einen Stack programieren, nur hab ich leider keine Ahnung wie das geht. 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...
Am Ende sollen auf dem Formular 5 Edit Fenster sein in die die eingegeben Werte halt angezeigt werden und dann halt weiter nach unten wandern wenn ein neuer eingegeben und abgespeichert wird bis alle 5 Fenster voll sind.
Könnt ihr mir bitte helfen?
danke schonma.


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am So 21.06.2009 um 23:38
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 21.06.09 15:34 
Frage: Was dürft ihr verwenden?
In Delphi gibt es schon eine entsprechende Komponenten. Man kann das ganze über eine Listbox realisieren oder wnn man möchte/muss selbst programmieren.
Beim Eigenbau gibt es dann die Wahl das über ein Array zu machen oder eine Pointerkette zu nutzen.

Mit Editfeldern kann man es auch machen aber da kräuseln sich mir die Zehnägel.

Man besten ist Du simulierst die Nutzung des Stack auf dem Papier. Meist wird dann klar was zu machen ist.
Blubbatobi Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 21.06.09 15:38 
ja, ich soll das mit nem array machen...
notizen hab ich mir auch schon aufm blatt gemacht - verstehs aber trotzdem nicht...
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Mo 22.06.09 07:37 
Woran hapert das Verstehen?

Schreib mal was für Notizen/Überlegungen Du schon hast.

Hast Du schon eine Auflistung der Eigenschaften und Methoden(Funktionen und Procduren) des Stacks und wie man dies in Delphi beschreiben/umsetzten kann?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 22.06.09 10:31 
@Tilo: Delphi bietet eine Klasse TStack ...

Ferner ist der Mißbrauch von visuellen VCL-Klassen zur Datenhaltung ein Schlag in das Gesicht jedes OOP-Programmierers! Und das mit den Pointern: Naja, Speicherverschwendung: Ein Integer und ein Array reichen vollkommen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 22.06.09 13:19 
user profile iconBlubbatobi hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden 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); // Schiebt den Text aus Edit1 auf den Stack
  Edit1.Text := ''// und löscht Edit1 Text.
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if ListBox1.Count > 0 then // Wenn Stack nicht leer ist, dann...
  begin
      // nimm den obersten Wert
    Edit1.Text := ListBox1.Items[ListBox1.Count - 1]; // übergebe den Wert Edit1
    ListBox1.Items.Delete(ListBox1.Count - 1); // und entferne ihn vom Sack
  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:

ausblenden volle Höhe Delphi-Quelltext
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..4of String;
    Count: Byte;
  end;

var
  Stack: TMyStack;

procedure StackRauf(Text: String);
begin
  if Stack.Count > 4 then Exit; // Statt 4 kann auch High(Stack.Text) genommen werden. Dann wird der Wert aut. berechnet
  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;

_________________
Popov
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 22.06.09 17:15 
irre ich mich oder kann man in eurem stack nur jeweils 5 Strings abladen? Wie wäre es mit einem dynamischen Array für den Stackinhalt, dann braucht man auch keine Variable count mehr.

lg hugo

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 22.06.09 17:19 

_________________
Markus Kinzler.
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 22.06.09 17:32 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
irre ich mich oder kann man in eurem stack nur jeweils 5 Strings abladen?


Er schrieb etwas von 5 Edit Feldern. Wozu also ein größerer Stack?

_________________
Popov