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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 16:24   #1
alex_8
Пользователь
 
Регистрация: 18.10.2009
Сообщений: 30
По умолчанию Динамический многоугольник.

Помогите пожалуйста с задачей.

Условие задачи

Характеризуется количеством вершин.
Поддерживает специфические методы:
- Чтение и запись координат вершин;
- Определение площади многоугольника.
Конструкторы:
- С одним аргументом - динамически выделяет память под заданное количество вершин;
- С двумя аргументами - динамически выделяет память под заданное количество вершин и инициализирует координаты всех вершин из заданного одномерного массива, который хранит их в виде x1, y1, x2, y2, ...;
- С двумя аргументами - динамически выделяет память под заданное количество вершин и инициализирует координаты всех вершин значениями, которые соответствуют координатам правильного многоугольника, вписанного в окружность с заданным во втором аргументе радиусом.

Помогите пожалуйста реализовать последний конструктор
С двумя аргументами - динамически выделяет память под заданное количество вершин и инициализирует координаты всех вершин значениями, которые соответствуют координатам правильного многоугольника, вписанного в окружность с заданным во втором аргументе радиусом.

Мои наработки
Код:
#include <conio.h>
#include <math.h>

class Array
{
	int Number;
	float *Data;
	void NewMemory (int);
	void DelMemory ();
public:
	Array ();
	Array (int);
	Array (int, float);
	Array (int, float);
	~Array ();
	void Create (int);
	void Destroy ();
	void SquareArea (int, float);
	bool WritingCoordinates (int, float, float);
	float ReadingCoordinates (int);
};

Array::Array ()
{
	// конструктор по умолчанию обнуляет содержимое переменных-свойств
	Number = 0;
	Data = NULL;
}
Array::Array (int Number)
{
	// конструктор инициализации 1 вызывает метод динамического создания массива
	Create (Number);
}
Array::Array (int Number, float *Data)
{
	// конструктор инициализации 1 вызывает метод динамического создания массива
	// и заполняет массив заданным значениям
	Create (Number);
	for (int i = 0; i < Number*2; i++) this->Data[i] = Data[i];
}
Array::Array (int Number, float Radius)
{
	// конструктор инициализации 2 вызывает метод динамического создания массива
	// и заполняет массив заданным значениям
	Create (Number);
           
}
void Array::NewMemory (int Number)
{
	this->Number = Number;
	Data = new float[Number*2];
}
void Array::DelMemory ()
{
	delete[] Data;
	Number = 0;
	Data = NULL;
}
void Array::Create (int Number)
{
	if (Number) DelMemory ();
	NewMemory (Number);
}
void Array::Destroy ()
{
	if (Number) DelMemory ();
}
Array::~Array ()
{
	Destroy ();
}

void Array::SquareArea (int Number, float Radius)
{
	// Определение площади многоугольника;
	if (Number != 0)
	{
		float Square;
		Square = 0.5*Radius*Radius*Number*sin(360/Number);
	}
}

float Array::ReadingCoordinates (int Pos)
{
	// проверка, лежит ли в корректном диапазоне индекс элемента, который считывается 
	if (Number && Pos >= 0 && Pos < Number*2) return Data[Pos];
	return 0;
}
bool Array::WritingCoordinates (int i, float x, float y)
{
	// проверка существования массива
	if (Number)
	{
	// запись координат вершин;
		Data[i]=x;
		Data[i+1]=y;
		return true;
	}
	return false;
}
ICQ 422605533
alex_8 вне форума Ответить с цитированием
Старый 01.12.2010, 17:55   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну вы тут и накрутили... Я бы вообще сделал так
Код:
const double Pi = 3.1415926; //Дальше не помню, а вообще смотрите в math.h макросы (а лучше, если найдете - константы, я щас не искал) типа M_PI и пр.

class Polygon
{
public:
Polygon(int n);
Polygon(int* xy, int n);
Polygon(int n, int R);
~Polygon();
//...
private:
int* XY;   //Можно сделать также два массива - для X и Y отдельно, либо один для пары координат
int N;
};

Polygon::Polygon(int n):
 N(n)
 {
 XY = new int[2 * N];
 }
Polygon::Polygon(int* xy, int n):
 N(n)
 {
 XY = new int[2 * N];
 for (int i = 0; i < 2 * N; i++)
  XY[i] = xy[i];
 }
Polygon::Polygon(int n, int R):
 N(n)
 {
 XY = new int[2 * N];
 for (int i = 0; i < N; i++)
  {
  XY[2 * i] = R * cos(2 * Pi * i / N);
  XY[2 * i + 1] = R * sin(2 * Pi * i / N);
  }
 }
Polygon::~Polygon()
 {
 if (XY)
  delete[] XY;
 }
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильный многоугольник (polygon) как корень из комплексного числа Sasha_Smirnov Microsoft Office Word 13 22.10.2011 23:59
Динамический многоугольник(ООП). Конструкторы. alex_8 Помощь студентам 0 30.11.2010 21:53
Звёздчатый многоугольник Alex_FF Помощь студентам 0 30.12.2009 01:24
Си - Решение задачи про многоугольник и точку andreas Помощь студентам 1 27.05.2008 19:29