![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 29.05.2013
Сообщений: 2
|
![]()
собственно все работает, но не так как нужно)
Формулировка задачи: "На плоскости заданы n материальных точек. С некоторого момента точка с наименьшей массой исчезает, передавая свою массу ближайшей к ней точке. Так продолжается до тех пор, пока не останется одна точка. Реализовать этот процесс и найти оставшуюся точку." сейчас точки перетекают по массе (от меньшей к большей) а нужно чтобы от меньшей массы к ближней точке (без разницы какая масса). вот код программы: [PASCAL]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; 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.[/PASCAL] |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 29.05.2013
Сообщений: 2
|
![]()
есть какие нибудь мысли?
|
![]() |
![]() |
![]() |
#3 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Конечно есть:
В цикле ищите точку с минимальной массой В цикле ищете точку, наиболее близкую к найденной на предыдущем шаге точке Прибавляете массу первой точки к массе второй точки и удаляете первую точку из массива
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 19.11.2011
Сообщений: 83
|
![]()
Неужели так сложно форматировать код?
|
![]() |
![]() |