Помогите с функцией

Пишу функцию, определяющую, лежит ли точка на отрезке:

float max (float x,float y) {if (x<y) return y ; else return x;}
float min (float x,float y) {if (x>y) return y ; else return x;} 
bool thc(float x, float y, float z, float w, float a, float b){
if (z==x) {if ((a==x) and  (b>=min(y,w)) and (x<=max(y,w))) 
{return 1;} 
else {return 0;}}
float k,c;
k=(w-y)/(z-x);
c=y-k*x;
if (b==a*k+c) return 1; else return 0;
}

x,y — координаты начала отрезка, z,w — координаты конца, a,b — координаты данной точки.
Если отрезок параллелен оси Oy и данная точка лежит на нем, то функция выдает отрицательный результат. Что я сделал не так?

У вас функции min и max ничего не возвращают, когда сравниваемые значения (x и y) равны между собой. Возможно, проблема в этом. Хотя, у меня ваш пример работает с теми данными, что вы описали.

После выполнения оператора return, любая функция прекращает работу. Поэтому нет смысла использовать else после единичного return.

float max(float x, float y)
{
    if (x < y) {
        return x;
    }
    return x;
}

С функцией min то же самое.

float min(float x, float y)
{
    if (x > y) {
        return y;
    }
    return x;
}

Вот этот код, вроде бы работает правильно. Проверьте.

#include <iostream>
using namespace std;

float max(float x, float y)
{
    if (x < y) {
        return x;
    }
    return x;
}

float min(float x, float y)
{
    if (x > y) {
        return y;
    }
    return x;
}

bool thc(float x, float y, float z, float w, float a, float b)
{
    float k, c;

    if (z == x) {
        return (a == x && b >= min(y, w) && x <= max(y,w));
    }

    k = (w - y) / (z - x);
    c = y - k * x;

    return b == a * k + c;
}

int main(int argc, char* argv[])
{

    float x, y; // координаты начала отрезка
    float z, w; // координаты конца отрезка
    float a, b; // координаты точки

    bool result;

    cout << "координаты начала отрезка: ";
    cin >> x >> y;

    cout << "координаты конца отрезка: ";
    cin >> z >> w;

    cout << "координаты точки: ";
    cin >> a >> b;

    result = thc(x, y, z, w, a, b);
    cout << result << endl;

    return 0;
}

результат работы программы

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.