Advertisement
wojtas626

[PAS] Lista podwójnie wiązana

Dec 15th, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 8.01 KB | None | 0 0
  1. program Project1;
  2.  
  3. uses
  4.     crt, DOS;
  5. type
  6.   listPtr = ^list;
  7.  
  8.   list = record
  9.        next: listPtr;
  10.        previous: listPtr;
  11.        name: String;
  12.        points: Double;
  13.   end;
  14.  
  15. procedure listStartAdd(var listStart: listPtr; var listEnd: listPtr);
  16. var
  17.    newElement: listPtr;
  18. begin
  19.      clrScr;
  20.      newElement := listStart;
  21.      if listStart = NIL then
  22.      begin
  23.           new(newElement);
  24.           writeLn('Wprowadz nazwisko: ');
  25.           readLn(newElement^.name);
  26.           writeLn('Wprowadz liczbe punktow: ');
  27.           readLn(newElement^.points);
  28.           newElement^.next := NIL;
  29.           newElement^.previous := NIL;
  30.           listEnd := newElement;
  31.           listStart := newElement;
  32.      end else
  33.      begin
  34.           new(newElement);
  35.           newElement^.next := listStart;
  36.           listStart^.previous := newElement;
  37.           newElement^.previous := NIL;
  38.           listStart := newElement;
  39.           writeLn('Wprowadz nazwisko: ');
  40.           readLn(newElement^.name);
  41.           writeLn('Wprowadz liczbe punktow: ');
  42.           readLn(newElement^.points);
  43.      end;
  44. end;
  45.  
  46. procedure listEndAdd(var listStart: listPtr; var listEnd: listPtr);
  47. var
  48.    newElement: listPtr;
  49. begin
  50.      clrScr;
  51.      if listEnd = NIL then
  52.      begin
  53.           newElement := listStart;
  54.           new(newElement);
  55.           writeLn('Wprowadz nazwisko: ');
  56.           readLn(newElement^.name);
  57.           writeLn('Wprowadz liczbe punktow: ');
  58.           readLn(newElement^.points);
  59.           newElement^.next := NIL;
  60.           newElement^.previous := NIL;
  61.           listEnd := newElement;
  62.           listStart := newElement;
  63.      end else
  64.      begin
  65.           newElement := listEnd;
  66.           New(newElement^.next);
  67.           newElement := newElement^.next;
  68.           writeLn('Wprowadz nazwisko: ');
  69.           readLn(newElement^.name);
  70.           writeLn('Wprowadz liczbe punktow: ');
  71.           readLn(newElement^.points);
  72.  
  73.           newElement^.next := NIL;
  74.           newElement^.previous := listEnd;
  75.           listEnd := newElement;
  76.      end;
  77. end;
  78.  
  79. procedure ListStartdelete(var listStart: listPtr; var listEnd: listPtr);
  80. var
  81.    pointer: listPtr;
  82. begin
  83.      if listStart = NIL then
  84.      begin
  85.           clrScr;
  86.           writeLn('Nie moge usunac - lista pusta!');
  87.           writeLn;
  88.           writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  89.           ReadKey;
  90.      end else
  91.      if listStart^.next = NIL then
  92.      begin
  93.           pointer := listStart;
  94.           dispose(pointer);
  95.           listStart := NIL;
  96.           listEnd := NIL;
  97.      end else
  98.      begin
  99.           pointer := listStart;
  100.           listStart := pointer^.next;
  101.           listStart^.previous := NIL;
  102.           dispose(pointer);
  103.      end;
  104. end;
  105.  
  106. procedure listEndDelete(var listStart: listPtr; var listEnd: listPtr);
  107. var
  108.    pointer: listPtr;
  109. begin
  110.      if listStart = NIL then
  111.      begin
  112.           clrScr;
  113.           writeLn('Nie moge usunac - lista pusta!');
  114.           writeLn;
  115.           writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  116.           ReadKey;
  117.      end else
  118.      if listStart^.next = NIL then
  119.      begin
  120.           pointer := listStart;
  121.           dispose(pointer);
  122.           listStart := NIL;
  123.           listEnd := NIL;
  124.      end else
  125.      begin
  126.           pointer := listEnd;
  127.           listEnd := pointer^.previous;
  128.           listEnd^.next := NIL;
  129.           dispose(pointer);
  130.      end;
  131. end;
  132.  
  133. procedure listClear(var listStart: listPtr; var listEnd: listPtr);
  134. var
  135.    pointer: listPtr;
  136. begin
  137.      while listStart <> NIL do
  138.      begin
  139.           pointer := listStart;
  140.           listStart := pointer^.next;
  141.           dispose(pointer);
  142.      end;
  143.      listStart := NIL;
  144.      listEnd := NIL;
  145. end;
  146.  
  147. procedure listShow(var listStart: listPtr);
  148. var
  149.    pointer: listPtr;
  150. begin
  151.      clrScr;
  152.      pointer := listStart;
  153.      if pointer = NIL then
  154.      begin
  155.           writeLn('Lista pusta!');
  156.      end else
  157.      begin
  158.           writeLn('Nazwisko: ', pointer^.name);
  159.           writeLn('Punkty: ', pointer^.points:0:1);
  160.  
  161.           while pointer^.next <> NIL do
  162.           begin
  163.                writeLn;
  164.                pointer := pointer^.next;
  165.                writeLn('Nazwisko: ', pointer^.name);
  166.                writeLn('Punkty: ', pointer^.points:0:1);
  167.           end;
  168.      end;
  169.      writeLn;
  170.      writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  171.      ReadKey;
  172. end;
  173.  
  174. procedure listReverseShow(var listEnd: listPtr);
  175. var
  176.    pointer: listPtr;
  177. begin
  178.      clrScr;
  179.      pointer := listEnd;
  180.      if pointer = NIL then
  181.      begin
  182.           writeLn('Lista pusta!');
  183.      end else
  184.      begin
  185.           writeLn('Nazwisko: ', pointer^.name);
  186.           writeLn('Punkty: ', pointer^.points:0:1);
  187.  
  188.           while pointer^.previous <> NIL do
  189.           begin
  190.                writeLn;
  191.                pointer := pointer^.previous;
  192.                writeLn('Nazwisko: ', pointer^.name);
  193.                writeLn('Punkty: ', pointer^.points:0:1);
  194.           end;
  195.      end;
  196.      writeLn;
  197.      writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  198.      ReadKey;
  199. end;
  200.  
  201. procedure findLargest(var listStart: listPtr);
  202. var
  203.    pointer: listPtr;
  204.    largest: Double;
  205.    foundName: String;
  206. begin
  207.      clrScr;
  208.      pointer := listStart;
  209.      if pointer = NIL then
  210.      begin
  211.           writeLn('Lista pusta!');
  212.      end else
  213.      begin
  214.           largest := pointer^.points;
  215.           foundName := pointer^.name;
  216.           while pointer^.next <> NIL do
  217.           begin
  218.                pointer := pointer^.next;
  219.                if pointer^.points > largest then
  220.                begin
  221.                     largest := pointer^.points;
  222.                     foundName := pointer^.name;
  223.                end;
  224.           end;
  225.           writeLn('Najwyzszy wynik to: ', largest:0:1);
  226.           writeLn('Uzyskal/a go: ', foundName);
  227.           writeLn;
  228.           writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  229.           ReadKey;
  230.      end;
  231. end;
  232.  
  233. procedure findLeast(var listStart: listPtr);
  234. var
  235.    pointer: listPtr;
  236.    least: Double;
  237.    foundName: String;
  238. begin
  239.      clrScr;
  240.      pointer := listStart;
  241.      if pointer = NIL then
  242.      begin
  243.           writeLn('Lista pusta!');
  244.      end else
  245.      begin
  246.           least := pointer^.points;
  247.           foundName := pointer^.name;
  248.           while pointer^.next <> NIL do
  249.           begin
  250.                pointer := pointer^.next;
  251.                if pointer^.points < least then
  252.                begin
  253.                     least := pointer^.points;
  254.                     foundName := pointer^.name;
  255.                end;
  256.           end;
  257.           writeLn('Najnizszy wynik to: ', least:0:1);
  258.           writeLn('Uzyskal/a go: ', foundName);
  259.           writeLn;
  260.           writeLn('Nacisnij dowolny klawisz, aby powrocic do menu...');
  261.           ReadKey;
  262.      end;
  263. end;
  264.  
  265. var
  266.    listStart, listEnd, pointer: listPtr;
  267.    choice: String;
  268. begin
  269.      listEnd:= NIL;
  270.      listStart := NIL;
  271.  
  272.      while true do
  273.      begin
  274.           clrScr;
  275.           WriteLn('1. Dodaj element na poczatku listy');
  276.           WriteLn('2. Dodaj element na koncu listy');
  277.           WriteLn('3. Usun element z poczatku listy');
  278.           WriteLn('4. Usun element z konca listy');
  279.           WriteLn('5. Wyczysc liste');
  280.           WriteLn('6. Wyswietl cala liste od poczatku');
  281.           WriteLn('7. Wyswietl cala liste od konca');
  282.           WriteLn('8. Znajdz najmniejszy wynik');
  283.           WriteLn('9. Znajdz najwiekszy wynik');
  284.           WriteLn('0. Wyjscie');
  285.           ReadLn(choice);
  286.           case choice of
  287.           '1': listStartAdd(listStart, listEnd);
  288.           '2': listEndAdd(listStart, listEnd);
  289.           '3': listStartDelete(listStart, listEnd);
  290.           '4': listEndDelete(listStart, listEnd);
  291.           '5': listClear(listStart, listEnd);
  292.           '6': listShow(listStart);
  293.           '7': listReverseShow(listEnd);
  294.           '8': findLeast(listStart);
  295.           '9': findLargest(listStart);
  296.           '0': break;
  297.           end;
  298.      end;
  299. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement