Консультация № 143353
08.09.2008, 15:05
0.00 руб.
09.09.2008, 07:19
0 1 1
И снова я рад приветствовать уважаемых экспертов!
Обращуюсь к вам за помощью в решении задачки на С++.NET:
Заданы координаты точек (xA,yA), (xB,yB) и (xC,yC) лежащих на трех разных окружностях (их коды - A,B и C) с центрами в начале координат. Вывести коды этих окружностей и их длины в порядке убывания.

Заранее огромное спасибо!!!

Обсуждение

Неизвестный
09.09.2008, 09:42
общий
это ответ
Здравствуйте, Смирнов Сергей Витальевич!
Все достаточно просто. Для начала вычисляем радиусы окружностей (r^2 = x^2 + y^2), и их длины (2*PI*r). Сортируем массив окружностей по убыванию и выводим на экран. Код примерно такой:
Код:
 #include <math.h>
#include <algorithm>
#include <functional>
#include <vector>
#include <iostream>

using namespace std;

const double PI = 3.1415926535897932384626433832795;

struct circle {

double radius;
char code;

circle()
: radius(0.0)
, code(' ') {
}

circle(double x, double y, char c) {

radius = sqrt(x*x + y*y);
code = c;
}

bool operator < (const circle& c) const {

return radius < c.radius;
}

bool operator > (const circle& c) const {

return !(*this < c);
}

double length() const {

return radius * PI * 2;
}
};

int main(int argc, char* argv[]) {

vector<circle> v(3);

v[0] = circle(5.6, 2.3, 'A');
v[1] = circle(-10.1, 4.7, 'B');
v[2] = circle(7.4, -12.3, 'C');

sort(v.begin(), v.end(), greater<circle>());

for(vector<circle>::iterator iter = v.begin();
iter != v.end();
++iter)
cout << "Circle: " << iter->code << ", length: " << iter->length() << endl;

return 0;
}
Форма ответа