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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2012, 10:13   #1
vzik
Новичок
Джуниор
 
Регистрация: 19.05.2012
Сообщений: 2
По умолчанию Pascal. Броуновское движение молекул (диффузия)

В задаче представлено Броуновское движение молекул (диффузия). При нажатии клавиши убирается стенка и молекулы смешиваются.
А как сделать чтобы было отверстие в стенке и после нажатия молекулы перемешивались только через отверстие, а ударившись от стенку отлетали... Помогите переделать? Что-то не выходит!
Код:
program diff;
uses crt,graph;
var
gas,gas2:array[0..19,0..1] of integer;
xh,xh2,yh:array[0..19] of integer;
grDriver:integer;
grMode:integer;
grPath:string;
i,j:integer;
begin
clrscr;
randomize;
grDriver:=VGA;
grMode:=VGAHi;
grPath:='c:\bp\bgi';
InitGraph(grDriver, grMode,grPath);
for i:=0 to 19 do
    begin
    gas[i,j]:=random(50)+50;
    gas2[i,j]:=random(50)+150;
    gas[i,j+1]:=random(100)+50;
    xh[i]:=random(3)+1;
    xh2[i]:=random(3)+1;
    yh[i]:=random(3)-1;
    end;
for i:=0 to 19 do
begin
setcolor(yellow);
circle(gas[i,j],gas[i,j+1],1);
setcolor(red);
circle(gas2[i,j],gas[i,j+1],1);
end;
setcolor(green);
line(45,47,205,47);
line(205,47,205,153);
line(205,153,45,153);
line(45,153,45,47);
line(125,48,125,152);
readkey;
setcolor(black);
line(125,48,125,152);
repeat
for i:=0 to 19 do
begin
setcolor(yellow);
circle(gas[i,j],gas[i,j+1],1);
setcolor(red);
circle(gas2[i,j],gas[i,j+1],1);
end;
delay(12000);
for i:=0 to 19 do
begin
setcolor(black);
circle(gas[i,j],gas[i,j+1],1);
circle(gas2[i,j],gas[i,j+1],1);
if (gas[i,j]>200) or (gas[i,j]<50) then xh[i]:=xh[i]*(-1);
if (gas[i,j+1]>150) or (gas[i,j+1]<50) then yh[i]:=yh[i]*(-1);
if (gas2[i,j]>200) or (gas2[i,j]<50) then xh2[i]:=xh2[i]*(-1);
gas[i,j]:=gas[i,j]+xh[i];
gas[i,j+1]:=gas[i,j+1]+yh[i];
gas2[i,j]:=gas2[i,j]-xh2[i];
end;
until keypressed;
CloseGraph;
end.
vzik вне форума Ответить с цитированием
Старый 19.05.2012, 11:17   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. Отформатируйте программу.
2. Расставьте в ней комментарии.
3. По возможности используйте введенные константы, а не числа непосредственно в коде.

Ну как можно заставлять людей разбираться в неправильно оформленном коде!
s-andriano вне форума Ответить с цитированием
Старый 19.05.2012, 11:19   #3
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

В книжке "Занимательное программирование"(М.Мозговой) все классно описано.
Levsha100 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Броуновское движение Паскаль GamBitFRK Помощь студентам 7 10.05.2012 07:59
движение молекул Игорь228 C++ Builder 0 11.12.2011 00:48
броуновское движение Игорь228 C++ Builder 0 10.12.2011 23:00
Броуновское движение DEVIL666 Общие вопросы C/C++ 6 21.03.2009 18:17