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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 19:13   #1
smb.
 
Регистрация: 25.03.2009
Сообщений: 6
По умолчанию Объекты, массивы.

Паскаль.
в общем, процесс работы радиолокационной станции. расчет координат цели, времени до нее, ну и в таком духе.
большая часть вроде получилась, проблема вот в чем.
существует объект TTarget
TTarget = object
Loc: TLoc;
Detected: boolean;
TargetType: byte;
constructor create;
end;
тип TLoc
type
TLoc = record
x,y,v,n,a,r:real;
сама радиолокационная станция:
TRLS = object
CoordX: real;
CoordY: real;
Radius: real;
Targets:array[1..100] of TTarget;
constructor create(NumTargets:integer);
procedure rabota(t:real;NumTargets:integer; var massiv:array of TTarget;var NumDetected:integer);
end;

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

моя программа:
program test;
type
TLoc = record
x,y,v,n,a,r:real;
end;
TTarget = object
Loc: TLoc;
Detected: boolean;
TargetType: byte;
constructor create;
end;
TAircraft = object(TTarget)
procedure AMove(t:real);
constructor create;
end;
TMissile = object(TTarget)
procedure MMove(t:real);
constructor create;
end;
TRLS = object
CoordX: real;
CoordY: real;
Radius: real;
Targets:array[1..100] of TTarget;
constructor create(NumTargets:integer);
procedure rabota(t:real;NumTargets:integer; var massiv:array of TTarget;var NumDetected:integer);
end;
var f:text; NumTargets,NumDetected,i,j:integer; t,dt,tk:real; RLS: TRLS; massiv:array[1..100]of TTarget;

constructor TTarget.create;
begin
Detected:= False;
end;
constructor TRLS.create(NumTargets:integer);
var i,k:integer; TempMiss: TMissile; TempAir: TAircraft;
begin
CoordX:=320;
CoordY:=480;
Radius:=1000;
for i:=1 to NumTargets do
begin
randomize;
k:=random(2);
case k of
0:
begin
TempMiss.create; Targets[i].Loc:=Tempmiss.Loc;
Targets[i].TargetType:=0;
end;
1:
begin
TempAir.create; Targets[i].Loc:=TempAir.Loc;
Targets[i].TargetType:=1;
end;
end;
end;
end;

constructor TAircraft.create;
begin
randomize;
Loc.n:=0;
Loc.x:=random(640);
Loc.y:=random(380);
Loc.y:=Loc.y+100;
Loc.v:=random(30);
if Loc.x<>0 then
Loc.a:=arctan((480-Loc.y)/(Loc.x-320))
else Loc.a:=pi/2;
if Loc.a<0 then Loc.a:=Loc.a+pi;
if Loc.a>pi then Loc.a:=Loc.a-pi;
end;

constructor TMissile.create;
begin
randomize;
Loc.x:=random(640);
Loc.y:=random(480);
Loc.v:=random(30);
Loc.n:=random(3);
if Loc.x<>0 then
Loc.a:=arctan((480-Loc.y)/(Loc.x-320))
else Loc.a:=pi/2;
if Loc.a<0 then Loc.a:=Loc.a+pi;
if Loc.a>pi then Loc.a:=Loc.a-pi;
end;

procedure TAircraft.AMove(t:real);
begin
Loc.x:=Loc.x+Loc.v*cos(Loc.a)*t;
Loc.y:=Loc.y+Loc.v*sin(Loc.a)*t;
Loc.r:=sqrt(sqr(Loc.x)+sqr(Loc.y));
end;
smb. вне форума Ответить с цитированием
Старый 25.05.2009, 19:13   #2
smb.
 
Регистрация: 25.03.2009
Сообщений: 6
По умолчанию

procedure TMissile.MMove(t:real);
begin
Loc.v:=Loc.v+Loc.n*t;
Loc.x:=Loc.x+Loc.v*cos(Loc.a)*t;
Loc.y:=Loc.y+Loc.v*sin(Loc.a)*t;
Loc.r:=sqrt(sqr(abs(Loc.x-320))+sqr(abs(Loc.y-480)));
end;

procedure TRLS.rabota(t:real;NumTargets:integ er; var massiv: array of TTarget;var NumDetected:integer);
var i,m:integer; Aircraft: TAircraft; Missile: TMissile; daln:real;
begin
NumDetected:=0;
m:=0;
for i:=1 to NumTargets do
begin
if Targets[i].Loc.r<=Radius then
begin
m:=m+1;
Targets[i].Detected:=True;
NumDetected:=NumDetected+1;
massiv[m].Loc:=Targets[i].Loc;
end else
begin
Targets[i].Detected:=False;
end;
if Targets[i].TargetType=1
then
begin
Aircraft.Loc:=Targets[i].Loc;
Aircraft.AMove(t);
Targets[i].Loc:=Aircraft.Loc;
end
else
begin
Missile.Loc:=Targets[i].Loc;
Missile.MMove(t);
Targets[i].Loc:=Missile.Loc;
end;

end;
end;
begin
assign(f,'1.txt');
rewrite(f);
readln(NumTargets,t,dt);
RLS.create(NumTargets);
for i:=1 to round(t/dt) do
begin

tk:=tk+dt;
RLS.rabota(tk,NumTargets,massiv,Num Detected);
write(f,i);
write(f,' ');
for j:=2 to NumDetected+1 do
begin
write(f, massiv[j].Loc.x:5:2);
write(f,' ');
write(f, massiv[j].Loc.y:5:2);
write(f,' ');
writeln(f, massiv[j].Loc.r:5:2);
write(f,' ');
end;
end;
close(f);
end.
smb. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объекты в процедурах Altera Общие вопросы Delphi 10 07.03.2009 17:21
объекты в си Барби Помощь студентам 1 13.05.2008 01:10
3D объекты в Си g0liath Помощь студентам 2 20.04.2008 21:39
com-объекты b-code Общие вопросы Delphi 0 15.03.2007 11:17