Реализация перетекания массы в графике - 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.
Объяснение кода листинга программы
- Используется библиотека crt для работы с консолью и графиком.
- Задается максимальное значение nmax для массива a.
- Определяется тип записи point с полями x, y и m.
- Создается переменная n для хранения значения nmax.
- Создается переменная m для хранения значения nmax.
- Создаются переменные i, j, k, imn1 и imn2 для хранения значений nmax.
- Выводится сообщение с запросом ввести значение nmax.
- Инициализируется график с помощью функции initgraph.
- Устанавливается стиль заполнения с помощью функции setfillstyle.
- Генерируются случайные координаты и значения m для каждой точки в массиве a.
- Рисуются круги и заливаются цветом с помощью функций circle и floodfill.
- Проверяется условие для перетекания массы от одной точки к другой.
- Если условие выполняется, то обновляются значения imn1 и imn2.
- Если условие не выполняется, то обновляется значение n.
- Отображается сообщение с предложением ввести новое значение nmax.
- Очищается экран и сбрасывается цвет фона.
- Устанавливается стиль заполнения с помощью функции setfillstyle.
- Генерируются случайные координаты и значения m для каждой точки в массиве a.
- Рисуются круги и заливаются цветом с помощью функций circle и floodfill.
- Задерживается выполнение программы на 1 секунду.
- Сбрасывается значение n.
- Повторяется цикл, пока значение n не станет меньше 1.
- Запрашивается ввод нового значения nmax.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д