Технологии и методы программирования

Автор работы: Пользователь скрыл имя, 21 Декабря 2013 в 22:28, курсовая работа

Описание работы

Практически во всех областях человеческой деятельности применяются электронные вычислительные машины. Мы так привыкли к ним, что часто их просто не замечаем, а иногда даже и не догадываемся об их существовании. Покупая билет на поезд или самолет, разговаривая с друзьями в другом городе по телефону (перечень этот можно продолжать очень долго), как-то уже и не задумываешься о причастности к этому ЭВМ. Вместе с тем ЭВМ могут выполнять и гораздо более сложную работу.

Содержание работы

Введение …………………………………………………………………
1. Задание ………………………………………………………………...
2. Цель работы …………………………………………………………..
3. Постановка задачи …………………………………………………..
4. Анализ и разработка алгоритма …………………………………...
5. Алгоритм программы (процедур) ……………………………….
6. Текст программы …………………………………………………….
7. Результаты моделирования программы на ЭВМ ……………….
8. Выводы ………………………………………………………………..
9. Литература ……………………………………………………………

Файлы: 1 файл

KURS.doc

— 43.00 Кб (Скачать файл)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Курсовая работа

по курсу «Технологии и методы программирования»

 

Вариант 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 – координаты  точек эллипса, по которым впоследствии  будет перемещаться квадрат. Эллипс  получаем с помощью процедуры  LineTo, так как при использовании функции Canvas.Eliipse мы не можем вращать фигуру.

Квадрат прорисовываем с  помощью 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)*(cy-y1))=0 где x1, y1 – это точка, фиксирующая  угол квадрата, а xa[i],ya[i] – точка,  принадлежащая эллипсу.

Если произошло касание, то вычисляем длину от точки касания  до точки вращения при помощи формулы:

ll:=round(sqrt((cx-xa[i])*(cx-xa[i])+(cy-ya[i])*(cy-ya[i]))), чтобы начать вращать квадрат  от точки: cx=xa[i], cy=ya[i], то есть начинаем вращение относительно этой точки до последующего касания с эллипсом.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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:integer;

    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+b)); //длина  эллипса

  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)*(cy-y1))=0 then

      begin

        inc(bb);

        if bb>1 then

          begin

            ll:=round(sqrt((cx-xa[i])*(cx-xa[i])+(cy-ya[i])*(cy-ya[i])));

            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

 

 

 


Информация о работе Технологии и методы программирования