program zadacha_229; {Геpшенович Игоpь. Задача 229} uses Crt, Graph, Gersh; const dir='c:\work\pascal\bgi'; {dir - католог драйвера} pause = 10000; {задержка} N = 15; {начальное количество жучков} R = 200; {начальный радиус для случая расположения по окружности} var x, y : array [1..N] of LongInt; {массивы хранят координаты жучков по осям} i, j, k, d, m : Integer; {m - текущее количество жучков d - расстояние между жучками i - традиционно переменная для пробега циклов j, k - используются для удаления жучка} procedure Num; {дежурная подпрограмма печатает номер жучка} var a : string; Begin for i:=1 to m do begin Str (i,a); SetColor (i); OutTextXY (x[i]+1,y[i]+1,a); end; End; {Num} procedure Go; {заставляет жучков бегать друг за другом} Begin for i:=1 to m-1 do begin if x[i]x[i+1] then dec(x[i]); if y[i]>y[i+1] then dec(y[i]); end; {последний догоняет первого} if x[m]x[1] then dec(x[m]); if y[m]>y[1] then dec(y[m]); End; {go} procedure eat; {процедура определяет не съедены ли жучки} Begin for i:=1 to m-1 do begin d:=Trunc(sqrt(sqr(x[i+1]-x[i])+sqr(y[i+1]-y[i]))); if d<10 then begin j:=m-i-1; for k:=1 to j do begin x[i+k]:=x[i+k+1]; y[i+k]:=y[i+k+1]; end; dec(m); break; end; end; if Trunc(sqrt(sqr(x[1]-x[m])+sqr(y[1]-y[m])))<10 then begin for k:=1 to m-1 do begin x[k]:=x[k+1]; y[k]:=y[k+1]; end; dec(m); end; end; {eat} {задание начальных позиций} procedure RND; {случайно} Begin for i:=1 to N do x[i]:=Random(GetMaxX); for i:=1 to N do y[i]:=Random(GetMaxY); End; {RND} procedure ToLine (z : word); {по прямой} Begin X[1]:=Random(GetMaxX div 2); Y[1]:=Random(GetMaxY); for i:=2 to N do begin x[i]:=x[i-1]+Random(z); while x[i]>GetMaxX do x[i]:=x[i]-200; y[i]:=y[1]; PutPixel(x[i],y[i],i); end; OutTextXY (1,1,'Press Any Key For Start!'); Space; End; {ToLine} procedure Line2; {кривая линия} Begin x[1]:=Random(100); y[1]:=Random(100); for i:=2 to N do begin x[i]:=x[i-1]+Random(30); y[i]:=y[i-1]+Random(30); end; End; {Line2} procedure Around; {по окружности} var a : Real; Begin for i:=1 to N do begin a:=i*2*Pi/N; X[i]:=Round(R*Cos(a))+(GetMaxX div 2); Y[i]:=Round(R*Sin(a))+(GetMaxY div 2); PutPixel(x[i],y[i],i); end; OutTextXY (1,1,'Press Any Key For Start!'); Space; End; {Around} BEGIN Randomize; GraphBegin (dir); {задаем начальные позиции:} RND; {случайно} { ToLine(70); {по прямой} { Line2; {кривая линия} { Around; {по окружности} m:=n; {первоначальное количество жучков} {основной цикл} repeat ClearDevice;{} for i:=1 to m do PutPixel(x[i],y[i],i); Num;{} delay(pause); Go; eat; until KeyPressed or (m=0); END.