IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача про движение в пространстве
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Есть такое задание:

’’Составить укрупненный алгоритм и программу на языке высокого уровня для решения задачи по своему варианту. Язык программирования TPascal.
В текстовом файле имеются данные для N воздушных целей, определенных станцией слежения в момент времени T0
alpha(i)-направление движения, V гор(i) - гор. скорость, V вер(i) - верт. скорость, phy(i) - азимут, H(i) - высота,L(i) - расстояние до цели (гориз.)
(число целей заранее не известно)
Параметры движения постоянны. Составить программу для расчета траектории движения целей и определения величин, указанных в таблице для своего варианта.
Программа должна визуализировать начальное положение целей и траекторию их движения, а также основные показатели целей, включая расчетные значения по своему варианту’’

Составил я прогу, которая задает цели и их параметры. Другая прога рисует еллипс (типа радар) рисует цели (пользовался полярными координатами)... но стопор состоит в том, что не могу их заставить двигаться =0)

Вот то, что я намонстрячил:
1. Задаю количество целей и их параметры
Код

program zadanie_znacheniy;

 var
   kc, counter: integer;
   alpha, vgor, vver, phy, h, l: word;
   kcfile: text;
   znfile: text;

 begin
   randomize;
   writeln('Vvedite kolichestvo celey'); readln(kc);
   counter:=1;

   assign(kcfile, 'kc.dat');
   assign(znfile, 'zn.dat');

   rewrite(kcfile);
     writeln(kcfile, kc);
   close(kcfile);

   while counter<=kc do
     begin
       alpha:=random(361);
       vgor:=random(101);
       vver:=random(101);
       phy:=random(361);
       h:=random(501);
       l:=random(201);

       if counter=1 then
         begin
           rewrite(znfile);
           close(znfile);
         end;
       append(znfile);
         writeln(znfile,alpha,' ',vgor,' ',vver,' ',phy,' ',h,' ',l);
       close(znfile);

       counter:=counter+1;
     end;

 end.


2. А эта прога должна данные обработать... после строчки {PALEVO случился заворот мозгов :ypr:

Код

program obrabotka;

 uses CRT, Graph;

 var
   alpha, vgor, vver, phy, h, l: array [1..200] of word;
   napr, xg, yg, x, y, y1, y2, dx0, dy0, dx, dy: array [1..200] of integer;
   gd, gm, kc, co, c, t, tt, h0, rx, ry: integer;
   kcfile, znfile: text;
   vv, vg: array [1..200] of real;
   yr, xr: string;

const
   mn=0.4;
   nm=0.1;
 procedure znacheniya;
  begin
   co:=1;
   assign(kcfile, 'kc.dat');
   assign(znfile, 'zn.dat');
   reset(kcfile);
     read(kcfile,kc);
   close(kcfile);
   reset(znfile);

     while co<=kc do
       begin
         read(znfile,alpha[co],vgor[co],vver[co],phy[co],h[co],l[co]);
         vg[co]:=vgor[co]*nm;
         vv[co]:=vver[co]*nm;
         if alpha[co]>0   then if alpha[co]<90  then napr[co]:=1;
         if alpha[co]>90  then if alpha[co]<180 then napr[co]:=2;
         if alpha[co]>180 then if alpha[co]<270 then napr[co]:=3;
         if alpha[co]>270 then if alpha[co]<360 then napr[co]:=4;
         if alpha[co]=90  then napr[co]:=10;
         if alpha[co]=180 then napr[co]:=20;
         if alpha[co]=270 then napr[co]:=30;
         if alpha[co]=360 then napr[co]:=40;
         if alpha[co]=0   then napr[co]:=40;
         co:=co+1;
       end;

   close(znfile);
  end;

 begin
  znacheniya;
  h0:=h[1];
  gd:=detect;
  gm:=2;
  InitGraph(gd, gm, '.');
    setbkcolor(black);
    setcolor(7);
     ry:=getmaxy; rx:=getmaxx;
     ellipse(rx div 2, ry-(ry div 4), 0, 360 ,230 ,230 div 6);
    setcolor(6);
     line(rx div 2, ry-(ry div 3), rx div 2, ry-(ry div 6));
     line(0, ry-(ry div 4), rx, ry-(ry div 4));
     co:=1;
     while co<=kc do
       begin
         c:=9;

        if h[co]>=h[1] then
           begin

             if h[co]<h[1]+300 then
               begin
                 c:=9;
                 c:=c+5;
                 dx[co]:=round(l[co]*sin(phy[co]));
                 dy[co]:=round(l[co]*cos(phy[co]));
                 x[co]:=dx[co];
                 y[co]:=round(dy[co]/6);
                 xg[co]:=(rx div 2)+x[co];
                 y1[co]:=ry-(ry div 4)+y[co];
                 yg[co]:=y1[co]-round(mn*h[co]);
                 setcolor(2);
                 line(xg[co], y1[co], xg[co], yg[co]);

              end;

         end;

             dx0[co]:=round(l[co]*sin(phy[co]));
             dy0[co]:=round(l[co]*cos(phy[co]));
             x[co]:=dx0[co];
             y[co]:=round(dy0[co]/6);
             xg[co]:=(rx div 2)+x[co];
             y1[co]:=ry-(ry div 4)+y[co];
             yg[co]:=y1[co]-round(mn*h[co]);
         if co=1 then
           begin
             c:=11;
             dx0[co]:=round(l[co]*sin(phy[co]));
             dy0[co]:=round(l[co]*cos(phy[co]));
             x[co]:=dx0[co];
             y[co]:=round(dy0[co]/6);
             yg[co]:=y1[co]-round(mn*h[co]);
           end;

         putpixel(xg[co], yg[co], c);
         co:=co+1;
       end;

{PALEVO...
      while t<>120 do

        begin

          while co<=kc do
            begin
             if napr[co]=1 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=2 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=3 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=4 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=10 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=20 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=30 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=40 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
               xg[co]:=(rx div 2)+dx[co];
               y2[co]:=ry-(ry div 4)+round(dy[co]/6);
               yg[co]:=y2[co]-round(mn*h[co]);
              line(xg[co], y2[co], xg[co], yg[co]);
              putpixel(xg[co], yg[co], c);

              co:=co+1
            end;
            co:=1;

          t:=t+1
        end;
}
    repeat until keypressed;
  CloseGraph;
 end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






CHELovek
Есть несколько вопросов:
1. Зачем для задания координат целей пользоваться 2-мя файлами, если можно обойтись одним (может быть были какие-то дополнительные условия, но в том, что приведено не написано что файлов должно быть 2...)

2. Еще более неясно то, зачем для обработки данных помещать каждое из их в отдельный массив array [1..200] of word (то есть, направления хранятся отдельно, скорости отдельно, и т.д.) Не проще ли сделать что-то вроде записи для каждой цели:
Код
Type
 TTarget =
 Record
   alpha, vgor, vver, phy, h, l: Word;
   { Все остальные необходимые данные }
 End;
, организовать массив таких записей:
Код
Var arr: Array[1 .. 200] Of TTarget;
, и потом для обработки одной цели пользоваться данными, хранимыми в одной записи, а не разбросанными по десятку массивов?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


volvo
Отвечаю:
1. В задании также не указано откуда берется файл с данными (может он уже будет заведомо создан). Поэтому мною было принято решение эмулировать задание параметров =0) Да и вообще каждый раз задавать новые значения, в сыром варианте, неудобно... Параметры задаются rnd... И поэтому каждый раз будет рисоваться точка со своими параметрами... Но это вообще не важно =0) Это дело творческое =0))

2. Да, ты прав, эта моя "недоразвитость" в Паскале, действует мне на нервы тоже =0) Я еще только начинаю программировать =0) И то что я написал мне тоже кажется монстром =0) Кстати, спасибо за совет =0)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Но вопрос все еще не закрыт...
Попробую конкретнее:
Вот здеся
Код

                dx[co]:=round(l[co]*sin(phy[co]));
                dy[co]:=round(l[co]*cos(phy[co]));

вычисляются x и y в полярной системе координат...
Далее мне нужноначать двигать точку... равномерно прямолинейно
по закону x=x0+v*t учитывая при этом направление (alpha(i))...
Т.е., как я понимаю, я должен перенести начало отсчета в точку, которая у меня получилась, и от нее плясать дальше...
А вот как ето сделать?....

(а здеся как-нить картинки можно вставлять? я бы изобразил =0))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


FAQ прочитал, сохранил =0)
но ответа не нашел =0)

Сообщение отредактировано: CHELovek -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






CHELovek
Цитата
Поэтому мною было принято решение эмулировать задание параметров
Прекрасно, но почему по сложному пути? Создавай один файл, в котором будет храниться все вместе (например, одна строка - одна цель)...
Цитата
картинки можно вставлять?
Можно. Нажимай на кнопку "Ответить" (то есть надо отвечать не с помощью быстрого ответа), и там увидишь "Присоединить файл". Но я попытаюсь без картинки тебе рассказать.

Зачем тебе пересчитывать значения прямо в полярной системе координат? Гораздо проще было бы сделать одну функцию, которая переводит координаты из полярной в декартовы, а вторую, которая делает наоборот (из декартовой в полярные). А само изменение координат при прямолинейном и равномерном движении (в декартовой системе) я думаю проблем не вызовет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Oki =0)
Еще помонстрячу и пооптимизирую =0)
Если не получиться, буду уже спрашивать еще =0)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 19:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name