![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
CHELovek |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Есть такое задание:
’’Составить укрупненный алгоритм и программу на языке высокого уровня для решения задачи по своему варианту. Язык программирования 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. |
![]() ![]() |
volvo |
![]()
Сообщение
#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; , и потом для обработки одной цели пользоваться данными, хранимыми в одной записи, а не разбросанными по десятку массивов? |
CHELovek |
![]()
Сообщение
#3
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Отвечаю: 1. В задании также не указано откуда берется файл с данными (может он уже будет заведомо создан). Поэтому мною было принято решение эмулировать задание параметров =0) Да и вообще каждый раз задавать новые значения, в сыром варианте, неудобно... Параметры задаются rnd... И поэтому каждый раз будет рисоваться точка со своими параметрами... Но это вообще не важно =0) Это дело творческое =0)) 2. Да, ты прав, эта моя "недоразвитость" в Паскале, действует мне на нервы тоже =0) Я еще только начинаю программировать =0) И то что я написал мне тоже кажется монстром =0) Кстати, спасибо за совет =0) |
CHELovek |
![]()
Сообщение
#4
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Но вопрос все еще не закрыт...
Попробую конкретнее: Вот здеся Код 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)) |
CHELovek |
![]()
Сообщение
#5
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
FAQ прочитал, сохранил =0)
но ответа не нашел =0) Сообщение отредактировано: CHELovek - 12.01.2005 3:20 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
CHELovek
Цитата Поэтому мною было принято решение эмулировать задание параметров Прекрасно, но почему по сложному пути? Создавай один файл, в котором будет храниться все вместе (например, одна строка - одна цель)...Цитата картинки можно вставлять? Можно. Нажимай на кнопку "Ответить" (то есть надо отвечать не с помощью быстрого ответа), и там увидишь "Присоединить файл". Но я попытаюсь без картинки тебе рассказать.Зачем тебе пересчитывать значения прямо в полярной системе координат? Гораздо проще было бы сделать одну функцию, которая переводит координаты из полярной в декартовы, а вторую, которая делает наоборот (из декартовой в полярные). А само изменение координат при прямолинейном и равномерном движении (в декартовой системе) я думаю проблем не вызовет... |
CHELovek |
![]()
Сообщение
#7
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Oki =0)
Еще помонстрячу и пооптимизирую =0) Если не получиться, буду уже спрашивать еще =0) |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 0:59 |