Użytkownik: reason
Tytuł: lista_cykl
Język: Pascal
Data: 8 lut 2010, 22:33
Link: http://3paste.com/s/180r/pascal/lista_cykl
Ocena:
  1. // Lista zakończona cyklem, zwraca ilosc elementów w cyklu
  2.  
  3. program wska4;
  4. uses crt;
  5. type
  6. pnode = ^node;
  7. node = record
  8. val : integer;
  9. next : pnode;
  10. end;
  11.  
  12. procedure dodaj(var head : pnode; a : integer); // tworzenie listy
  13. var
  14. p, tmp : pnode;
  15. begin
  16. p := head;
  17. if (p <> nil) then while (p^.next <> nil) do p := p^.next; // przeskakuje p na ostatni element
  18. new(tmp); // tworze nowy element
  19. tmp^.val := a;
  20. tmp^.next := nil;
  21. if (head = nil) then head := tmp else p^.next := tmp;
  22. end;
  23.  
  24. function cykl(p : pnode) : integer; // fcja zwraca ile jest elementow w cyklu
  25. var
  26. count : integer;
  27. w : pnode;
  28. begin
  29. w := p;
  30. repeat // jeden idzie co jeden element, drugi co dwa; jak sie spotkaja znaczy, ze sa w cyklu
  31. p := p^.next;
  32. w := w^.next^.next;
  33. until p^.val = w^.val;
  34. count := 0;
  35. repeat // licze dlugosc cyklu
  36. p:=p^.next;
  37. inc(count);
  38. until p^.val = w^.val;
  39. cykl := count;
  40. end;
  41.  
  42. var
  43. head, q : pnode;
  44. i : integer;
  45. begin
  46. clrscr;
  47. randomize;
  48. head := nil;
  49. for i := 1 to 50 do dodaj(head,i);
  50. q := head;
  51. while (q^.next <> nil) do q := q^.next; // q wskazuje na ost. element ciagu
  52. q^.next := head^.next^.next^.next^.next^.next^.next^.next^.next^.next; // ciag zostaje zapetlony
  53. writeln(cykl(head));
  54. end.
© 2008 3paste.com Pytania i odpowiedzi | Kontakt | Zmiany 3paste_Poland 3paste_England