Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа Окружность и квадрат

.cpp
Скачиваний:
39
Добавлен:
01.05.2014
Размер:
2.08 Кб
Скачать
#include "iostream.h"
#include "math.h"

class Error
{
public:
	int i;
	Error(int k){i=k;}
};

class Figure
{
protected:
	int x,y;
public:
	virtual void InputData(int,int,double)=0;
	virtual void ShowData()=0;
};

class Circle;

class Square: virtual public Figure
{
protected:
	double a;
public:
	Square(){a=1;}
	void InputData(int x_,int y_,double razm)
	{x=x_;y=y_;a=razm;}
	void ShowData()
	{cout<<"Kvadrat: x="<<x<<"; y="<<y<<"; a="<<a<<endl;};
	friend void Vpis(Circle, Square);

};

class Circle: virtual public Figure
{
protected:
	double r;
public:
	Circle(){r=1;}
	void InputData(int x_,int y_,double razm)
	{x=x_;y=y_;r=razm;}
	void ShowData(){cout<<"Okrujnost`: x="<<x<<"; y="<<y<<"; r="<<r<<endl;};
	friend void Vpis(Circle, Square);
};

class InCircle: virtual public Circle, virtual public Square
{
public:
	void InputData(int x_,int y_,double razm)
	{Circle::x=Square::x=x_;
	 Circle::y=Square::y=y_;
	 Circle::r=razm;Square::a=razm*2;};
	void ShowData()
	{cout<<"Vpisanaya okrujnost`: x="<<x<<"; y="<<y<<"; r="<<r<<"; a="<<a<<endl;};
};

class InSquare: virtual public Circle, virtual public Square
{
public:
	void InputData(int x_,int y_,double razm)
	{Circle::x=Square::x=x_;
	 Circle::y=Square::y=y_;
	 Circle::r=sqrt(2)*razm/2;Square::a=razm;};
	void ShowData()
	{cout<<"Vpisaniy kvadrat: x="<<x<<"; y="<<y<<"; r="<<r<<"; a="<<a<<endl;};
};

void Vpis(Circle C, Square S)
{
	if((C.x==S.x)&&(C.y==S.y)&&(C.r==S.a/2)) 
		cout<<"Okrujnost` mojet bit` vpisana";
	else
		if ((C.x==S.x)&&(C.y==S.y)&&(C.r==1.41*S.a/2))
			cout<<"Kvadrat mojet bit` vpisan";
		else throw Error(1);

}

void main()
{
	Circle c1;
	Square s1;
	InSquare is1;
	InCircle ic1;
	try
	{
		c1.InputData(1,1,1.41);
		s1.InputData(1,1,2);
		is1.InputData(1,1,2);
		ic1.InputData(1,1,5);
		c1.ShowData();
		s1.ShowData();
		ic1.ShowData();
		is1.ShowData();
		try
		{
			Vpis(c1,s1);			
		}
		catch(Error a){cout<<"Ne mogut bit' vpisani drug v druga!\n";}
	}
	catch(...){cout<<"Another Error";}
}