pascalabcnet/TestSuite/CompilationSamples/ForeachIEnumerable.pas

51 lines
1.1 KiB
ObjectPascal
Raw Permalink Normal View History

// Пример иллюстрирует реализацию классом интерфейса IEnumerable
// для использования его в операторе foreach
2015-05-14 22:35:07 +03:00
uses System.Collections;
type
// Генератор чисел Фибоначчи
2015-05-14 22:35:07 +03:00
FibGen = class(IEnumerable, IEnumerator)
private
a,b,n,i: integer;
public
constructor Create(n: integer);
begin
i := -1;
a := 0;
b := 1;
Self.n := n;
end;
function Get_Current: Object;
begin
if i=0 then
Result := 1
else Result := b;
end;
function GetEnumerator: IEnumerator;
begin
Result := Self;
end;
function MoveNext: boolean;
begin
i += 1;
Result := i<n;
if i=0 then exit;
var c := a + b;
a := b;
b := c;
end;
property Current: Object read Get_Current;
procedure Reset;
begin
i := -1;
end;
end;
var f: FibGen;
begin
writeln('Числа Фибоначчи');
2015-05-14 22:35:07 +03:00
f := new FibGen(25);
foreach x: integer in f do
write(x,' ');
end.