Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 22:01   #1
Warskrim
Новичок
Джуниор
 
Регистрация: 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]
Warskrim вне форума Ответить с цитированием
Старый 29.05.2013, 22:25   #2
Warskrim
Новичок
Джуниор
 
Регистрация: 29.05.2013
Сообщений: 2
По умолчанию

есть какие нибудь мысли?
Warskrim вне форума Ответить с цитированием
Старый 30.05.2013, 17:35   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Конечно есть:
В цикле ищите точку с минимальной массой
В цикле ищете точку, наиболее близкую к найденной на предыдущем шаге точке
Прибавляете массу первой точки к массе второй точки и удаляете первую точку из массива
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.05.2013, 17:54   #4
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
По умолчанию

Неужели так сложно форматировать код?
pashka_dos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц