Advertisement
apfel2kuchen

Untitled

Nov 21st, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. Habe ein Beispiel aus dem Skript! In diesem Beispiel ist mir nicht ganz klar, ob ich es richtig Verstanden habe.. Deswegen habe ich mal bei den einzelnen Schritten dazugeschrieben was passiert denke ich da richtig?
  2.  
  3. In der Rekursions Ebene 2 wird mir das Beispiel unklar...
  4.  
  5. Nehmen wir an wir haben eine Lineare Liste mit den Werten Adresse1(Wurzel) (10), Adresse2 (12), Adresse3 (20)!
  6. Wobei 10 die Wurzel ist, da es ja der erste Wert ist und 12 der gesuchte wert ist, der entfernt werden soll.
  7.  
  8. -------------------------------------------------
  9. Beispiel 6.2.6 (Skript)
  10. Wir geben eine rekursive Prozedur für das Entfernen eines Elementes aus einer Liste
  11. an
  12. -------------------------------------------------
  13.  
  14.  
  15. procedure ListenElemEntfernen (inZahl : integer;
  16. var ioRefAnfang : tRefListe;
  17. var outGefunden : boolean);
  18. { entfernt aus einer Liste mit Anfangszeiger ioRefAnfang das Element mit dem Wert inZahl, bei erfolgreicher Entfernung wird outGefunden
  19. auf truegesetzt, sonst auf false }
  20.  
  21. var
  22. Zeiger : tRefListe;
  23. gefunden : boolean;
  24. begin
  25. if ioRefAnfang = nil then
  26. gefunden := false
  27. else
  28. if ioRefAnfang^.info = inZahl then
  29. { Element gefunden, also entfernen }
  30. begin
  31. Zeiger := ioRefAnfang;
  32. ioRefAnfang := ioRefAnfang^.next;
  33. dispose (Zeiger);
  34. gefunden := true
  35. end
  36. else
  37. { Element noch nicht gefunden, es folgt dasrekursive Durchsuchen des Listenrestes }
  38. ListenElemEntfernen (inZahl, ioRefAnfang^.next, gefunden);
  39. outGefunden := gefunden
  40. end; { ListenElemEntfernen }
  41. -------------------------------------------------
  42.  
  43. Also laufen wir das Programm das erste mal durch!
  44. ioRefAnfang zeigt beim ersten Aufruf auf die Wurzel der Liste!
  45. 1. if ioRefAnfang = nil... Trifft nicht zu
  46.  
  47. 2. Er springt zum else Teil
  48.  
  49. 3. if ioRefAnfang^.info = inZahl then .. Trifft nicht zu, da die gesuchte Zahl nicht in der Wurzel ist und der Aktuell wert ja 10 ist..
  50.  
  51. 4. Er springt also in die Else Anweisung und die Funktion ruft sich nochmal selbst auf! Siehe nächste Zeile
  52. ListenElemEntfernen (inZahl, ioRefAnfang^.next, gefunden); ioRefAnfang^.Next zeigt hier ja Quasi noch auf Wurzel.Next, da es ein VAR-Parameter ist!
  53. -------------------------------------------------
  54.  
  55.  
  56.  
  57. Wir kommen in die Rekursionsebene Nr.2
  58.  
  59. HIER BIN ICH MIR NICHT SICHER WAS PASSIERT
  60.  
  61. Jetzt Zeigt ioRefAnfang auf des 2 ListenElement mit dem Gesuchtenwert 12..
  62.  
  63. 1. if ioRefAnfang = nil... Trifft nicht zu
  64.  
  65. 2. er springt zum Else Teil und prüft ob die gesuchte Zahl in ioRefAnfang^.Info steht, was auch stimmt somit werden die Anweisungen der else Anweisung ausgeführt
  66.  
  67. 2.1 Zeiger := ioRefAnfang; {Hier wird Zeiger auf Adresse2 (l2) gesetzt, der VAR-Variable (ioRefAnfang) wird ja nichts zugewiesen}
  68.  
  69. 2.2 ioRefAnfang := ioRefAnfang^.next; (Adresse2 soll auf Adresse3 zeigen, allerdings wird somit auch ioRefAnfang^.Next(Wurzel) auf Adresse 3 gesetzt, wegen dem Var-Parameter ODER???)
  70.  
  71. 3.3 dispose (Zeiger); (Speicher von Zeiger wird freigegeben)
  72.  
  73. 3.4 gefuden := True;
  74.  
  75. 4. outGefunden := gefunden;
  76.  
  77. Schliesen der Rekursionsebene 2
  78. Nun wird in der ersten Ebene noch outGefunden auf gefunden gesetzt..
  79. -------------------------------------------------
  80.  
  81.  
  82. Ist das so richtig? Bin mir da echt nicht sicher ab der 2ten Ebene..
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement