Autor Beitrag
Argonath
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 02.05.04 01:10 
Hi Leute, ich bräuchte dringend eure Hilfe. Ich hab am Mittwoch eine Abiturprüfung in Informatik und ich bekomme Pointer voll nicht auf die Reihe. Eine Aufgabe ist höchstwahrscheinlich, dass ich ein Programm mit Pointern erklären muss aber ich weis nciht wie. Ich füge den Code hier an und hoffe das mir es jemand mit kurzen Kommentaren im Code erläutern kann. Vielen Dank im Vorraus.

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:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
  Pointertyp = ^Schuelertyp;
  Schuelertyp = record
                  Nachname, Vorname, Name : string;
                  Nach    : Pointertyp;
                end;
                
var
  Form1 :             TForm1;
  Kopf, Vor, Zeiger : Pointertyp;
  Pos :               Integer;
implementation

{$R *.DFM}

procedure Eingabe(var Neu : Pointertyp);
begin
  new(Neu);
  Neu^.Nachname := InputBox('Nachname:', 'Eingabe:', ''); 
  Neu^.Vorname := InputBox('Vorname:', 'Eingabe:', '');
end;

procedure TForm1.btnNeuClick(Sender: TObject);
var Leer : String; I : Integer;
begin
  lbAusgabe.Items.Clear;
  Eingabe(Kopf);
  Kopf^.Nach := nil;
  Leer := ',';
  for I := 1 to (13 - Length(Kopf^.Nachname)) do Leer := Leer + ' ';
  lbAusgabe.Items.Add(Kopf^.Nachname + Leer + Kopf^.Vorname);
end;

procedure TForm1.btnAufbauenClick(Sender: TObject);
var Neu : Pointertyp;
  procedure Suchen(Zeiger : Pointertyp; var Vor : Pointertyp);
  begin
    while (Zeiger <> nil) and (Zeiger^.Nachname < Neu^.Nachname) do
    begin
      Vor := Zeiger;
      Zeiger := Vor^.Nach;
    end;
  end;
  procedure Einfuegen(Vor : Pointertyp);
  var Leer : String; I : Integer;
  begin
    if Kopf^.Nachname > Neu^.Nachname
      then begin
             Neu^.Nach := Kopf;
             Kopf := Neu;
           end
      else begin
             Neu^.Nach := Vor^.Nach;
             Vor^.Nach := Neu;
           end;
    Leer := ',';
    for I := 1 to (13 - Length(Neu^.Nachname)) do Leer := Leer + ' ';       
    lbAusgabe.Items.Add(Neu^.Nachname + Leer + Neu^.Vorname);         
  end;

begin
  Eingabe(Neu);
  Suchen(Kopf,Vor);
  Einfuegen(Vor);
end;

procedure TForm1.btnSpeichernClick(Sender: TObject);
var Pfad : String;
begin
  Pfad := 'B:\Delphi3\Stufe12\Pointer004\Schueler.TXT';
  lbAusgabe.Items.SaveToFile(Pfad);
end;

procedure TForm1.btnLadenClick(Sender: TObject);
var Pfad : String; I: Integer; Neu : Pointertyp;
  procedure Erzeugen(var zeiger:Pointertyp; I : Integer);
  begin
    new(zeiger);
    Zeiger^.Name := lbAusgabe.Items[lbAusgabe.Items.Count-1-I];
    Zeiger^.Nach := Nil;
    if I <> 0 then Erzeugen(Zeiger^.Nach,I-1);
  end;
begin
  Pfad := 'B:\Delphi3\Stufe12\Pointer004\Schueler.TXT';
  lbAusgabe.Items.LoadFromFile(Pfad);
  new(Kopf);
  Kopf^.Name := lbAusgabe.Items[0];
  Kopf^.Nach := Nil;
  Erzeugen(Kopf^.Nach,lbAusgabe.Items.Count-2);
end;

{Fehler in der prozedur}
procedure TForm1.btnEntfernenClick(Sender: TObject);
var Neu,Zeiger: Pointertyp;
begin
  New(neu);
  Neu^.Nachname := InputBox('Nachname:', 'Eingabe:', ''); 
  Zeiger := Kopf;
  Pos := 0;
  while (Zeiger <> nil) and (Zeiger^.Nachname <> Neu^.Nachname) do
  begin
    Vor := Zeiger;
    Zeiger:= Zeiger^.Nach;
    Pos := Pos + 1;
  end;
  if Zeiger<>Nil then
  if Zeiger^.Nachname = Neu^.Nachname
    then begin
           if Zeiger = Kopf
             then Kopf := Kopf^.Nach
             else Vor^.Nach := Zeiger^.Nach;
           lbAusgabe.Items.Delete(Pos); 
         end;            
end;


Moderiert von user profile iconPeter Lustig (15:07, 02.05.2004): Code- durch Delphi-Tags ersetzt
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: So 02.05.04 13:59 
Sieht verdammt nach einer dynamischen Liste per Zeiger aus.
Du kannst eben aus der Liste löschen, in die Liste einfügen, eine Textdatei (mit Listeneinträge) laden und speichern.


Folgendermaßen läuft das mit einer Zeigerliste:

Du hast eben Deine Struktur, in die Du speichern willst - einen Record (in diesem Fall [idF] Schuelertyp).
Dort kommen die eigentlichen Trägervariablen hinein (idF Nachname, Vorname, Name) und ein Zeiger auf das nächste Element in der Liste (idF Nach).

Du speicherst im Prinzip dann nur noch das erste Element der Liste. Das zeigt dann ja auf das zweite, das zweite auf das dritte usw.
So wird die Liste durchlaufen (sequentiell). Ich erspare mir hier jetzt an der Stelle die Erklärung jeder einzelnen Prozedur :) Schließlich sollst Du ja nun als angehender Informatik-Abiturient auch selber kapieren, was Du da machst.

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
Argonath Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 02.05.04 14:06 
ich kann mit Delphi ja programmieren nur wir haben Pointer nur kurz angeschnitten und dazu keine Literatur bekommen und nun wurde uns auf einmal mitgeteilt das es drankommen könnte bzw mein Lehrer meinte jedes mal wenn er es eingeschickt hat ist es auch drangekommen. Also wie gesagt ich bin in dem Thema nicht wirklich firm. aber trotzdem danke für die Hilfe.

p.s. wäre doch sehr nett wenn du zu den einzelnen Prozeduren etwas schreibst :eyes:
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 02.05.04 14:45 
Auf meiner Homepage www.manuel-poeter.de findest du ein kleines Tutorial zu Pointern.. vielleicht hilft dir das ja mal fürs erste ein bisschen weiter..

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Argonath Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 02.05.04 16:21 
Motzi hat folgendes geschrieben:
Auf meiner Homepage www.manuel-poeter.de findest du ein kleines Tutorial zu Pointern.. vielleicht hilft dir das ja mal fürs erste ein bisschen weiter..



vielen dank