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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2011, 21:17   #1
AndrewSkull
 
Регистрация: 05.06.2011
Сообщений: 8
По умолчанию Задача на расчёт движения. Заяц бежит вдоль заданной прямой. Собака — за зайцем. Найти траекторию собаки.

помогите с задачей плиз(((

В точке P находится собака, в точке Q - заяц. Расстояние PQ 100 м. Заяц бежит вдоль прямой l , образующей с PQ 45 гр., со скоростью 5 м/с. собака бежит все время по направлению к зайцу со скоростью 10 м/с, принимая решение о направлении погони раз в секунду. Найти траекторию движения собаки.
AndrewSkull вне форума Ответить с цитированием
Старый 06.06.2011, 07:58   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

С графикой
Код:
program zaec;
uses graph,crt;
const size=100;
      delta=5;
var grDriver: Integer;
    grMode: Integer;
    ErrCode: Integer;
    q,p : array [0..size] of record
                               x,y : integer;
                               xm,ym : real;
                            end;
    q_speed, p_speed,distance,i,n:integer;
    cosa,c,a:real;
begin
     grDriver := Detect;
     InitGraph(grDriver, grMode,'');
     ErrCode := GraphResult;
     if ErrCode = grOk then
     begin
          q_speed:=5;
          p_speed:=10;
          distance:=100;
          i:=0;
          q[i].x:=(getmaxx div 2) - ((distance * delta) div 2);
          q[i].y:=430;
          q[i].xm:=0;
          q[i].ym:=0;

          p[i].x:=(getmaxx div 2) + ((distance * delta) div 2);
          p[i].y:=430;
          p[i].xm:=distance;
          p[i].ym:=0;

          while (i<=size) and (q[i].xm<=p[i].xm) do
          begin
               inc(i);

               q[i].xm:=i * q_speed * cos(45);
               q[i].ym:=q[i].xm;
               q[i].x:=q[0].x + round(q[i].xm) * delta;
               q[i].y:=q[0].y - round(q[i].ym) * delta;

               a:=distance - q[i].xm;
               c:=sqrt(sqr(a) + sqr(q[i].xm));
               cosa := a/c;
               p[i].xm:=i * p_speed * cosa;
               p[i].ym:=sqrt(sqr(i * p_speed) - sqr(p[i].xm));
               p[i].x:=p[0].x - round(p[i].xm) * delta;
               p[i].xm:=distance - p[i].xm;
               p[i].y:=p[0].y - round(p[i].ym) * delta;
          end;
          n:=i;
          for i:=0 to n-1 do
          begin
               circle(q[i].x,q[i].y,1);
               circle(p[i].x,p[i].y,2);
               {delay(1000);
               cleardevice;} {тут таймер не получилось воткнуть :(}
               readln;
               moveto(q[i].x,q[i].y);
               lineto(q[i+1].x,q[i+1].y);
               moveto(p[i].x,p[i].y);
               lineto(p[i+1].x,p[i+1].y);
          end;
          circle(q[n].x,q[n].y,1);
          circle(p[n].x,p[n].y,2);
          readln;
          CloseGraph;
          clrscr;
          writeln('Dog trajectory:');
          for i:=0 to n do
          writeln(i,') x=',p[i].xm:0:1,'; y=',p[i].ym:0:1);
          readln;
     end
     else
         Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Если не разберешься в коде с графикой, то вот без нее
Код:
program ZAEC2;
uses crt;
const size=100;
var q,p : array [0..size] of record
                               xm,ym : real;
                            end;
    q_speed, p_speed,distance,i,n:integer;
    cosa,c,a:real;
begin
     q_speed:=5;
     p_speed:=10;
     distance:=100;
     i:=0;
     q[i].xm:=0;
     q[i].ym:=0;

     p[i].xm:=distance;
     p[i].ym:=0;

     while (i<=size) and (q[i].xm<=p[i].xm) do
     begin
          inc(i);

          q[i].xm:=i * q_speed * cos(45);
          q[i].ym:=q[i].xm;

          a:=distance - q[i].xm;
          c:=sqrt(sqr(a) + sqr(q[i].xm));
          cosa := a/c;
          p[i].xm:=i * p_speed * cosa;
          p[i].ym:=sqrt(sqr(i * p_speed) - sqr(p[i].xm));
          p[i].xm:=distance - p[i].xm;
     end;
     n:=i;
     clrscr;
     writeln('Dog trajectory:');
     for i:=0 to n do writeln(i,') x=',p[i].xm:0:1,'; y=',p[i].ym:0:1);
     readln;
end.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 06.06.2011, 20:05   #3
AndrewSkull
 
Регистрация: 05.06.2011
Сообщений: 8
По умолчанию

спасибо огромное)))
AndrewSkull вне форума Ответить с цитированием
Старый 06.06.2011, 20:13   #4
AndrewSkull
 
Регистрация: 05.06.2011
Сообщений: 8
По умолчанию

а можно ее же, но с использованием нетипизированных указателей?
AndrewSkull вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача:Найти наименьшее и наибольшее значение заданной функции с помощью массива.(Pascal) abiturient Помощь студентам 12 08.10.2009 20:35
моделирование движения шаров с массой и диаметромт по прямой в двумерном пространстве belomorinka Помощь студентам 8 01.06.2009 11:17
Задача - расчёт нагрузки по преподавателям с контролем Рада Фриланс 1 13.02.2009 02:16
найти сумму длин всех окрашенных частей прямой. vikka Помощь студентам 24 26.12.2008 23:48