C/C++

Программирование на C++

По заданным координатам точки определить, где находится точка:
1) внутри заштрихованной области;
2) вне з/о;
3) на границе это области.
#include <iostream>
#include <cstdlib>
using namespace std;
double coord(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
const auto radius = 1.0;
const auto top = 0.8;
const auto bottom = 0.0;
const auto eps = 1e-8;
const auto out = "Точка лежит вне заштрихованной области";
const auto in = "Точка лежит внутри заштрихованной области";
const auto border = "Точка лежит на границе заштрихованной области";
while (true) {
const auto x = coord("x: ");
const auto y = coord("y: ");
const auto xy = x * x + y * y - radius;
if (y < bottom || y > top || xy > 0 && fabs(xy) > eps) puts(out);
else if (y < top && y > bottom && xy < 0 && fabs(xy) > eps) puts(in);
else puts(border);
}
}
Антон Букин
Антон Букин
60 743
Лучший ответ
Илья Галимов ни при каких значениях в ответе не пишет написано внутри заштрихованной области программа работает не правильно
/*
Для окружности с радиусом 1 и центром в начале координат подходит следующее уравнение: x*x + y*y == 1;
*/
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
double x,y; // координаты точки
cout << "Введите координату x: ";
cin >> x;
cout << "Ведите координату y: ";
cin >> y;
// проверяем, лежит ли точка на границы области
if( (x*x + y*y == 1.0) && (y >= 0.0 && y <= 0.8) ||
y == 0. && (x >= -1.0 && x <= 1.0) ||
y == 0.8 && (x >= -sqrt(1.0 - 0.8*0.8) && x <= sqrt(1.0 - 0.8*0.8)) )
{
cout << "Точка лежит на границе заштрихованной области." << endl;
}
// проверяем условие нахождения точки в области
else if( y > 0.0 && y < 0.8 &&
(x > -sqrt(1.0 - y*y) && x < sqrt(1.0 - y*y)) )
{
cout << "Точка лежит в заштрихованной области." << endl;
}
// и остаётся третий вариант
else
{
cout << "Точка находится вне заштрихованной области." << endl;
}
return 0;
}
/*
П. С.: я не гений математики.
Поэтому протестируйте программу как следует.
*/