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

Узнай цену своей работы

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

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

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

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.

Объяснение кода листинга программы

  1. Используется библиотека crt для работы с консолью и графиком.
  2. Задается максимальное значение nmax для массива a.
  3. Определяется тип записи point с полями x, y и m.
  4. Создается переменная n для хранения значения nmax.
  5. Создается переменная m для хранения значения nmax.
  6. Создаются переменные i, j, k, imn1 и imn2 для хранения значений nmax.
  7. Выводится сообщение с запросом ввести значение nmax.
  8. Инициализируется график с помощью функции initgraph.
  9. Устанавливается стиль заполнения с помощью функции setfillstyle.
  10. Генерируются случайные координаты и значения m для каждой точки в массиве a.
  11. Рисуются круги и заливаются цветом с помощью функций circle и floodfill.
  12. Проверяется условие для перетекания массы от одной точки к другой.
  13. Если условие выполняется, то обновляются значения imn1 и imn2.
  14. Если условие не выполняется, то обновляется значение n.
  15. Отображается сообщение с предложением ввести новое значение nmax.
  16. Очищается экран и сбрасывается цвет фона.
  17. Устанавливается стиль заполнения с помощью функции setfillstyle.
  18. Генерируются случайные координаты и значения m для каждой точки в массиве a.
  19. Рисуются круги и заливаются цветом с помощью функций circle и floodfill.
  20. Задерживается выполнение программы на 1 секунду.
  21. Сбрасывается значение n.
  22. Повторяется цикл, пока значение n не станет меньше 1.
  23. Запрашивается ввод нового значения nmax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы