в некоторых случаях программа не работает, чего у меня не хватает?
вот условие: Дан квадрат с вершинами в точках (0, 0), (0, k), (k, k), (k, 0). Вычислите наименьшее из расстояний от точки с координатами (x, y), лежащей внутри квадрата, до сторон данного квадрата. Координаты вещественные. Если точка лежит за пределами квадрата, выведите сообщение об этом и расстояние до ближайшей стороны квадрата.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double k, x, y, a;
double r = 0;
cout << "enter k: ";
cin >> k;
cout << "enter x: ";
cin >> x;
cout << "enter y: ";
cin >> y;
if (k > 0) {
//точка находится все квадрата
if (x >= 0 && y <= 0 && y <= k) {
r = -y;
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x <= 0 && y >= 0 && y <= k)
{
r = -x;
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x >= k && y >= 0 && y <= k)
{
r = x - k;
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (y >= k && x >= 0 && x <= k)
{
r = y - k;
cout << "the point is located outside the square" << endl;
}
else if (x < 0 && y > k)
{
r = sqrt(x * x + (y - k) * (y - k));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x < 0 && y < 0)
{
r = sqrt(x * x + y * y);
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x > k && y > k)
{
r = sqrt((x - k) * (x - k) + (y - k) * (y - k));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x > k && y < 0)
{
r = sqrt((x - k) * (x - k) + y * y);
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
//точка находится внутри квадрата
else if (y <= x && y <= (k - x)) {
r = y;
cout << "r= " << r << endl;
}
else if (y >= x && y <= (k - x)) {
r = x;
cout << "r= " << r << endl;
}
else if (y >= x && y >= (k - x)) {
r = -k + y;
cout << "r=" << r << endl;
}
else {
r = -k + x;
cout << "r= " << r << endl;
}
}
if (k < 0) {
//точка находится вне квадрата
if (y <= k && x >= k && x < 0) {
r = abs(y - k);
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x <= k && y >= k && y <= 0) {
r = abs(x - k);
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x <= 0 && x >= k && y >= 0) {
r = y;
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (x >= 0 && y >= k && y <= 0) {
r = x;
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (y < k && x < k) {
r = sqrt((x - k) * (x - k) + (y - k) * (y - k));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (y > 0 && x < k) {
r = sqrt((x - k) * (x - k) + (y * y));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (y > 0 && x > 0) {
r = sqrt((x * x) + (y * y));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
else if (y < k && x>0) {
r = sqrt((x * x) + (y - k) * (y - k));
cout << "the point is located outside the square\n" << "r= " << r << endl;
}
//точка находится внутри квадрата
else if (y <= x && y >= (-k - x)) {
r = -x;
cout << "r= " << r << endl;
}
else if (y >= x && y >= (-k - x)) {
r = -y;
cout << "r= " << r << endl;
}
else if (y <= (-k - x) && y <= x) {
r = -k - y;
cout << "r= " << r << endl;
}
else {
r = -k - x;
cout << "r= " << r << endl;
}
}
if (k == 0) {
cout << "the square doesn't exist";
}
return 0;
}
Ответы (2 шт):
Эммм ты не верно подошёл к проблемме... предлагаю такое решение: используя начальный курс высшей алгебры вычисляем растояние для четырёх точек, находим меньшее. Ну и програмно вычисляем данные координаты лежат ли в нутри квадрата То есть проходим циклом по углам квадрата вычисляя "расстояние между двумя точками формула", затем находим меньшее, переменную запоминаем и вычисляем находится ли она в нутри квадрата то есть если X точки больше минимального X квадрата И Х точки меньше максимального X квадрата (тоже для У) то точка в квадрате
Вас честно спрашивали — там что, Вы пытаетесь ввести y как "-k*10/5+5"? прям так строкой?
Вы таки так и пытаетесь ввести k/2. Я даже не знаю, как описать эту глупость... Вы бы еще ввели половина k...
Так что ограничусь менторским тоном:
При вводе cin >> x, где x — число типа double, вы обязаны вводить число. k/2 — это строка, поэтому чтение прекращается, cin переходит в состояние ошибки и больше ничего не читает...
И вообще — вы не хотите немного короче? Типа такого:
#include <iostream>
#include <cmath>
using namespace std;
double dist(double x, double y, double k, bool& in)
{
k /= 2;
x = abs(x-k);
y = abs(y-k);
if (in = (x <= k && y <= k)) {
x = k - x; y = k - y;
return (x < y) ? x : y;
}
if (x > k && y > k) return sqrt((x-k)*(x-k)+(y-k)*(y-k));
else return x > k ? x-k : y-k;
}
int main()
{
double x, y, k;
cout << "enter k: ";
cin >> k;
cout << "enter x: ";
cin >> x;
cout << "enter y: ";
cin >> y;
bool in;
double r = dist(x,y,k,in);
cout << "the point is located " << (in ? "in" : "out") << "side the square\n";
cout << "r = " << r << endl;
}
Я тут вывожу только минимальное расстояние до стороны квадрата; для обеих сторон дописывается тривиально... Проверку на k > 0 я тоже оставил вам :)
