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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2011, 13:10   #1
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию Turbo Pascal Опыт Резерфорда

Помогите сделать задачу.
Суть опыта: по направлению ядру золота движутся альфа--частицы. Необходимо построить траектории движения частиц при различных значениях прицельного параметра ρ.

Т.е. как я понял надо чтобы изначально на экране был только атом золота. А потом с левой стороны экрана по одной начинали вылетать частицы и уходить по траектории.



Вот в одном учебнике нашел кусок кода но самому разобраться очень сложно.
Код:
SCREEN 12: m1 = 1: m2 = 200: dt = .001            'QBASIC
LINE (0, 400)-(640, 400): LINE (320, 0)-(320, 480)
FOR i = 0 TO 30 STEP 3
x = -80: y = i: vx = 5: vy = 0
FOR t = 0 TO 30 STEP dt
r = SQR(x * x + y * y): F = -m1 * m2 / (r * r)
Fx = -F * x / r: Fy = -F * y / r: ax = Fx / m1: ay = Fy / m1
vx = vx + ax * dt: x = x + vx * dt: vy = vy + ay * dt: y = y + vy * dt
CIRCLE (320 + 5 * x, 400 - 5 * y), 1
NEXT: NEXT
Dower вне форума Ответить с цитированием
Старый 24.05.2011, 06:58   #2
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию

Не ужели никто не знает?
Dower вне форума Ответить с цитированием
Старый 24.05.2011, 08:42   #3
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

А в чем у тебя возникли затруднения?
С расчетом траектории или выводом граффики?
Есть ли какието наработки которые сделал ты?

Пойми что за тебя программу писать никто не будет. Либо во фриланс.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 24.05.2011, 11:39   #4
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию

Не знаю с чего начать. Что сделать сначала, что потом. Графику смогу нарисовать. А вот с расчетом траекторий действительно проблема.
Dower вне форума Ответить с цитированием
Старый 24.05.2011, 13:47   #5
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

у тебя есть альфа частица, она характеризуется следующим набором параметров:
масса M
координаты в плоскости X, Y.
Скорость движения (проекции на оси) Vx, Vy
ускорение (тоже проекции) ax, ay
Сила действующая на частицу (проекции) Fx, Fy

Первоначально у тебя задаются масса частицы M, ее координаты X Y и скорость Vx(судя по картинке тока Vy=0).

Между частицей и ядром возникает сила отталкивания равная произведению масс частиц деленой на квадрат расстояния, т.к. есть сила возникает ускорение частицы как следствие меняется скорость, ну и соответственно координаты в пространстве.

Тоесть ты считаешь силу взаимодействия между частицами и проецируешь на плоскости
Код:
r = SQR(x * x + y * y): F = -m1 * m2 / (r * r)
Fx = -F * x / r: Fy = -F * y / r
считаешь ускорение
Код:
ax = Fx / m1: ay = Fy / m1
находишь изменение скорости
Код:
vx = vx + ax * dt: vy = vy + ay * dt:
и наконец приращение координаты
Код:
 x = x + vx * dt:  y = y + vy * dt
А теперь все это загоняешь в цикл, который будет считать взаимодействие частиц в текущий момент времени.

в конце каждого цикла рисуешь граффику частицы по текущем координатам.

Впринципе у тя все это написанно в коде который ты привел, причем сразу вместе с граффикой.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 24.05.2011, 18:05   #6
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию

Спасибо за помощь попытаюсь разобраться. А кусок кода который я привел написан на QBASIC, а мне надо на TP.
Dower вне форума Ответить с цитированием
Старый 25.05.2011, 08:35   #7
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Не вижу в чем проблемма, тебе надо только объявить переменные, и посмотреть как организовывается цикл, а математические функции точно такие же. Скачай любую книжку по ТР, я думаю первых трех глав тебе хватит на выполнения этого задания.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 27.05.2011, 14:32   #8
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию

Исправил код вот так
Код:
uses graph,crt ;
var m1,m2,x,y,Vx,Vy,r,F,Fx,Fy,ax,ay,dt: real;
gm,gd,i,t:integer;
Begin
clrscr;
gm:=2;
gd:=9;
initgraph(gd,gm,'h:\tp7\bgi');
m1:=1;
m2:=200;
for i:= 0 to 30 do
x:=-80; y:=i; Vx:=5; Vy:=0;
for t:=0 to 30 do
r:=sqr(x+x+y*y);
F:=-m1*m2/(r*r);
Fx:=-F*x/r;
Fy:=-F*y/r;
ax:=Fx/m1;
ay:=Fy/m1;
Vx:=Vx+ax*dt;
x:=x+Vx*dt;
Vy:=Vy+ay*dt;
y:=y+Vy*dt;
circle ((320+5*x),(400-5*y),1);
closegraph;
writeln;
end.
но кампилятор ругается вот на эту строчку
Код:
circle ((320+5*x),(400-5*y),1);
И еще возник вопрос что такое m2 и dt и почему они нигде не задаются.
Dower вне форума Ответить с цитированием
Старый 27.05.2011, 15:34   #9
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Код:
circle ((320+5*x),(400-5*y),1);
Эта функция рисует круг, Procedure Circle(X,Y: Integer; R: Word)
Видимо у тебя там несовпадение типов происходит т.к. Х У у тебя вещественные а ему надо целые. используй явное преобразование типов.

m2 - Это масса ядра золота, она участвует в расчете силы отталкивания
Код:
F:=-m1*m2/(r*r);
dt-это промежуток времени через который считаются координаты, ты его почему то не определил хотя в примере он равен 0,001 (см. коней первой строки).
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 27.05.2011, 17:05   #10
Dower
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 20
По умолчанию

Я в этом не очень разбираюсь, сделал вот так но все равно не работает
Код:
var x,y: real;
x1,y1:integer;
x1:=Round(x);
x1:=Trunc(x);
x:=x1;
x:=integer(x1);
y1:=Round(y);
y1:=Trunc(y);
y:=y1;
y:=integer(y1);
и еще возник вопрос в примере который я приводил циклы идут с шагом в первом цикле я сделал так
Код:
for i:= 0 to 30 do begin
i:=i+2;
а как задать шаг во втором?
Dower вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal or Pascal ABC Ikram Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 13:44
Опыт Эрнеста Резерфорда в Delphi Nodiys Помощь студентам 2 13.04.2010 02:41
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28