Ocena użytkownikóww: ***** / 4
Nadesłany przez Tomasz Lubiński, 26 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
SitoEratostenesa.adb:
--
-- sito Eratostenesa - poszukiwanie liczb pierwszych
-- www.algorytm.org
-- (c)2006 Tomasz Lubinski
--
with Text_IO;
use Text_IO;
with Ada.Numerics.Generic_Elementary_Functions;
procedure SitoEratostenesa is
j,dokad: Integer;
zakres : Integer := 100;
tablica : array (1..zakres) of Integer;
package Math is new Ada.Numerics.Generic_Elementary_Functions(Float);
begin
dokad := Integer(Math.sqrt(Float(zakres)));
-- inicjuj tablice
for i in 1..zakres loop
tablica(i) := i;
end loop;
-- algorytm - sito eratostenesa
for i in 2..dokad loop
if tablica(i) /= 0 then
j:= i + i;
while j <= zakres loop
tablica(j) := 0;
j := j + i;
end loop;
end if;
end loop;
-- wypisz wynik
Put_Line("Liczby pierwsze z zakresu od 1 do " & Integer'Image(zakres));
for i in 2 .. zakres loop
if tablica(i) /=0 then
Put(Integer'Image(i) & ", ");
end if;
end loop;
end;