Реализация перетекания массы в графике - Turbo Pascal

Формулировка задачи:

Привет всем!) Помогите с задачкой)) Собственно формулировка задачи такова: На плоскости заданы n материальных точек. С некоторого момента точка с наименьшей массой исчезает, передавая свою массу ближайшей к ней точке. Так продолжается до тех пор, пока не останется одна точка. Реализовать этот процесс и найти оставшуюся точку. буду очень благодарен!)

Код к задаче: «Реализация перетекания массы в графике - Turbo Pascal»

textual
uses crt,graph;
const nmax=100;
type point=record
           x,y:integer;
           m:real
           end;
var a:array[1..nmax] of point;
    n,m,i,j,k,imn1,imn2:integer;
begin
clrscr;
repeat
write('Kol. tochek ot 3 do ',nmax,' n=');
readln(n);
until n in [2..nmax];
randomize;
initgraph(i,j,'');
setcolor(12);
setfillstyle(1,12);
for i:=1 to n do
 begin
  a[i].x:=20+random(getmaxX-40);
  a[i].y:=20+random(getmaxY-40);
  a[i].m:=10+10*random;
  circle(a[i].x,a[i].y,round(a[i].m));
  floodfill(a[i].x,a[i].y,12)
 end;
while n>1 do
 begin
  if a[1].m<a[2].m then
   begin
    imn1:=1;
    imn2:=2;
   end
  else
   begin
    imn1:=2;
    imn2:=1;
   end;
  for j:=3 to n do
   begin
    if a[j].m<a[imn1].m then
     begin
      imn2:=imn1;
      imn1:=j
     end
    else if a[j].m<a[imn2].m then imn2:=j;
   end;
  {вычислим радиус новой точки по формуле r3=exp(ln(r1^3+r2^3)/3)}
  a[imn2].m:=exp(ln(exp(ln(a[imn2].m)*3)+exp(ln(a[imn1].m)*3))/3);
  if imn1=n then n:=n-1
  else
   begin
    for k:=imn1 to n-1 do
    a[k]:=a[k+1];
    n:=n-1
   end;
  delay(1000);
  cleardevice;
  setcolor(12);
  setfillstyle(1,12);
  for i:=1 to n do
   begin
    circle(a[i].x,a[i].y,round(a[i].m));
    floodfill(a[i].x,a[i].y,12)
   end;
 end;
readln
end.

5   голосов, оценка 3.800 из 5


СОХРАНИТЬ ССЫЛКУ