создадим массив из пяти объектов ракет

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);

}

}