Автор работы: Пользователь скрыл имя, 21 Декабря 2013 в 22:28, курсовая работа
Практически во всех областях человеческой деятельности применяются электронные вычислительные машины. Мы так привыкли к ним, что часто их просто не замечаем, а иногда даже и не догадываемся об их существовании. Покупая билет на поезд или самолет, разговаривая с друзьями в другом городе по телефону (перечень этот можно продолжать очень долго), как-то уже и не задумываешься о причастности к этому ЭВМ. Вместе с тем ЭВМ могут выполнять и гораздо более сложную работу.
Введение …………………………………………………………………
1. Задание ………………………………………………………………...
2. Цель работы …………………………………………………………..
3. Постановка задачи …………………………………………………..
4. Анализ и разработка алгоритма …………………………………...
5. Алгоритм программы (процедур) ……………………………….
6. Текст программы …………………………………………………….
7. Результаты моделирования программы на ЭВМ ……………….
8. Выводы ………………………………………………………………..
9. Литература ……………………………………………………………
Курсовая работа
по курсу «Технологии и методы программирования»
Вариант 54
Содержание
Введение ………………………………………………………………… |
3 |
1. Задание ………………………………………………………………... |
5 |
2. Цель
работы …………………………………………………………. |
5 |
3. Постановка задачи ………………………………………………….. |
5 |
4. Анализ
и разработка алгоритма ………………… |
5 |
5. Алгоритм программы (процедур) ………………………………. |
8 |
6. Текст
программы …………………………………………………… |
9 |
7. Результаты
моделирования программы на |
13 |
8. Выводы ……………………………………………………………….. |
14 |
9. Литература …………………………………………………………… |
15 |
Введение
Практически во
всех областях человеческой деятельности
применяются электронные
Обычно
при решении отдельных задач
или комплекса взаимосвязанных
- разработка математической модели решаемой задачи;
- разработка методики
решения и определение ограничений на
решаемую задачу;
- разработка алгоритма и запись его на некотором языке;
- программирование
решения задачи на одном из языков
программирования;
- тестирование и отладка программы или комплекса программ;
- решение задачи на ЭВМ.
Разработка математической модели решаемой задачи - это первый и самый существенный этап. Если математической модели нет, то решать задачу на ЭВМ бессмысленно. Математическая модель может быть крайне простой, например взятие производной в случае поиска экстремума функции, или очень сложной, содержащей десятки тысяч линейных уравнений в случае решения задачи межотраслевого баланса. Ясно одно, что сложность математической модели в точности соответствует сложности решаемой задачи или комплекса задач.
1. Задание
Разработать программную модель взаимного качения двух объектов согласно рисунка.
EMBED Visio.Drawing.11
2. Цель работы
Углубить навыки программирования на языке Delphi. Изучить более подробно методы работы в графическом режиме и научиться использовать стандартные и более сложные команды.
3. Постановка задачи
Необходимо написать программу, которая обеспечила бы одновременное взаимное качение двух объектов (квадрата по эллипсу) от одного конца формы до другого. На форме должна присутствовать кнопка запуска программы.
4. Анализ и разработка алгоритма
Суть данной задачи сводится к следующему: эллипс катится по плоскости в одну сторону и по этому эллипсу в это же самое время катится квадрат в другую сторону. Квадрат не падает и всегда какой-либо стороной (углом) опирается на эллипс. Для вычисления движения эллипса использовались данные переменные:
fyt := a*cos(t)*sin(w) + b*sin(t)*cos(w)
fxt := a*cos(t)*cos(w) - b*sin(t)*sin(w),
где a и b – большая и малая полуось соответственно, t – угол от 0 до 2pi, w – угол поворота эллипса для осуществления вращения.
x и y – координаты
точек эллипса, по которым
Квадрат прорисовываем с помощью 5 линий, так как нужно будет вращать его относительно любой точки на его периметре.
сх- положение по оси Ох;
су- положение по оси Оу;
ang – угол поворота квадрата.
В теле процедур вычисляется коэффициент, на который необходимо произвести поворот.
ax:=cos(ang*pi/180);
ay:=sin(ang*pi/180);
После чего происходит изменение координат сх и су.
cx:=cx+round(ax*cn);
cy:=cy+round(ay*cn);
где cn это размер стороны квадрата.
При повороте квадрата фиксируем касание его точек на эллипсе:
Определяем
лежит ли точка эллипса на стороне
квадрата при помощи формулы: ((cx-x1)*(ya[i]-y1)-(xa[i]-x1)
Если произошло касание, то вычисляем длину от точки касания до точки вращения при помощи формулы:
ll:=round(sqrt((cx-xa[i])*(cx-
5. Алгоритм программы
Качение квадрата
6. Текст программы
unit Unit2 ;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const m=36; cn:=75;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var i,k,a,b,bb,jj,x,y,min1,min2:
cx,cy,maxy,x1,y1,ll,n:integer;
t,fyt,fxt,w,ax,ay,ang:real;
ya,xa:array[1..m+1] of integer;
begin
a:=150; b:=100; //большая и малая полуоси эллипса
ang:=225; //угол поворота квадрата
maxy:=maxint;
l:=4((pi*a*b+(a-b)*(a-b))/(a+
for k:=0 to 30*n do
begin
if k=0 then
for i:=0 to m do // начало движения
begin
w:=0;
t:=pi*i/(m/2);
fyt := a*cos(t)*sin(w) + b*sin(t)*cos(w);
fxt := a*cos(t)*cos(w) - b*sin(t)*sin(w);
y:=round(fyt+300);
x:=round(fxt+50);
xa[i+1]:=x;
ya[i+1]:=y;
if y>min1 then min1:=y; //нижняя гранница движения эллипса
if y<maxy then jj:=i+1; //начальная точка вращения квадрата
end;
for i:=0 to m do
//определяем нижнюю точку
begin //чтобы он катился по линии
t:=pi*i/(m/2);
w:=pi*k/180;
fxt := a*cos(t)*cos(w) - b*sin(t)*sin(w);
fyt := a*cos(t)*sin(w) + b*sin(t)*cos(w);
x:=round(fxt+50);
y:=round(fyt+300);
if y>min2 then min2:=y;
end;
if min2>min1 then //осуществляем качение эллипса
for i:=0 to m do
begin
t:=pi*i/(m/2);
w:=pi*k/180;
fxt := a*cos(t)*cos(w) - b*sin(t)*sin(w);
fyt := a*cos(t)*sin(w) + b*sin(t)*cos(w);
x:=round(fxt+50+l*k/360);
y:=round(fyt+300-(min2-min1));
xa[i+1]:=x;
ya[i+1]:=y;
with Canvas do
if i=0 then
MoveTo(x,y)
else
LineTo(x,y);
end
else
for i:=0 to m do
begin
t:=pi*i/(m/2);
w:=pi*k/180;
fxt := a*cos(t)*cos(w) - b*sin(t)*sin(w);
fyt := a*cos(t)*sin(w) + b*sin(t)*cos(w);
x:=round(fxt+50+l*k/360);
y:=round(fyt+300-min1+min2);
xa[i+1]:=x;
ya[i+1]:=y;
with Canvas do
if i=0 then
MoveTo(x,y)
else
LineTo(x,y);
end;
cx:=xa[jj]; cy:=ya[jj]; //точка, относительно которой
//вращается квадрат
ang:=ang-91; //поворачиваем квадрат
with Canvas do //прорисовка квадрата
begin
Moveto(cx,cy);
for d:=1 to 5 do
begin
ax:=cos(ang*pi/180);
ay:=sin(ang*pi/180);
if d=1 then
begin
cx:=cx+round(ax*(cn-ll));
cy:=cy+round(ay*(cn-ll));
end;
if d=5 then
begin
cx:=cx+round(ax*ll);
cy:=cy+round(ay*ll);
end;
if (d<>5) and (d<>1) then
begin
cx:=cx+round(ax*cn);
cy:=cy+round(ay*cn);
end;
if d=1 then
begin
x1:=cx;
y1:=cy;
end;
lineto(cx,cy);
ang:=ang+90;
end;
end;
bb:=0;
for i:=1 to m+1 do
if ((cx-x1)*(ya[i]-y1)-(xa[i]-x1)
begin
inc(bb);
if bb>1 then
begin
ll:=round(sqrt((cx-xa[i])*(cx-
jj:=i;
end;
end;
sleep(40);
Canvas.FillRect(ClientRect);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
end.
7. Результаты моделирования программы на ЭВМ
8. Выводы
Я научился работать в среде Delphi и использовать в ней графический режим, совместно с различными командами, а также получил огромный опыт по эмуляции движения геометрических объектов.
По результатам программы
можно наблюдать качение
Таким образом, цель задачи достигнута.
9. Литература
Р.М.Гафаров. Объектно-ориентированное программирование. Изд-во ИжГТУ, 2010 – 58с.
В. Попов. Самоучитель Паскаль и Дельфи. Издательство Питер. 2004 – 544с.
PAGE
PAGE 8