Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- lab4.adb
- -- Materiały dydaktyczne
- -- J.P. 2017
- with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics.Discrete_Random;
- use Ada.Text_IO, Ada.Integer_Text_IO;
- procedure Lab4Lista is
- package Los_Liczby is new Ada.Numerics.Discrete_Random(Integer);
- use Los_Liczby;
- type Element is
- record
- Data : Integer := 0;
- Next : access Element := Null;
- end record;
- type Elem_Ptr is access all Element;
- procedure Print(List : access Element) is
- L : access Element := List;
- begin
- if List = Null then
- Put_Line("List EMPTY!");
- else
- Put_Line("List:");
- end if;
- while L /= Null loop
- Put(L.Data, 4); -- z pakietu Ada.Integer_Text_IO
- New_Line;
- L := L.Next;
- end loop;
- end Print;
- procedure Insert(List : in out Elem_Ptr; D : in Integer) is
- E : Elem_Ptr := new Element;
- begin
- E.Data := D;
- E.Next := List;
- -- lub E.all := (D, List);
- List := E;
- end Insert;
- -- wstawianie jako funkcja - wersja krótka
- function Insert(List : access Element; D : in Integer) return access Element is
- ( new Element'(D,List) );
- -- do napisania !!
- procedure Insert_Sort(List : in out Elem_Ptr; D : in Integer) is
- E : Elem_Ptr := new Element;
- N : Elem_Ptr := List.Next;
- P : Elem_Ptr := List;
- begin
- E.Data := D;
- if(E.Data < P.Data) then
- begin
- E.Next := P;
- List := E;
- return;
- end;
- end if;
- while N /= Null loop
- if(E.Data < N.Data) then
- begin
- E.Next := N;
- P.Next := E;
- return;
- end;
- else
- P:=N;
- N:=N.Next;
- end if;
- end loop;
- P.Next := E;
- end Insert_Sort;
- procedure Random_Insert_Sort(Lista :in out Elem_Ptr; N : in Integer; M: in Integer) is
- Wart: Integer := 0;
- Gen: Generator;
- begin
- Reset(Gen);
- for I in 1..N loop
- Wart := Random(Gen) mod M;
- Insert_Sort(Lista, Wart);
- end loop;
- end Random_Insert_Sort;
- procedure List_Search(Lista : in out Elem_Ptr; I: in Integer) is
- N: Elem_Ptr := Lista;
- begin
- while N /= Null loop
- if(N.Data = I) then begin
- Put_Line("Siupa" & N.Data'Img);
- return;
- end;
- end if;
- N := N.Next;
- end loop;
- return;
- end List_Search;
- function List_Search_return(Lista : in out Elem_Ptr; I: in Integer) return Elem_Ptr is
- N: Elem_Ptr := Lista;
- begin
- while N /= Null loop
- if(N.Data = I) then begin
- return N;
- end;
- end if;
- N := N.Next;
- end loop;
- return N;
- end List_Search_return;
- procedure List_remove(Lista: in out Elem_Ptr; I: in Integer) is
- N: Elem_Ptr := Lista;
- D: Elem_Ptr := Lista;
- begin
- N := List_Search_return(Lista, I);
- while D.Next /= N.Next loop
- if(D.Next = N) then begin
- D.Next := N.Next;
- return;
- end;
- end if;
- D := D.Next;
- end loop;
- end List_remove;
- Lista : Elem_Ptr := Null;
- V1 : Elem_Ptr;
- begin
- Print(Lista);
- Lista := Insert(Lista, 21);
- Print(Lista);
- Insert(Lista, 20);
- Print(Lista);
- for I in reverse 1..12 loop
- Insert(Lista, I);
- end loop;
- Print(Lista);
- Insert_Sort(Lista,13);
- Print(Lista);
- --Random_Insert_Sort(Lista, 10, 20);
- --Print(Lista);
- V1 := List_Search_return(Lista, 20);
- Put_Line("przeszlo" & V1.Data'Img);
- List_remove(Lista, 9);
- Print(Lista);
- end Lab4Lista;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement