|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.05.2009, 19:13 | #1 |
Регистрация: 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; |
25.05.2009, 19:13 | #2 |
Регистрация: 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. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объекты в процедурах | 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 |