Задачка на нахождение всех точек с целочисленными координатами внутри эллипса
Вот условия задачи:
Для заданных a и b найти все точки с целочисленными координатами, находящиеся внутри эллипса x^2/a^2+y^2/b^2>=1
Я нашёл для неё вот такое любопытное решение с сайта https://cpp.mazurok.com/tag/эллипс/ (если не открывается, используйте vpn). Как её можно решить без использования printf, scanf и подобных им функций?
Решение с сайта для удобства:
int main()
{
double a,b; //Описание переменных для хранения входных данных.
scanf("%lf %lf", &a, &b); //Чтение из стандартного потока.
for (int x =-a; x <= a; x++)
for (int y = -b; y <= b; y++){
if ( (x*x)/(a*a)+(y*y)/(b*b) <= 1 )
printf("(%d,%d)\n", x, y);
}
return 0;
}
Ответы (1 шт):
Автор решения: NunOfIt
→ Ссылка
#include <locale>
#include <vector>
#include <utility>
#include <iostream>
using point = std::pair<int, int>;
using point_vec = std::vector<point>;
std::ostream& operator<<(std::ostream& out, const point& other) {
out << '(' << other.first << ", " << other.second << ')';
return out;
}
std::ostream& operator<<(std::ostream& out, const point_vec& other) {
out << '[';
if(!other.empty()) {
out << other[0];
for(int i = 1; i < other.size(); ++i)
out << ", " << other[i];
}
out << ']';
return out;
}
int main() {
setlocale(LC_ALL, "");
double a, b;
point_vec center;
point_vec x_axis_p, y_axis_p;
point_vec first_qp, second_qp, third_qp, fourth_qp;
std::cout << "Введите a и b: ";
std::cin >> a >> b;
for(int x = 0; x <= a; ++x)
for(int y = 0; y <= b; ++y)
if(x*x / (a*a) + y*y / (b*b) <= 1.0) {
if(x && y) {
first_qp.push_back(std::make_pair(x, y));
second_qp.push_back(std::make_pair(-x, y));
third_qp.push_back(std::make_pair(-x, -y));
fourth_qp.push_back(std::make_pair(x, -y));
}
else if(!x && y) {
y_axis_p.push_back(std::make_pair(x, y));
y_axis_p.push_back(std::make_pair(x, -y));
}
else if(x && !y) {
x_axis_p.push_back(std::make_pair(x, y));
x_axis_p.push_back(std::make_pair(-x, y));
}
else { center.push_back(std::make_pair(x, y)); }
}
else { break; }
std::cout << "Центр: " << center << '\n';
std::cout << "Точки на оси абсцисс: " << x_axis_p << '\n';
std::cout << "Точки на оси ординат: " << y_axis_p << '\n';
std::cout << "Точки первой четверти: " << first_qp << '\n';
std::cout << "Точки второй четверти: " << second_qp << '\n';
std::cout << "Точки третьей четверти: " << third_qp << '\n';
std::cout << "Точки четвёртой четверти: " << fourth_qp << '\n';
return 0;
}