Задачка на нахождение всех точек с целочисленными координатами внутри эллипса

Вот условия задачи:

Для заданных 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;
}
→ Ссылка