Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/48: Рейтинг темы: голосов - 48, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
1

Принадлежат ли точки одной прямой

13.10.2014, 12:40. Показов 9117. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, не могу понять как в C++ написать программу к задаче: Даны три точки, заданные своим координатами, определить принадлежат ли эти точки одной прямой. Значения x1, y1, x2, y2, x3, y3 вводятся с клавиатуры, на монитор выводится слово YES (если точки принадлежат) или NO (если точки не принадлежат прямой).

Пример входных данных

3 2 8 3 13 4

Пример выходных данных

YES

Помогите пожалуйста!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2014, 12:40
Ответы с готовыми решениями:

Проверить, принадлежат ли все точки одной прямой линии
Как известно, Владимир даёт студентам сложные курсовые работы по алгоритмам. Не каждому удаётся...

Определить принадлежат ли точки прямой
Заданы точки А(a1,a2) и В(b1,b2). Определить, лежат ли они на прямой y=ax+b.

. Определить, принадлежат ли точки прямой ax+by+c=0 треугольнику с вершинами (x1,y1), (x2,y2), (x3,y3)
. Определить, принадлежат ли точки прямой ax+by+c=0 треугольнику с вершинами (x1,y1), (x2,y2),...

Заданы две точки (х1, у1), (х2, у2). Определить, лежат ли обе точки относительно заданной прямой в одной полуплоскости
Заданы две точки (х1, у1), (х2, у2) и прямая ax+by+c=0. Определить, лежат ли обе точки относительно...

15
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
13.10.2014, 13:07 2
y=ax+b
y1=ax1+b
y2=ax2+b
a=(y1-y2)/(x1-x2)
b=y1-ax1
Теперь считаем
y=ax3+b
Если y Равен y3 - то лежат на одной прямой.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
13.10.2014, 13:13 3
Helena Brost, числа все целые?

Добавлено через 50 секунд
Цитата Сообщение от zss Посмотреть сообщение
y=ax+b
y1=ax1+b
y2=ax2+b
a=(y1-y2)/(x1-x2)
b=y1-ax1
Теперь считаем
y=ax3+b
Если y Равен y3 - то лежат на одной прямой.
х1 равный х2 и хитрый план рушится

Добавлено через 2 минуты
Helena Brost, Helena Brost, не слушай zss
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
13.10.2014, 13:18  [ТС] 4
числа целые

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Kuzia domoveno
, а как тогда надо? мне вообще программу надо написать, я не могу понять как это сделать
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
13.10.2014, 13:22 5
Если x1=x2, то прямая вертикальная, и надо проверить равенство x1=x3

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double x1,x2,x3,y1,y2,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
if(x1==x2)
{
     if(x1==x3)
      cout<<"Yes!";
     else
       cout<<"No";
}else
{
       double a,b;
       a=(y1-y2)/(x1-x2);
       b=y1-a*x1;
       if(a*x3+b==y3)
           cout<<"Yes!";
     else
           cout<<"No";
}
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
13.10.2014, 13:27  [ТС] 6
zss, спасибо большое!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
13.10.2014, 13:29 7
Цитата Сообщение от zss Посмотреть сообщение
double x1,x2,x3,y1,y2,y3;
Цитата Сообщение от Helena Brost Посмотреть сообщение
числа целые
zss, зря теряешь точность только + лишние исключительные ситуации огребаешь.
1
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
13.10.2014, 13:34  [ТС] 8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
зря теряешь точность только + лишние исключительные ситуации огребаешь.
и какие же?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
13.10.2014, 13:34 9
C++
1
bool colinear=( (x2-x1)*(y3-y1)==(y2-y1)*(x3-x1) );
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
13.10.2014, 13:44  [ТС] 10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
1
bool colinear=( (x2-x1)*(y3-y1)==(y2-y1)*(x3-x1) );
куда его вставить в программу?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
13.10.2014, 13:55 11
Helena Brost, а ты ещё и языка С++ не знаешь? Я думал, только школьной алгебры и геометрии...

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
double x1,x2,x3,y1,y2,y3;
 cin>>x1>>y1>>x2>>y2>>x3>>y3;
 if(x1==x2) { 
    if(x1==x3) cout<<"Yes!"; 
    else cout<<"No"; 
 }else { 
    double a,b;
    a=(y1-y2)/(x1-x2);
    b=y1-a*x1;
    if(a*x3+b==y3) cout<<"Yes!";
    else cout<<"No"; 
}
Впрочем, если тебе помогло это, могу по аналогии написать
C++
1
2
3
bool colinear=( (x2-x1)*(y3-y1)==(y2-y1)*(x3-x1) );
    if(colinear) cout<<"Yes!";
    else cout<<"No"; )
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 16
13.10.2014, 14:12  [ТС] 12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Впрочем, если тебе помогло это, могу по аналогии написать
проблемки с с++ , вот и спрашиваю, спасибо за помощь!
0
0 / 0 / 0
Регистрация: 22.07.2013
Сообщений: 11
07.12.2015, 14:22 13
Спасибо за советы помогло не только ТС.
Однако у меня геометрический коллапс в голове.

Задание мое звучит так:
Даны точки (x1;y1), (x2;y2). Определить проходит ли прямая, заданная уравнением y=ax+b через эти точки.
Использовал код уважаемого zss, слегка его ппоправив для своих нужд.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
int main ()
{
int x1,x2,y1,y2;
cout << "Vvedite x1: ";
cin >> x1;
cout << "Vvedite y1: ";
cin >> y1;
cout << "Vvedite x2: ";
cin >> x2;
cout << "Vvedite y2: ";
cin >> y2;
 
if(x1==x2)
{
     if(x1==x2)
      cout<<"Yes";
     else
       cout<<"No";
}else
{
       int a,b;
       a=(y1-y2)/(x1-x2);
       b=y1-a*x1;
       cout << "a=" << a << " b=" << b << endl; //смотрим значения а и b
       if(a*x2+b==y2)
           cout<<"Yes!";
     else
           cout<<"No!";
}
}
Стал тестировать и получилось, что каждый раз у меня линия совпадает с точками, еще бы ведь она этими же точками и заедается.

Так вот вопрос, является ли данное решение правильным для этой задачи или что я делаю не так?)))
Заранее благодарю за ответ!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
07.12.2015, 14:44 14
поток какого-то бреда, не связанного с задачей...
по заданию дают две точки и уравнение ax+b
программа чего-то считает только по двум точкам (непонятно что)
Особо доставляют двойные условия типа
C++
1
2
3
4
if(x1==x2)
{
     if(x1==x2)
      cout<<"Yes";
0
0 / 0 / 0
Регистрация: 22.07.2013
Сообщений: 11
07.12.2015, 15:58 15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
поток какого-то бреда, не связанного с задачей...
по заданию дают две точки и уравнение ax+b
программа чего-то считает только по двум точкам (непонятно что)
Особо доставляют двойные условия типа
C++Выделить код
1
2
3
4
if(x1==x2)
{
* * *if(x1==x2)
* * * cout<<"Yes";
Двойные условия я поправил, но теперь она выдает^
Vvedite x1: 1
Vvedite y1: 3
Vvedite x2: 3
Vvedite y2: 1
No
a=-1 b=4
Yes!
если я не правильно все понял, может вас не затруднит помочь мне в место того чтобы высмеивать?

Добавлено через 4 минуты
теперь вот такой код, укажите на ошибки пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
int main ()
{
int x1,x2,y1,y2;
cout << "Vvedite x1: ";
cin >> x1;
cout << "Vvedite y1: ";
cin >> y1;
cout << "Vvedite x2: ";
cin >> x2;
cout << "Vvedite y2: ";
cin >> y2;
     if(x1==x2)
      cout<<"Yes";
     else
     {
       int a,b;
       a=(y1-y2)/(x1-x2);
       b=y1-a*x1;
       cout << "\na=" << a << " b=" << b << endl; //смотрим значения а и b
       if(a*x2+b==y2)
           cout<<"Yes!";
     else
           cout<<"No!";
     }
}
Добавлено через 49 минут


Эксперименты продолжаются:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
int main ()
{
int x1,x2,y1,y2;
cout << "Vvedite x1: ";
cin >> x1;
cout << "Vvedite y1: ";
cin >> y1;
cout << "Vvedite x2: ";
cin >> x2;
cout << "Vvedite y2: ";
cin >> y2;
 
     if(x1==x2)
     
      cout<<"Yes";
     else
     {
         int a,b;
       a=(y1-y2)/(x1-x2);
       b=y1-a*x1;
       y1=a*x1+b;
       y2=a*x2+b;
       cout << "\na=" << a << " b=" << b << endl; //смотрим значения а и b
       cout << "x1, y1 = " << x1 << ", " << y1 << "\nx2, y2 = " << x2 << ", " << y2 << endl; // смотрим значения x, y.
       if(a*x2+b==y2)
           cout<<"Yes!";
     else
           cout<<"No!";
     }
}
Цитата Сообщение от Out
Vvedite x1: 1
Vvedite y1: 3
Vvedite x2: 3
Vvedite y2: 1

a=-1 b=4
x1, y1 = 1, 3
x2, y2 = 3, 1
Yes!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
07.12.2015, 17:30 16
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
по заданию дают две точки и уравнение ax+b
программа чего-то считает только по двум точкам (непонятно что)
ты на эту предъяву ответь сначала, иначе непонятно, что ты там исправляешь. Если твои писульки даже условию не соответствуют!
0
07.12.2015, 17:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2015, 17:30
Помогаю со студенческими работами здесь

Определите, лежат ли точки на одной прямой
1)Заданы три точки на плоскости: М с координатами(x1,y1), L с координатами(x2,y2), и H с...

Определить расположены ли точки на одной прямой
Даны три точки А(x1, y1), В(x2, y2), С(x3, y3). Определить будут ли они расположены на одной...

Проверить лежат ли точки на одной прямой
Как перестроить программу что бы пользователь не смог ввести одинаковые точки #include &lt;stdio.h&gt;...

Определить, лежат ли точки на одной прямой
ВСЕМ ПРИВЕТ!!!!!!!!ПОМОГИТЕ КТО-НИБУДЬ СПРАВИТЬСЯ С ЗАДАЧЕЙ НА С++.рЕШИТЕ ПОЖАЛУЙСТА ВОТ УСЛОВИЕ-...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru