language: Ada (gnat-4.3.2)
date: 125 days 12 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
with Ada.Text_Io, Ada.Integer_Text_Io; --Ada.Numerics.Generic_Elementary_Functions;
use Ada.Text_Io, Ada.Integer_Text_Io; --Ada.Numerics.Generic_Elementary_Functions;
procedure Zes1_2011_v2 is
 
   TYPE Tab IS ARRAY (Integer RANGE <>) OF Integer;
   PROCEDURE Pobierz (T:OUT Tab) IS
   BEGIN
      FOR I IN T'RANGE LOOP
         Put("Podaj element ");
         Put(I,0);
         Put(": ");
         Get(T(I));
      END LOOP;
   END Pobierz;
   
   PROCEDURE Wypisz (T:IN Tab) IS
   BEGIN
      FOR I IN T'RANGE LOOP
         Put(T(I));
      END LOOP;
   END Wypisz;
   
   FUNCTION CzyPodzielnaPara (T:Tab) RETURN Boolean IS
  Czy_Podzielne:boolean;
   BEGIN
      Czy_Podzielne:=False;
      IF T'Length<2 THEN
         Czy_Podzielne:=False;
         End if;
   FOR I IN T'first..t'last-1 LOOP
      IF (T(I) mod T(I+1))=0 OR (T(I+1) mod T(I))=0 THEN
         Czy_Podzielne:=True;
        EXIT;
      END IF;
   END LOOP;
   RETURN Czy_Podzielne;
   END CzyPodzielnaPara;
   
   FUNCTION TablicaNKrotnych (T:Tab; N:Positive) RETURN Tab IS
      ile, n_ile, gdzie, A:integer;
   BEGIN
      Ile:=0;
      n_ile:=0;
      FOR I IN T'RANGE LOOP
         FOR J IN T'RANGE LOOP
            IF T(I)=T(J) THEN
            Ile:=Ile+1;
       
         END IF;
         END LOOP;
         IF Ile=N THEN
            A:=T(I);
            n_ile:=n_ile+1;
         END IF;
         ile:=0;
      END LOOP;
      
      DECLARE
         Wynikowa:Tab(1..N_Ile);
      BEGIN
         gdzie:=1;
         FOR I IN T'RANGE LOOP
         FOR J IN T'RANGE LOOP
               IF T(I)=T(J) THEN
                  Ile:=Ile+1;
               END IF;
            END LOOP;
            IF Ile=N THEN
               Wynikowa(Gdzie):=T(I);
               Gdzie:=Gdzie+1;
            END IF;
            ile:=0;
            END LOOP;
 
         RETURN Wynikowa;
         END;
      END TablicaNKrotnych;
 
 
   NR:Integer; N:Natural;
BEGIN
   Put("Podaj dlugosc tablicy ");
   Get(NR);
   DECLARE
      T:Tab(1..NR);
   BEGIN
      Put("Podaj tablice ");
      New_Line;
      Pobierz(T);
      New_Line(2);
      Put("Wypisana tablica "); New_line;
      Wypisz(T);
      New_Line(3);
      
      IF CzyPodzielnaPara(T)=True THEN
         Put("Sa pary podzielne przez siebie ");
         New_Line;
      ELSE
         Put("Nie ma par podzielnych przez siebie ");
      END IF;
      
      Put("Podaj ile razy moga sie powtorzyc "); Get(N);
    New_Line(2);
      New_Line; Put("Tablica mniejszych "); Wypisz(TablicaNKrotnych(T,N));
 
END;
END Zes1_2011_v2;