forked from KolibriOS/kolibrios
2f54c7de00
git-svn-id: svn://kolibrios.org@8097 a494cfbc-eb01-0410-851d-a64ba20cac60
51 lines
1.4 KiB
Plaintext
51 lines
1.4 KiB
Plaintext
(*
|
|
adapted to Oberon-07 by 0CodErr, KolibriOS team
|
|
*)
|
|
|
|
(* This was taken from the CRITICAL MASS MODULA-3 examples *)
|
|
|
|
(* The "Sieve" program demonstrates the use of arrays,
|
|
loops and conditionals. *)
|
|
|
|
MODULE Sieve;
|
|
|
|
IMPORT In, Out, Console;
|
|
|
|
(* Search in interval 2 to 1000 for prime numbers. *)
|
|
CONST
|
|
LastNum = 1000;
|
|
|
|
(* "prime" is an array of booleans ranging from 2 to "LastNum". *)
|
|
VAR
|
|
prime: ARRAY LastNum + 2 OF BOOLEAN;
|
|
i, j: INTEGER;
|
|
|
|
BEGIN
|
|
Console.open;
|
|
|
|
Out.String("Primes in range 2.."); Out.Int(LastNum, 1); Out.Char(":"); Out.Ln;
|
|
(* Initialize all elements of the array to "TRUE".
|
|
(Note that we could have initialized the array during
|
|
the assignment.) *)
|
|
FOR i := 2 TO LastNum DO
|
|
prime[i] := TRUE
|
|
END;
|
|
(* Loop through all integers between 2 and "LastNum". Print each prime
|
|
number, starting from 2 and mark all numbers that are divisible by
|
|
that prime number to "FALSE". Repeat the step until we've exhausted
|
|
all the numbers in the interval.*)
|
|
FOR i := 2 TO LastNum DO
|
|
IF prime[i] THEN
|
|
Out.Int(i, 3);
|
|
Out.Char(" ");
|
|
FOR j := i TO LastNum DO
|
|
IF j MOD i = 0 THEN
|
|
prime[j] := FALSE
|
|
END
|
|
END
|
|
END
|
|
END;
|
|
Out.Ln; In.Ln;
|
|
|
|
Console.exit(TRUE)
|
|
END Sieve. |