with Ada.Sequential_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Text_IO; use Ada.Text_IO; procedure Files is type Interest_Array is array (1..10) of Integer; type Person_Type is record Family_Name : String(1..20); Name : String(1..20); Address : String(1..20); City : String(1..20); Tot_Interests : Integer; Interests : Interest_Array; end record; package Person_IO is new Ada.Sequential_IO(Element_Type => Person_Type); function Is_In(Interest : in Integer; Interests : in Interest_Array) return Boolean is begin for I in Interests'Range loop if Interest = Interests(I) then return True; end if; end loop; return False; end Is_In; function Common_Interests(Interests : in Interest_Array; Person : in Person_Type) return Interest_Array is Result_Array : Interest_Array := (others => 0); Location : Integer := 1; begin for I in 1..Person.Tot_Interests loop if Is_In(Person.Interests(I), Interests) then Result_Array(Location) := Person.Interests(I); Location := Location + 1; end if; end loop; return Result_Array; end Common_Interests; procedure Put(File : in Ada.Text_IO.File_Type; Person : in Person_Type; Interests : in Interest_Array) is Temp : Interest_Array := Common_Interests(Interests, Person); begin if Temp(1) /= 0 then Put(File, Person.Nam4e); Put(File, Person.Family_Name); Put(File, Person.Address); Put(File, Person.City); Put(File, "Intressen: "); for I in Temp'Range loop if Temp(I) /= 0 then Put(File, Temp(I), Width => 3); else exit; end if; end loop; New_Line(File); end if; end Put; Input_File : Person_IO.File_Type; Input_Mode : Person_IO.File_Mode := Person_IO.In_File; Output_File : Ada.Text_IO.File_Type; Output_Mode : Ada.Text_IO.File_Mode := Out_File; Search : Interest_Array := (others => 0); Interest_Input : Integer; Temp_Person : Person_Type; begin Put("Ange en foljd av intressen 1 till 15, max 10 st. Avslute med 0: "); Get(Interest_Input); while Interest_Input /= 0 loop for I in Search'Range loop if Search(I) = 0 then Search(I) := Interest_Input; exit; end if; end loop; Get(Interest_Input); end loop; Person_IO.Open(Input_File, Input_Mode, "REG.BIN"); Ada.Text_IO.Open(Output_File, Output_Mode, "results.txt"); while not Person_IO.End_Of_File(Input_File) loop Person_IO.Read(Input_File, Temp_Person); Put(Output_File, Temp_Person, Search); end loop; end Files;