Advertisement
Guest User

Untitled

a guest
Oct 30th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 3.26 KB | None | 0 0
  1. -- lab4.adb
  2. -- Materiały dydaktyczne
  3. -- J.P. 2017
  4.  
  5. with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics.Discrete_Random;
  6. use Ada.Text_IO, Ada.Integer_Text_IO;
  7.  
  8. procedure Lab4Lista is
  9. package Los_Liczby is new Ada.Numerics.Discrete_Random(Integer);
  10. use Los_Liczby;
  11.  
  12. type Element is
  13.   record
  14.     Data : Integer := 0;
  15.     Next : access Element := Null;
  16.   end record;
  17.  
  18. type Elem_Ptr is access all Element;
  19.  
  20. procedure Print(List : access Element) is
  21.   L : access Element := List;
  22. begin
  23.   if List = Null then
  24.     Put_Line("List EMPTY!");
  25.   else
  26.     Put_Line("List:");
  27.   end if;
  28.   while L /= Null loop
  29.     Put(L.Data, 4); -- z pakietu Ada.Integer_Text_IO
  30.     New_Line;
  31.     L := L.Next;
  32.   end loop;
  33. end Print;
  34.  
  35. procedure Insert(List : in out Elem_Ptr; D : in Integer) is
  36.   E : Elem_Ptr := new Element;
  37. begin
  38.   E.Data := D;
  39.   E.Next := List;
  40.   -- lub E.all := (D, List);
  41.   List := E;
  42. end Insert;
  43.  
  44. -- wstawianie jako funkcja - wersja krótka
  45. function Insert(List : access Element; D : in Integer) return access Element is
  46.   ( new Element'(D,List) );
  47.  
  48. -- do napisania !!
  49. procedure Insert_Sort(List : in out Elem_Ptr; D : in Integer) is
  50.   E : Elem_Ptr := new Element;
  51.   N : Elem_Ptr := List.Next;
  52.   P : Elem_Ptr := List;
  53. begin
  54.   E.Data := D;
  55.   if(E.Data < P.Data) then
  56.     begin
  57.       E.Next := P;
  58.       List := E;
  59.       return;
  60.     end;
  61.   end if;
  62.  
  63.   while N /= Null loop
  64.     if(E.Data < N.Data) then
  65.       begin
  66.         E.Next := N;
  67.         P.Next := E;
  68.         return;
  69.       end;
  70.     else
  71.       P:=N;
  72.       N:=N.Next;
  73.     end if;
  74.   end loop;
  75.  
  76.   P.Next := E;
  77.  
  78. end Insert_Sort;
  79.  
  80. procedure Random_Insert_Sort(Lista :in out Elem_Ptr; N : in Integer; M: in Integer) is
  81.   Wart: Integer := 0;
  82.   Gen: Generator;
  83. begin
  84.   Reset(Gen);
  85.   for I in 1..N loop
  86.     Wart := Random(Gen) mod M;
  87.     Insert_Sort(Lista, Wart);
  88.   end loop;
  89. end Random_Insert_Sort;
  90.  
  91. procedure List_Search(Lista : in out Elem_Ptr; I: in Integer) is
  92.   N: Elem_Ptr := Lista;
  93. begin
  94.   while N /= Null loop
  95.     if(N.Data = I) then begin
  96.       Put_Line("Siupa" & N.Data'Img);
  97.       return;
  98.     end;
  99.     end if;
  100.     N := N.Next;
  101.   end loop;
  102.   return;
  103. end List_Search;
  104.  
  105. function List_Search_return(Lista : in out Elem_Ptr; I: in Integer) return Elem_Ptr is
  106.   N: Elem_Ptr := Lista;
  107. begin
  108.   while N /= Null loop
  109.     if(N.Data = I) then begin
  110.       return N;
  111.     end;
  112.     end if;
  113.     N := N.Next;
  114.   end loop;
  115.   return N;
  116. end List_Search_return;
  117.  
  118. procedure List_remove(Lista: in out Elem_Ptr; I: in Integer) is
  119.   N: Elem_Ptr := Lista;
  120.   D: Elem_Ptr := Lista;
  121. begin
  122.   N := List_Search_return(Lista, I);
  123.   while D.Next /= N.Next loop
  124.     if(D.Next = N) then begin
  125.       D.Next := N.Next;
  126.       return;
  127.     end;
  128.     end if;
  129.     D := D.Next;
  130.   end loop;
  131. end List_remove;
  132.  
  133. Lista : Elem_Ptr := Null;
  134. V1 : Elem_Ptr;
  135. begin
  136.   Print(Lista);
  137.   Lista := Insert(Lista, 21);
  138.   Print(Lista);
  139.   Insert(Lista, 20);
  140.   Print(Lista);
  141.   for I in reverse 1..12 loop
  142.     Insert(Lista, I);
  143.   end loop;
  144.   Print(Lista);
  145.   Insert_Sort(Lista,13);
  146.   Print(Lista);
  147.   --Random_Insert_Sort(Lista, 10, 20);
  148.   --Print(Lista);
  149.   V1 := List_Search_return(Lista, 20);
  150.   Put_Line("przeszlo" & V1.Data'Img);
  151.   List_remove(Lista, 9);
  152.   Print(Lista);
  153. end Lab4Lista;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement