Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Никита21000
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 56
1

Программа определяет лежат ли 3 точки на одной прямой , все время выводит что не лежат , как исправить?

06.11.2018, 21:47. Просмотров 819. Ответов 2

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 <stdio.h>
#include <locale.h>
int main() {
    setlocale(LC_ALL, "rus");
    float x1,x2,x3,y1,y2,y3;
    float a, b;
    int s;
    do {    
        printf ("Введите координаты первой точки: ");
        scanf ("%f %f", &x1, &y1);
        printf ("Введите координаты второй точки: ");
        scanf ("%f %f", &x2, &y2);
        printf ("Введите координаты третей точки: ");
        scanf ("%f %f", &x3, &y3);
        printf ("\n");
    }
    while ((x1 == x2 || x1 == x3 || x2 == x1 || x2 == x3 || x3 == x1 || x3 == x2 ) && (y1 == y2 || y1 == y3 || y2 == y1 || y2 == y3 || y3 == y1 || y3 == y2));
    if (x1 == x2) {
        if (x1 == x3) printf ("Данные точки лежат на одной прямой.\n");
        else printf ("Данные точки не лежат на одной прямой.\n");
    }
    else  a = (y1-y2);
  b = (y1 - a * x1) * (x1-x2);
  if (a * x3 + b == y3 * (x1-x2)) printf ("Данные точки лежат на одной прямой.\n");
    else printf ("Данные точки не лежат на одной прямой.\n");
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2018, 21:47
Ответы с готовыми решениями:

Определить, лежат ли точки на одной прямой
Первая программа(лежат ли точки на одной прямой) #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Определить, лежат ли точки на одной прямой
int main(void) { int x1, y1, x2, y2, x3, y3; int d1, d2, d3; ...

Определить, лежат ли точки на одной прямой
int main(int argc, char** argv) { int x1, y1, x2, y2, x3, y3; int d1, d2, d3; ...

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

Напечатать точки, задающие такую плоскость, что все остальные точки лежат по одну сторону от неё
Здравствуйте! Нужно решить задачу, которая кажется очень алгоритмически сложной. Помогите,...

2
coder0
53 / 35 / 20
Регистрация: 26.09.2018
Сообщений: 189
06.11.2018, 23:41 2
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
#include <stdio.h>
#include <math.h>
double mod(double i){
 if(i<0)return -i;else
          return i;
}
struct point{double x;double y;};
int main(){
struct point pts[3];
printf("first point: ");
scanf("%f%f",&pts[0].x,&pts[0].y);
printf("second point: ");
scanf("%f%f",&pts[1].x,&pts[1].y);
printf("third point: ");
scanf("%f%f",&pts[2].x,&pts[2].y);
 
double d0,d1,d2;
 
d0=mod((pts[0].x-pts[1].x)*(pts[0].x-pts[1].x))+mod((pts[0].y-pts[1].y)*(pts[0].y-pts[1].y));
d0=scrt(d0);
d1=mod((pts[0].x-pts[2].x)*(pts[0].x-pts[2].x))+mod((pts[0].y-pts[2].y)*(pts[0].y-pts[2].y));
d1=scrt(d1);
d2=mod((pts[2].x-pts[1].x)*(pts[2].x-pts[1].x))+mod((pts[2].y-pts[1].y)*(pts[2].y-pts[1].y));
d2=scrt(d2);
if((d0==d1+d2)||(d1==d0+d2)||(d2==d1+d0))printf("True\n");
else printf("false\n");
getchar();
}
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10517 / 6221 / 1563
Регистрация: 25.07.2009
Сообщений: 11,844
07.11.2018, 00:37 3
Лучший ответ Сообщение было отмечено Никита21000 как решение

Решение

Цитата Сообщение от coder0 Посмотреть сообщение
double mod(double i)
abs()
fabs()

Немного по-другому:
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
33
34
#include <stdio.h>
#include <math.h>
 
#define EPS (1.0e-6)
 
enum POINT_COORDS { PC_X = 0, PC_Y = 1, PC_DIMENSIONS = 2 };
#define POINTS_COUNT (3)
 
double distance(double x1, double y1, double x2, double y2) {
    return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
 
int main(void) {
    double points[POINTS_COUNT][PC_DIMENSIONS];
    int i;
    
    for ( i = 0; i < POINTS_COUNT; ++i ) {
        printf("Point #%d:\n", i + 1);
        printf("\tX = ");
        if ( scanf("%lf", &points[i][PC_X]) != 1 )
            return 1;
        printf("\tY = ");
        if ( scanf("%lf", &points[i][PC_Y]) != 1 )
            return 1;
    }
    
    printf("The points %slie on a straight line.\n", 
        ( fabs(distance(points[0][PC_X], points[0][PC_Y], points[1][PC_X], points[1][PC_Y]) - distance(points[1][PC_X], points[1][PC_Y], points[2][PC_X], points[2][PC_Y]) - distance(points[0][PC_X], points[0][PC_Y], points[2][PC_X], points[2][PC_Y])) < EPS 
        || fabs(distance(points[1][PC_X], points[1][PC_Y], points[2][PC_X], points[2][PC_Y]) - distance(points[0][PC_X], points[0][PC_Y], points[1][PC_X], points[1][PC_Y]) - distance(points[0][PC_X], points[0][PC_Y], points[2][PC_X], points[2][PC_Y])) < EPS 
        || fabs(distance(points[0][PC_X], points[0][PC_Y], points[2][PC_X], points[2][PC_Y]) - distance(points[0][PC_X], points[0][PC_Y], points[1][PC_X], points[1][PC_Y]) - distance(points[1][PC_X], points[1][PC_Y], points[2][PC_X], points[2][PC_Y])) < EPS 
    ) ? "" : "do not ");
    
    return 0;
}
Код
[andrew@easybook numbers]$ gcc -Wall points_on_line.c -lm
[andrew@easybook numbers]$ ./a.out 
Point #1:
	X = 1
	Y = 0
Point #2:
	X = 3
	Y = 1
Point #3:
	X = 5
	Y = 2
The points lie on a straight line.
[andrew@easybook numbers]$ ./a.out 
Point #1:
	X = 2
	Y = 2
Point #2:
	X = 5
	Y = 5
Point #3:
	X = 6
	Y = 3
The points do not lie on a straight line.
[andrew@easybook numbers]$

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2018, 00:37

Докажите, что точки лежат на одной прямой
На сторонах ВС и СD квадрата ABCD выбрали точки M и N так, что угол MAN=45. На отрезке MN, как на...

А, В и С лежат на одной прямой. Напишите условие того, что точки А и В находятся по одну сторону от точки С
А, В и С лежат на одной прямой. Напишите условие того, что точки А и В находятся по одну сторону от...

Лежат ли 3 точки на одной прямой
подскажите пожалуйста как это проверить, 2) угол можно определить с помощью sin,cos ? (если не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru