Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Problem mit Algorithmen


diamz55 - Fr 29.09.06 18:45
Titel: Problem mit Algorithmen
Ich habe informatik & als mädchen habe echt keine ahnung was der lehrer babbelt!

Könnte mir jemand bitte den gefallen tuen und den folgenden abschnitt erklären...


:D



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:
procedure tWortliste.Insert (x: string) ;

var z, Hilfszeiger: lex;

begin

if Anhang=NIL then

begin
new (z);
Anfang:=z;
z^.Vokabel:=x;
z^.naechster:=NIL
end{if}

else
begin
z:=Anfang;
repeat
Hilfszeiger:=z;
z:=z^.naechster
until ((x < Hilfszeiger^.Vokabel) or (z=NIL));

end{else}

new (z);
if (x < Hilfszeiger^.Vokabel) then
begin


z^.Vokabel:=Hilfszeiger^.Vokabel;
z^.naechster:=Hilfszeiger^.naechster;
Hilfszeiger^.Vokabel:=x;
Hilfszeiger^.naechster:=z
end

else
begin 
z^.naechster:=Hilfszeiger^.naechster;
z^.Vokabeln:=x;
Hilfszeiger^.naechster:=z
end{else}

end;


wäre echt sau lieb wenn es jemand erklären könnte was da in jeder zeile passiert...


vielen dank!

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Christian S. - Fr 29.09.06 18:47

Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Christian S.


Marc. - Fr 29.09.06 19:32

Verketteliste mit Zeigern und einer Vorwärtsdeklaration? Hoffe des stimmt so und ich habe keine quatsch geschrieben - ansonsten verbessert mich bitte :)


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:
procedure tWortliste.Insert(x: string);
var
  z, Hilfszeiger: lex;
begin
  if Anhang = nil then // sollte anfang heißen?: wenn noch kein element vorhanden ist...
    begin
      new(z); // speicher reservieren (z ist ein zeiger)
      Anfang := z; // da z nun das erste glied in der kette, ist anfang = z.
      z^.Vokabel := x; // erstem item der liste den string x zuordnen. - lex ist ein record?
      z^.naechster := nil // nächstes element noch nicht vorhanden, daher nil
    end{if}
  else // falls bereits ein element vorhanden ist
    begin
      z := Anfang; // setze z = anfang
      repeat // um sich nach ganz vorne zum letzten element zu "hangeln"
        Hilfszeiger := z;
        z := z^.naechster // nächstes element (sollte ne vorwärtsdeklaration sein)
      until ((x < Hilfszeiger^.Vokabel) or (z = nil)); // bis letztes element erreicht ist oder element noch keinen string besitzt
    end{else}

  new(z); // speicher wieder reservieren  { Kann es sein, dass hier sortiert wird? }
  if (x < Hilfszeiger^.Vokabel) then
    begin
      z^.Vokabel := Hilfszeiger^.Vokabel;
      z^.naechster := Hilfszeiger^.naechster;
      Hilfszeiger^.Vokabel := x;
      Hilfszeiger^.naechster := z
    end
  else
    begin
      z^.naechster := Hilfszeiger^.naechster;
      z^.Vokabeln := x;
      Hilfszeiger^.naechster := z
    end{else}

// Und zum schluss sollte der speicher wieder freigegeben werden:
  dispose(z);
end;


alzaimar - Fr 29.09.06 21:33

Nicht schlecht.

Der Code implementiert eine sortierte (darauf solltest Du dochmals eingehen) einfache verkettete Liste.

Allerdings ist ein syntaxfehler im Code... ein 'end.' gehört nur ganz ans Ende des Pascal-Programms.