Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовик по ООП / Kurs3 / SISTEMA
.CPP#include<iostream.h>
#include<math.h>
#include<values.h>
#include<conio.h>
#include "Sistema.h" //Podkluchenie golovi klassa
#include "Krug.h"
#include "Kvadrat.h"
#include "Treug.h"
unsigned int Sistema::NextSys=1000;
//konstruktor
Sistema::Sistema(int _X,int _Y,int _R):Adr(NextSys)
{centr = new Ellips(_X,_Y,_R,_R,0);
NextSys++;
}
//Selectori
Adress Sistema::getAdr() const //Vernut nomer
{return Adr;}
Message Sistema::Send(Adress _Pol,double _Msg) const
{Message Msg;
Msg.setOtp(getAdr());
Msg.setPol(_Pol);
Msg.setMsg(_Msg);
return Msg;}
void Sistema::PrintSys(double t) const
{clrscr();
cout<<"---Sistema Planet-----"<<endl;
cout<<"Adres: "<<getAdr().getAdress()<<endl;
cout<<"---Centr sistemi: ----"<<endl;
cout<<"X: "<<centr->getX()<<endl;
cout<<"Y: "<<centr->getY()<<endl;
cout<<"R: "<<centr->getLmax()<<endl;
getch();
clrscr();
PlList::PrintSys(t);
}
void Sistema::Stolknov(double t) const
{for (int i=1;i<=PlList::getNel();i++)
{
for (int j=1;j<=PlList::getNel();j++)
{
double raznX,raznY;
raznX=sqrt((getXpt(i,t)-getXpt(j,t))*(getXpt(i,t)-getXpt(j,t)));
raznY=sqrt((getYpt(i,t)-getYpt(j,t))*(getYpt(i,t)-getYpt(j,t)));
if (i!=j)
{if (raznX<(getA(i)+getA(j)))
{if (raznY<(getA(i)+getA(j)))
{cout<<"Stolknkvenie planet nomer: "<<i<<" "<<j<<endl;};
}
}
}
}
}
double Sistema::ParadPl() const
{if (PlList::getNel()==0) {cout<<"Planeti v sisteme otsutstvuyut!"<<endl;}
else {
if (PlList::getNel()==1) {cout<<"Dla odnoy planeti ne nayti"<<endl;}
else {
double t=-0.1,eps;
int j,out1=0,out2;
do{
t=t+0.1;
out2=0;
j=2;
do{
if (getXpt(1,t)==0)
{if (getYpt(1,t)-getYpt(j,t)<0.01)
{eps=0;}
}else {
if (getXpt(j,t)==0)
{if (getYpt(1,t)-getYpt(j,t)<0.01)
{eps=0;}
}else {
eps=((getYpt(1,t))/(getXpt(1,t)))-((getYpt(j,t))/(getXpt(j,t)));
}}
if (eps>=0.01) {out2=1;};
j=j+1;
}while ((j<PlList::getNel())&(out2==0));
if (out2==0)
{out1++;}
}
while ((t!=100)&(out1==0));
Stolknov(t);
if(out1==0) {cout<<"! V blijayshee vrema parada planet"<<endl
<<" ne predviditsa"<<endl;return 1000;}
else {return t;}
} }
}
int Sistema::getXc() const //Koordinati centra
{return centr->getX();}
int Sistema::getYc() const
{return centr->getY();}
//Modifikatori
void Sistema::NewPlanet(int _Lmax,int _Lmin,double Fi,double Fi0,int _V,int form,double _Angle)
{Planeta* pl;
cout<<"*"<<endl;getch();
if (form==1) {double _R;
cout<<"Vvedite radius planeti"<<endl;
cin>>_R;
pl=new Krug(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_R,_Angle);
cout<<"**"<<endl;getch();
} else {
if (form==2) {double _A;
cout<<"Vvedite storonu planeti"<<endl;
cin>>_A;
pl=new Kvadrat(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_A,_Angle);
cout<<"**"<<endl;getch();
} else {
if (form==3) {double _A;
cout<<"Vvedite storonu planeti"<<endl;
cin>>_A;
pl=new Treug(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_A,_Angle);
cout<<"**"<<endl;getch();
} else {cout<<"Neverniy vibor"<<endl;}}}
insLast(pl);
cout<<"***"<<endl;getch();
if ((_Lmax-getA(PlList::getNel()))<(centr->getLmax()))
{cout<<"Vasha planeta vrazals' v solnce"<<endl;
DelPlanet(PlList::getNel());getch();}
else {
if ((_Lmin-getA(PlList::getNel()))<(centr->getLmax()))
{cout<<"Vasha planeta vrazals' v solnce"<<endl;
DelPlanet(PlList::getNel());getch();};
}
}
void Sistema::Move(double dX,double dY)
{centr->Move(dX,dY);
for (int i=1;i<=PlList::getNel();i++)
{MoveO(i,dX,dY);}
}
void Sistema::Receive(Message _Msg)
{if (_Msg.getPol().getAdress()==getAdr().getAdress())
{Message msg;
for (int i=1;i<=getNel();i++)
{if (PlList::getAdr(i).getAdress()!=_Msg.getOtp().getAdress())
{msg.setOtp(_Msg.getOtp());
msg.setPol(PlList::getAdr(i));
msg.setMsg(_Msg.getMsg());
PlList::ReceiveReg(msg);
}
}
}
else {
int dost=PlList::ReceiveReg(_Msg);
PlList::ReceiveReg(Send(_Msg.getOtp(),dost));
}
}
Соседние файлы в папке Kurs3