Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 15:57   #1
Myha_fly
Новичок
Джуниор
 
Регистрация: 25.12.2011
Сообщений: 2
По умолчанию Классы (С++) Не могу определить где ошибка

Не могу определить где ошибка!
Условие задачи:
Создать класс для работы с кругом, квадратом, прямоугольником.
И приведены несколько действий.
Программа отлично работает если работать с кругом.
Но как только начинаю работу с прямоугольником, то выдается неверное число для 1ой вершины:
Например: Если задам координаты 1,1 и 5, 5 то он выдает
1я 1, 3 // что и является ошибкой
2я 5, 5
3я 5, 1
4я 1, 5
Код:
# include <iostream>
# include <math.h>
#include <cstdlib>
using namespace std;
double pod(double x,double y,double x1, double y1)
{
	return sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
}
double pod2(double v,double c,double k)
{
	return k*c+v*(1-k);
} 
class Figyrbi
{	public:
	double x[4];
	double y[4];
	double rad;
	double perX, perY;
	int m;
	void Povorot();
	void show_Kr();
	void set_Kv();
	void show_Kv();
	void set_Kr();
	void perem_Kr();
	void perem_Kv();
	void izraz_Kr();
	bool Proverka();
	void izraz_Kv();
};
void Figyrbi::show_Kr()
{
	cout<<"LLentr ("<<x[0]<<","<<y[0]<<") Radius="<<rad<<endl;
}
void Figyrbi::show_Kv()
{
	int i=0;
	cout<<"1a9 Vershina ("<<x[i]<<","<<y[i]<<")"<<endl; i++; cout<<"2a9 vershina ("<<x[i]<<","<<y[i]<<")"<<endl; i++;
	cout<<"3a9 Vershina ("<<x[i]<<","<<y[i]<<")"<<endl; i++; cout<<"4a9 vershina ("<<x[i]<<","<<y[i]<<")"<<endl;
		
}
void Figyrbi::set_Kv()
{
	int i=0;
	cout<<"VVedite pervy}0 vershiny"<<endl;
	cout<<"x="; cin>>x[i];
	cout<<"y="; cin>>y[i]; i++;
	cout<<"VVedite vtory}0 vershiny"<<endl;
	cout<<"x="; cin>>x[i];
	cout<<"y="; cin>>y[i]; i++;	
	y[i]=y[i-2]; x[i]=x[i-1]; i++;
	y[i]=y[i-2]; x[i]=x[i-3]; i++;
	y[i]=(y[i-3]+y[i-4])/2;           //Если смотреть через Дебаг, то именно после выполнения этой строчки значения Y[0] меняется 
	x[i]=(x[i-3]+x[i-4])/2;
}
void Figyrbi::set_Kr()
	{
		rad=0;
		cout<<"Vvedit LLentr"<<endl;
		cout<<"x="; cin>>x[0];
		cout<<"y="; cin>>y[0];
		cout<<"Vvedite radius"<<endl;
		cout<<"r="; cin>>rad;
		while(rad<=0)
		{ cout<<"!!Radius vveden ne verno!!\nVvedite radius\nr="; cin>>rad;}
		
	}
	void Figyrbi::perem_Kr()
	{
		cout<<"Peremechenie po X="; cin>>perX;
		cout<<"Peremechenie po Y="; cin>>perY; cout<<endl;
		x[0]=x[0]+perX;
		y[0]=y[0]+perY;
		show_Kr();
	}
	void Figyrbi::perem_Kv()
	{
		cout<<"Peremechenie po X="; cin>>perX;
		cout<<"Peremechenie po Y="; cin>>perY; cout<<endl;
		for(int i=0;i<5;i++)
		{ x[i]=x[i]+perX; y[i]=y[i]+perY; }
		show_Kv();
	}
	void Figyrbi::izraz_Kr()
	{
		cout<<"Izmenenie razmera na N (1) ili v N raz (2)?"<<endl;
		cin>>m; system("cls"); cout<<"N="; cin>>perX; system("cls");
		if(m==1)
			rad=rad+perX;
		else
			rad=rad*perX;
		show_Kr();
	}
	void Figyrbi::izraz_Kv()
	{
		cout<<"Izmenenie razmera v N raz, N=";
		cin>>perX; system("cls");
		for(int i=0;i<4;i++)
		{
			x[i]=pod2(x[4],x[i],perX);
			y[i]=pod2(y[4],y[i],perX);
		}
		show_Kv();
	}
	bool Figyrbi::Proverka()
	{
		if(pod(x[0],y[0],x[3],y[3])==pod(x[0],y[0],x[2],y[2]))
			return true;
		else
			return false;
	}
	void Figyrbi::Povorot()
	{
		cout<<"Povorot na Ygol N, N=";
		cin>>perX; system("cls");
		for(int i=0;i<4;i++)
		{
			x[i]=x[i]-x[4]; y[i]=y[i]-y[4];
		}
		for(i=0;i<4;i++)
		{
			x[i]=x[i]*cos(perX)-y[i]*sin(perX); y[i]=x[i]*sin(perX)+y[i]*cos(perX);
		}
		for(i=0;i<4;i++)
		{
			x[i]=x[i]+x[4]; y[i]=y[i]+y[4];
		}
		show_Kv();
	}

Последний раз редактировалось Myha_fly; 25.12.2011 в 16:17.
Myha_fly вне форума Ответить с цитированием
Старый 25.12.2011, 15:58   #2
Myha_fly
Новичок
Джуниор
 
Регистрация: 25.12.2011
Сообщений: 2
По умолчанию

Код:
void main()
{
	bool t=false,q=false;
	setlocale(0,"");
	int Retry=1;int Operation;
	Figyrbi ob;
	while(Retry==1)
    {	cout<<"Vbiberete figyry \n"; 
		cout<<"\n1.Kryg \n2.Kvadrat \n3.Pr9moygol'nik \n";
		cin>>Operation;system("cls");
		switch(Operation)
        {
			
            case 1:
				ob.set_Kr();  system("cls"); ob.show_Kr(); 
				while(Retry==1)
				{	cout<<"Vbiberite nomer operaLLii"<<endl;
					cout<<"\n1.Peremechenie \n2.Izmenenie razmera \n3.Vrachenie \n4.Exit \n\n"; cin>>Operation; system("cls");
					switch(Operation)
					{
					case 1: ob.perem_Kr(); break;
					case 2: ob.izraz_Kr(); break;
					case 3: cout<<"OperaLLi9 bessmbislena"<<endl; break;
					case 4: t=true; Retry=2; break;
					default: cout<<"Neverno vvedeno chislo";	break;
					}
					if(t==false)
					{cout<<"Vbibrat' drygoe deu'stvie? \n1.Da \n2.Net \n\n"; cin>>Retry;} system("cls");
					while(Retry>2)
					{
						system("cls"); cout<<"Neverno vvedeno chislo";
						cout<<"Vbibrat' drygy}0 operaLLi}0? \n1.Da \n2.Net \n\n";
						cin>>Retry;	cout<<endl;
					} t=false;
				} cout<<"Rezyl'tat:\n";
				ob.show_Kr(); cout<<endl; Retry=1; break;
			case 2:
				ob.set_Kv();system("cls");
				if(ob.Proverka()==false) { q=true;
				cout<<"Vvedenbie koordinatbi ne sootvetstvy}0t kvadraty, operaLLii prodolgats9 kak dl9 pramoygol'nika"<<endl;
				Operation=3;}
			case 3: 
				if(q!=true)
				{ob.set_Kv(); system("cls");} ob.show_Kv(); q=false; cout<<endl<<endl;
				while(Retry==1)
				{	
					cout<<"Vbiberite nomer operaLLii"<<endl;
					cout<<"\n1.Peremechenie \n2.Izmenenie razmera \n3.Vrachenie \n4.Exit \n"; cin>>Operation; system("cls");
					switch(Operation)
					{
					case 1: ob.perem_Kv(); break;
					case 2: ob.izraz_Kv(); break;
					case 3: ob.Povorot(); break;
					case 4: t=true; Retry=2; break;
					default: system("cls");	cout<<"Neverno vvedeno chislo";	break;
					}
					if(t==false)
					{cout<<"Vbibrat' drygoe deu'stvie? \n1.Da \n2.Net \n\n"; cin>>Retry;} system("cls");
					while(Retry>2)
					{
						system("cls"); cout<<"Neverno vvedeno chislo";
						cout<<"Vbibrat' drygy}0 operaLLi}0? \n1.Da \n2.Net \n\n";
						cin>>Retry;	system("cls");
					}t=false;
				}cout<<"Rezyl'tat:\n";
				ob.show_Kv(); cout<<endl; Retry=1; break;
			default:
				system("cls");
				cout<<"Neverno vvedeno chislo";
				break;
		}
		cout<<"Vbibrat' drygy}0 figyry? \n1.Da \n2.Net \n\n";
		cin>>Retry;	cout<<endl; system("cls");
		while(Retry>2)
		{
			system("cls"); cout<<"Neverno vvedeno chislo";
			cout<<"Vbibrat' drygy}0 figyry? \n1.Da \n2.Net \n\n";
			cin>>Retry;	cout<<endl;
		}
	}
}

Последний раз редактировалось Myha_fly; 25.12.2011 в 16:06.
Myha_fly вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять где ошибка. Демик Общие вопросы C/C++ 4 27.05.2011 13:31
не могу понять где ошибка Neon-z PHP 13 22.01.2011 16:15
Не могу понять где ошибка Азиза Общие вопросы C/C++ 1 11.01.2011 14:03
Не могу понять, где ошибка( IROKEZ Общие вопросы C/C++ 4 16.12.2010 21:00
Не могу понять где ошибка в коде SeRhy Общие вопросы C/C++ 5 20.09.2009 13:10