Аз разбирам заданието като: да се определи дали има окръжност (единствена) за която всички точки са на разстояние от центъра на окръжността, което е по-малко или равно на радиуса на окръжността. Ако точките по окръжността не се зачитат, тогава само по-малко ще е решение; ако се иска всички точки да са по окръжността, тогава решенията ще са само разстоянията равни на радиуса.
Трябват ни дефиниции за точка с дадени координати; за окръжност с даден център (точка вече има дефиниция от предното) и радиус; после ни трябва функция, която пресмята разстояние между точки по координатите им; трябва ни функция която проверява, за дадена окръжност, дали разстоянията от всички дадени точки до центъра на окръжността са по-малки или равни на радиуса; накрая ни трябва цикъл, които минава през всички окръжности и прави проверката.
Предложеното решение спира при първата намерена окръжност, която изпълнява условието. Ако се искат всички такива окръжности, трябва да се дефинира масив да записва индексите на окръжностите, които изпълняват условието и накрая да проверява дали този масив е празен или не.
Нямам кирилизатор, затова всички съобщения са на аглийски език. Съобщението коя окръжност удовлетворява условието показва естествен броен индекс (с едно по-голям от програмния индекс). Можете да замените с кооридинатите и радиуса на окръжността ако желаете.
Вместо:
- Код: Избери целия код
cout << "Circle " << i + 1 << " contains all the points." << endl;
Поставете
- Код: Избери целия код
cout << "Circle ((" << circles[i].center.x << "; " << circles[i].center.y << ")," << circles[i].radius << ") contains all the points." << endl;
Проверете кода внимателно, защото от много време не съм ползвал C++ и може несъзнателно да съм вложил C# код някъде.
- Код: Избери целия код
#include <iostream>
#include <cmath>
using namespace std;
// дефиниция на точка с дадени координати
struct Point {
double x, y;
};
// дефиниция на кръг с дадена точка за център и зададен радиус
struct Circle {
Point center;
double radius;
};
//калкулация на разстояние между две точки
double distance(const Point& p1, const Point& p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
// проверява дали разстоянието от всяка от дедените точки е по-малко или равно на радиуса на кръга
bool circleContainsAllPoints(const Circle& circle, const Point points[], int m) {
for (int i = 0; i < m; ++i) {
double dist = distance(circle.center, points[i]);
if (dist > circle.radius) {
return false; // намерена е точка извън окръжността, прекъсва цикъла
}
}
return true; // търсеното условие е изпълнено
}
int main() {
int k, m;
// Иска брой окръжности
cout << "Enter the number of circles (k): ";
cin >> k;
// Иска въвеждане на брой точки
cout << "Enter the number of points (m): ";
cin >> m;
// Създава масиви за окръжности и точки
Circle circles[20];
Point points[20];
// Приема данни за окръжности (координати на центът и радиус)
for (int i = 0; i < k; ++i) {
cout << "Enter the center (x y) and radius of circle " << i + 1 << ": ";
cin >> circles[i].center.x >> circles[i].center.y >> circles[i].radius;
}
// Приема данни за точки (координати по абсциса и ордината)
for (int i = 0; i < m; ++i) {
cout << "Enter the coordinates (x y) of point " << i + 1 << ": ";
cin >> points[i].x >> points[i].y;
}
// Цикъл за проверка
bool found = false;
for (int i = 0; i < k; ++i) {
if (circleContainsAllPoints(circles[i], points, m)) {
cout << "Circle " << i + 1 << " contains all the points." << endl;
found = true;
break;
}
}
if (!found) {
cout << "No circle contains all the points." << endl;
}
return 0;
}
[tex]\color{lightseagreen}\text{''Който никога не е правил грешка, никога не е опитвал нещо ново.''} \\
\hspace{21em}\text{(Алберт Айнщайн)}[/tex]