
22.2 Опис розробленої головної програми
Лістинг розробленої програми приведено в додатку. Програма написана на мові Pascal в середовищі Turbo Pascal
До складу програми входять наступні функції та методи
Опис функції |
Призначення функції |
function Value:real |
Вичислити об’єм молекули |
function shar.Value:real; |
Повертає об’єм молекули |
function initializeGraph:integer; |
Функція ініціалізації анімації |
Далі приведено метод вводу даних в якому в програму вводяться дані.
function Value:real; {Вичислити Об’єм молекули}
{procedure PrintState;}
end;
function shar.value:real’
begin { повертає об’єм малекули }
value:=4*pi*r*r*r/1;
end;
function initializeGraph:integer; { ініціалізує анімацію }
var grDriver : Integer;
grMode : Integer;
begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
initializeGraph:=GraphResult;
end;
2.3 Керівництво користувача
Запускпрограми здійснюється з головного меню інтегрованого
cередовища Turbo Pascal шляхом вибору операції Run.
(Попередньо програма повинна бути завантажена в ОП –
F10, File, Open, molekula.pas).
Після запуску програми включається анімація.
Рисунок2. Вигляд відкритого проекту
Запускаємо проект на виконання і одержуємо результат
Рисунок 3 Результат роботи проекту
2.4 Опис файлів даних та інтерфейсу програми
До складу програмного комплексу входять такі файли:
Файл molekula.pas, що містить вихідний текст програми
файл molekula.exe – прокомпільований виконуваний файл.
Оголошення класу та визначення його методів відбувається у файлі програми.
Висновки
В ході написання представленого проекту було вивчено і описано теоретичний матеріал, що стосується теми «створення анімації типу,, Рухомих фігур’’з використанням методології ООП.», опрацьовано технічне завдання, розроблено алгоритм роботи програми, спроектований клас користувача та складено програму, яка реалізує всі поставлені завдання. Програма була протестована і дала коректні результати. Програма складена на мові Pascal з використанням методів об’єктно орієнтованого програмування.
Схеми алгоритму, вихідний текст програми та результати її роботи додаються.
Список використаних джерел
1. Pascal: Пер. С англ./Дейтел Х.,Дейтел П., Листфилд Дж., Нието Т., Йегер Ш., Златкина М. – СПб.: БХВ-Петербург, 2006. – 1056 с.:ил.
2. Джеффри Рихтер - Pascal. Программирование на Pascal. Мастер-класс./Пер. с англ. — М.: Издательство «Русская Редакция»; СПб.: Питер, 2007. — 656 стр. : ил.
3. Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер - Pascal 2008
4. Герберт Шилдт - Pascal Учебный Курс. - Питер, Москва, 2003.
5. Симон Робинсон, Олли Корнес, Джей Глинн, Бартон Харвей, Крейг Макквин, Джерод Моемека, Кристиан Нагель, Морган Скиннер, Карли Ватсон - Pascal для профессионалов Том I.
6. Симон Робинсон, Олли Корнес, Джей Глинн, Бартон Харвей, Крейг Макквин, Джерод Моемека, Кристиан Нагель, Морган Скиннер, Карли Ватсон - Pascal для профессионалов Том II.
7. А.В. Фролов, Г.В. Фролов - Язык Pascal. Самоучитель. – М.: Диалог-Мифи, 2003.-560с.
8. http://ru.wikipedia.org/wiki/Виртуальный_метод
9.http://uk.wikipedia.org/wiki/анімація_(програмування))
10.http://www.rsdn.ru/article/dotnet/datagridview20.xьl
Додаток A
Лістинг програми
Uses Graph,Crt;
const MaxShar=10;
type shar = object
x,y:integer;
r:word;
color:byte;
dx,dy:shortint;
hits:set of byte;
constructor initShar(x0,y0:integer; r0:word; color0:byte; dx0,dy0:shortint);
procedure Move;
procedure Show;
procedure Hide;
procedure CheckBorder;
procedure CheckHit(k:byte);
procedure revertXDirection;
procedure revertYDirection;
procedure TurnAfterHit(k:byte);
function Value:real;
{procedure PrintState;}
end;
var bgColor,i:byte;
x,y,dx,dy,ErrCode:integer;
r:word;
shars: array[1..MaxShar] of shar;
sh:shar;
f:text;
Procedure shar.Move;
begin
x:=x+dx;
y:=y+dy;
end;
Procedure shar.Show;
begin
setColor(color);
circle(x, y, r);
{PutPixel(x,y,color);}
end;
Procedure shar.Hide;
begin
setColor(bgColor);
circle(x, y, r);
end;
procedure shar.revertXDirection;
begin
dx:=-dx;
x:=x+dx;
end;
procedure shar.revertYDirection;
begin
dy:=-dy;
y:=y+dy;
end;
Constructor shar.initShar(x0, y0 :integer; r0 :word; color0 :byte; dx0, dy0 :shortint);
begin
x:=x0;
y:=y0;
r:=r0;
color:=color0;
dx:=dx0;
dy:=dy0;
hits:=[];
end;
procedure shar.CheckBorder;
begin
if (r+x>=GetMaxX-1) or (x-r<=1) then revertXDirection;
if (y+r>=GetMaxY-1) or (y-r<=1) then revertYDirection
end;
{procedure shar.PrintState;
begin
writeln(f,'x=',x:3,' y=',y:3,' r=',r:3,' dx=',dx:3,' dy=',dy:3);
end;}
procedure shar.TurnAfterHit(k:byte);
var m1, m2 :real;
vx10,vy10,vx20,vy20:integer;
begin
m1 := Value;
m2 := shars[k].Value;
vx10 := dx;
vy10 := dy;
vx20 := shars[k].dx;
vy20 := shars[k].dy;
dx := round((2*m2*vx20 + (m1-m2)*vx10)/(m1+m2));
dy := round((2*m2*vy20 + (m1-m2)*vy10)/(m1+m2));
shars[k].dx := round((2*m1*vx10 + (m2-m1)*vx20)/(m1+m2));
shars[k].dy := round((2*m1*vy10 + (m2-m1)*vy20)/(m1+m2));
end;
function shar.Value:real;
begin
Value:=4*Pi*r*r*r/1;
end;
procedure shar.CheckHit(k:byte);
var i1:byte;
dist:longint;
begin
for i1:=1 to MaxShar do if ((i1<>k) and not(k in hits)) then
begin
shars[i1].hits:=shars[i1].hits+[k];
dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
if (dist<r+shars[i1].r) then
begin
TurnAfterHit(i1);
CheckBorder;
Move;
shars[i1].CheckBorder;
shars[i1].Move;
dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
while (dist<r+shars[i1].r) do
begin
CheckBorder;
Move;
shars[i1].CheckBorder;
shars[i1].Move;
dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
end;
end;
end;
end;
function initializeGraph:integer;
var grDriver : Integer;
grMode : Integer;
begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
initializeGraph:=GraphResult;
end;
begin
ErrCode:=initializeGraph;
if ErrCode <> grOk then
WriteLn('pomylka inicializacii:', GraphErrorMsg(ErrCode))
else
begin
assign(f,'log.txt');
rewrite(f);
bgColor:=0;
rectangle(1,1,GetMaxX-1,GetMaxY-1);
{shars[1].initShar(199,199,100,3,6,-3);
shars[2].initShar(100,200,40,4,5);
shars[3].initShar(200,200,20,5,-7,-4);
shars[4].initShar(400,300,25,-9,-1);
shars[5].initShar(500,200,35,14,-5,-8);
if (MaxShar>60) then}
for i:=1 to MaxShar do
begin
r:=20+random(17);
shars[i].initShar(1+r+random(GetMaxX-6*r),
1+r+random(GetMaxY-2*r),r,1+random(GetMaxColor-1),
random(15)-7,random(12)-6);
end;
repeat
for i:=1 to MaxShar do
shars[i].Show;
Delay(58);
for i:=1 to MaxShar do
shars[i].Hide;
for i:=1 to MaxShar do
begin
shars[i].Move;
shars[i].CheckBorder;
shars[i].CheckHit(i);
end;
for i:=1 to MaxShar do
shars[i].hits:=[];
until keyPressed;
CloseGraph;
close(f);
end
end.
Додаток Б
Рисунок 4. Результат роботи проекту