program NewFibo;
uses
crt;
const
MaxSize=100; { максимальный размер массива }
type
_int = integer;
{ для того, чтобы можно было менять int - для отладки,
longint для показа }
TPtr = ^_int;
TVector = array[1..MaxSize] of _int;
var
i: integer;
v, vFibo: TVector;
MaxFiboIndex: integer; { максимольно возможный индекс Фибоначчи }
size : integer; { текущий (используемый) размер массива }
first, second, curr: integer; { предыдущий и текущий индексы по массиву Фибоначчи }
SeriesCount: integer; { счетчик серий }
procedure GenFibo(p: TPtr; size: integer; var MaxIndex: integer);
{ формирование массива Фибоначчи }
var
f1, f2, NextFibo: _int;
begin
f1 := 1;
f2 := 1;
p^:=f1;
inc(p);
p^:=f2;
MaxIndex := 1;
while ( (f1>0) and (f2>0) and (f1+f2>0) ) do
begin
inc(p);
p^:= f1+f2;
f1:=f2;
f2:=p^;
inc(MaxIndex);
end;
end; { GenFibo }
function IndexOf(p: TPtr; size: integer; elem: _int): integer;
{ поиск в массиве, возвращает индекс элемента, начиная с 0, либо -1, если не найдено }
var
i: integer;
begin
i:= 0;
IndexOf := -1;
while ( (i<size) and (p^ <> elem) ) do
begin
inc(p);
inc(i);
end;
if p^= elem then
IndexOf := i
end; { IndexOf }
begin
ClrScr;
{ создание глобального массива чисел Фибоначчи }
GenFibo(@vFibo, MaxSize, MaxFiboIndex);
writeln('Вектор Фибоначчи');
for i:= 1 to MaxFiboIndex do
write(vFibo[i],';');
writeln;
writeln;
randomize;
{ создание массива чисел }
{ используемый массив }
size := 20;
{ size := random(MaxSize-1); }
for i:= 1 to size do
v[i] := random(10);
for i:= 1 to 5 do
v[i] := vFibo[i];
for i:= 11 to 15 do
v[i] := vFibo[i-10];
{ печать массива }
writeln('Данный массив');
for i:= 1 to size do
write(v[i],';');
writeln;
readln;
first := -1;
second := -1;
SeriesCount := 0;
for i:= 1 to size do
begin
if (i>=3) and (first<>-1) and (second=first+1) and (v[i]=v[i-1]+v[i-2]) then
begin
{ серия }
curr := second+1;
inc(SeriesCount);
writeln('(', v[i-2], ',' , v[i-1], ',', v[i], ')');
end
else if (second=0) and (v[i]=1) then
curr := 1
else
curr := IndexOf(@vFibo, MaxFiboIndex, v[i]);
first := second;
second := curr;
end;
writeln;
writeln('Всего ', SeriesCount, ' серий' );
readln;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.