Создадим массив из пяти объектов ракет
CRocket objRocket[5];
Функция управления ракетой
void RocketControl(int rock, double h0,
double p0, double speed);
void main(void)
{
int i;
char variant;
double x,y,z,h,p;
printf(“Задайте вариант действия.\n”);
printf(“1–5 запуск или подрыв ракеты\n”);
printf(“p–итерация цикла полета ракет\n”);
printf(“x – выход\n”);
while(1)
{
// запросить вариант действия
scanf(“%c”,&variant);
switch(variant)
{
Запуск/подрыв ракет
case ‘1’:
RocketControl(1,45.0,45.0,100.0);
break;
case ‘2’:
RocketControl(2,0.0,60.0,100.0);
break;
case ‘3’:
RocketControl(3,90.0,90.0,100.0);
break;
case ‘4’:
RocketControl(4,60.0,30.0,100.0);
break;
case ‘5’:
RocketControl(5,20.0,80.0,100.0);
break;
Провести итерацию полета ракет
case ‘p’:
for(i=0;i<5;i++)
{
if(objRocket[i].GetState());
{
printf(“Летит ракета #%d\n”,i)
objRocket[i].GetPosition(&x,&y,&z,
&h,&p);
printf(“x=%Lg y=%Lg z=%Lg h=%Lg
p=%Lg\n”, x,y,z);
}
}
break;
Выход
case ‘x’:
return;
default:
break;
}
}
}
void RocketControl(int rock, double h0,
double p0, double speed)
{
if(objRocket[rock].GetState())
{
Подрыв ракеты
objRocket[rock]. ExplodeRocket();
printf(“Roket #%d exploded\n”,rock);
}
Else
{
Старт ракеты
objRocket[rock].LaunchRocket(h0,p0,speed);
printf(“Roket #%d started\n”,rock);
}
}
Приложение 1.
Полный текст программы (справочный материал).
Файл описания класса ракеты «Rocket.h».
#include "stdafx.h"
class CRocket
{
public:
// конструктор класса
CRocket(void);
// деструктор класса
~CRocket(void);
//функция возврата текущего состояния
bool GetState(void);
//ф-ия возврата тек. координат ракеты
void GetPosition(double *x, double *y, double *z, double *h, double *p);
//ф-ия старта ракеты
void LaunchRocket(double h0,double p0,double speed);
//ф-ия подрыва ракеты
void ExplodeRocket(void);
private:
// состояние ракеты
bool m_state;
// начальное угловое положение ракеты
double m_H0,m_P0;
// текущие координаты в пространстве
double m_X,m_Y,m_Z;
// скорость ракеты
double m_speed;
// функция вычисления тек. координат
void CRocket::ComputeRockCoords(void);
};
Файл реализации класса ракеты «Rocket.cpp».
#include "stdafx.h"
#include "Rocket.h"
#include <math.h>
// конструктор класса
CRocket::CRocket()
{
// состояние ракеты
m_state=false;
}
// деструктор класса
CRocket::~CRocket(void){};
//функция возврата текущего состояния
bool CRocket::GetState(void)
{
return m_state;
}
//ф-ия возврата тек. координат ракеты
void CRocket::GetPosition(double *x,double *y,double *z,double *h,double *p)
{
// вычислить координаты ракеты
ComputeRockCoords();
*x=m_X;
*y=m_Y;
*z=m_Z;
*h=m_H0*180.0/3.1416;
*p=m_P0*180.0/3.1416;
}
//ф-ия старта ракеты
void CRocket::LaunchRocket(double h0,double p0,double speed)
{
// текущее время полета ракеты
double m_t=0.0;
// стартовые параметры ракеты
m_X=0.0;
m_Y=0.0;
m_Z=0.0;
m_H0=h0*3.1416/180.0;
m_P0=p0*3.1416/180.0;
m_speed=speed;
// ракета полетела
m_state=true;
printf("Roket've started.\n");
}
//ф-ия подрыва ракеты
void CRocket::ExplodeRocket(void)
{
// ракета взорвана
m_state=false;
printf("Roket exploded\n");
}
// функция вычисления тек. координат
void CRocket::ComputeRockCoords(void)
{
if(m_state) // если ракета летит
{
// дискретное время полета
double dt=0.1;
// новые координаты за время dt
m_X+=m_speed*cos(m_P0)*sin(m_H0)*dt;
m_Y+=m_speed*cos(m_P0)*cos(m_H0)*dt;
m_Z+=m_speed*sin(m_P0)*dt;
}
}
Файл основной программы.
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include "Rocket.h"
// создадим массив из пяти объектов ракет
CRocket objRocket[5];
// функция управления ракетой
void RocketControl(int rock, double h0, double p0, double speed);
void main(void)
{
int i;
char variant;
double x,y,z,h,p;
printf("Vvedite deystvie\n");
printf("1-5 start or rocket explode\n");
printf("p - iteration\n");
printf("x - exit\n");
while(1)
{
// запросить вариант действия
variant=0;
scanf("%c",&variant);
switch(variant)
{
// запуск/подрыв ракет
case '1':
RocketControl(1,45.0,45.0,100.0);
break;
case '2':
RocketControl(2,0.0,60.0,100.0);
break;
case '3':
RocketControl(3,90.0,90.0,100.0);
break;
case '4':
RocketControl(4,60.0,30.0,100.0);
break;
case '5':
RocketControl(5,20.0,80.0,100.0);
break;
// провести итерацию полета ракет
case 'p':
for(i=0;i<5;i++)
{
if(objRocket[i].GetState())
{
printf("Rocket flying #%d\n",i);
objRocket[i].GetPosition(&x,&y,&z,&h,&p);
printf("x=%Lg y=%Lg z=%Lg h=%Lg p=%Lg\n",x,y,z,h,p);
}
}
break;
// выход
case 'x':
return;
default:
break;
}
}
}
void RocketControl(int rock, double h0,double p0, double speed)
{
if(objRocket[rock].GetState())
{
// подрыв ракеты
objRocket[rock]. ExplodeRocket();
printf("Roket #%d exploded\n",rock);
}
else
{
// старт ракеты
objRocket[rock].LaunchRocket(h0,p0,speed);
printf("Roket #%d started\n",rock);
}
}