в некоторых случаях программа не работает, чего у меня не хватает?

вот условие: Дан квадрат с вершинами в точках (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 шт):

Автор решения: ganz

Эммм ты не верно подошёл к проблемме... предлагаю такое решение: используя начальный курс высшей алгебры вычисляем растояние для четырёх точек, находим меньшее. Ну и програмно вычисляем данные координаты лежат ли в нутри квадрата То есть проходим циклом по углам квадрата вычисляя "расстояние между двумя точками формула", затем находим меньшее, переменную запоминаем и вычисляем находится ли она в нутри квадрата то есть если X точки больше минимального X квадрата И Х точки меньше максимального X квадрата (тоже для У) то точка в квадрате

→ Ссылка
Автор решения: Harry

Вас честно спрашивали — там что, Вы пытаетесь ввести 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 я тоже оставил вам :)

→ Ссылка