Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Паскаль / do9 / iriepas201 / Irie Pascal / samples / primes
.pasprogram primes(input, output);
const
NodeSize = 1024;
type
PrimeList = ^node;
node = record
next : PrimeList;
data : array[1..NodeSize] of integer;
num : integer;
end;
var
head : PrimeList;
num, found, candidate : integer;
function NewNode : PrimeList;
var
ptr : PrimeList;
begin
new(ptr);
ptr^.next := Nil;
ptr^.num := 0;
NewNode := ptr;
end; (* NewNode *)
function InList(l : PrimeList) : boolean;
var
done, found : boolean;
i : integer;
begin
found := false;
done := false;
i := 1;
while not done do
begin
(* writeln('i=', i, ' num=', l^.num); *)
if i > l^.num then
begin
done := true
end
else
begin
if (candidate mod l^.data[i]) = 0 then
begin
found := true;
done := true
end
else
i := i + 1
end
end;
InList := found;
end; (* InList *)
procedure AddPrime(l : PrimeList);
begin
if l^.num >= NodeSize then
begin
l^.next := NewNode;
l := l^.next;
end;
l^.num := l^.num + 1;
l^.data[l^.num] := candidate;
writeln(candidate);
found := found + 1;
end; (* AddPrime *)
procedure CheckPrime;
var
ptr : PrimeList;
done : boolean;
begin
ptr := head;
done := false;
while not done do
begin
if InList(ptr) then
done := true
else
if ptr^.next = Nil then
begin
AddPrime(ptr);
done := true
end
else
ptr := ptr^.next;
end
end; (* CheckPrime *)
begin
head := NewNode;
write('Enter number of primes to generate ');
readln(num);
found := 0;
candidate := 2;
AddPrime(head);
candidate := 3;
while found < num do
begin
CheckPrime;
candidate := candidate + 2
end
end.
Соседние файлы в папке samples