Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Shiro
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
#1

Определить, имеются ли три прямые, пересекающиеся в одной точке - C++

01.03.2016, 10:04. Просмотров 350. Ответов 3
Метки нет (Все метки)

Прямая на плоскости может быть задана уравнением a*x + b*y + с = 0, где a и b одновременно не равны нулю. Будем рассматривать прямые только с целыми коэффициентами a, b, c. Пусть даны коэффициенты нескольких прямых: a1, b1, c1, a2, b2, c2, ... , an, bn, cn.
Определить, имеются ли среди этих прямых совпадающие или параллельные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2016, 10:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить, имеются ли три прямые, пересекающиеся в одной точке (C++):

Определить, имеются ли среди этих окружностей три параллельно пересекающиеся
Окружность на плоскости может быть задана координатами x, y ее центра и...

Определить, имеются ли в данном массиве три идущих подряд нулевых элемента
Задан массив целых чисел.Определить,имеется ли в этом массиве три идущих подряд...

Определить пересекаются две прямые, параллельны или совпадают.Две прямые заданы уравнениями: ax+by+c=0, px+qy+r=0
Определить пересекаются две прямые, параллельны или совпадают. Две прямые...

Определить лежат ли три точки на одной прямой
Добро времени суток уважаемые программисты.Суть такова.Нужно,чтобы я вводил...

Определить будут ли заданные три точки расположены на одной прямой
1) f(x){0; если x<=1 x+6 В противном случае 2)Даны действительные...

Три точки заданы координатами. Определить, лежат ли они на одной прямой
Задачи довольно простые. Я проста не разбираюсь в этом языке программирование....

3
yrceus
82 / 82 / 80
Регистрация: 25.08.2013
Сообщений: 330
01.03.2016, 20:24 #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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct straight {
    double a, b, c;
};
//----------------------------------------------------------------------------
    void initstr(straight &x) {
        cout << "Enter the  3 coefficients of equation: \n";
        for (;;) {
            if (cin >> x.a, cin >> x.b, cin >> x.c) {
                if (x.a || x.b)
                    break;
                else
                    cout << "A and B not zero.\n";
            }
            else {
                cout << "Incorrect input." << endl;
                cin.clear();
                while (cin.get() != '\n');
            }
        }
    }
//----------------------------------------------------------------------------
    void comparison(vector<straight> &lines) {
        int s = 0;
        for (auto x : lines) 
            for (auto y = lines.begin() + ++s; y < lines.end(); ++y) {
                double a, b, c;
                if (!x.a && !y->a || !x.b && !y->b)
                    continue;
                !x.a || !y->a ? a = 0 : a = x.a / y->a;
                !x.b || !y->b ? b = 0 : b = x.b / y->b;
                (!x.c || !y->c) && !(!x.c && y->c) ? c = a + 1 : !x.c && y->c ? c = a : c = x.c / y->c;
                if (abs(a - b) < 1E-4 && abs(a - c) < 1E-4)
                    cout << "Straight with coefficient \n" << x.a << ' ' << x.b << ' ' << x.c << " and\n"
                    << y->a << ' ' << y->b << ' ' << y->c << " equally.\n";
                else if (abs(a - b) < 1E-4 && abs(a - c) > 1E-4)
                    cout << "Straight with coefficient \n" << x.a << ' ' << x.b << ' ' << x.c << " and\n"
                    << y->a << ' ' << y->b << ' ' << y->c << " parallel.\n";
        }
    }
//-----------------------------------------------------------------------------
int main()
{
    size_t x;
    cout << "Enter lines: ";
    for (;;) {
        if (cin >> x)
            break;
        cout << "Incorrect input." << endl;
        cin.clear();
        while (cin.get() != '\n');
    }
    vector<straight> lines(x);
    while (x > 0) 
        initstr(lines[--x]);
    comparison(lines);  
    return 0;
}
Вроде не напутал
0
Shiro
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
03.03.2016, 09:51  [ТС] #3
yrceus, попроще можно?
0
SpBerkut
Объявлятель переменных
948 / 274 / 275
Регистрация: 24.09.2011
Сообщений: 1,008
Завершенные тесты: 2
03.03.2016, 15:19 #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct Line {
    int a, b, c;
};
 
bool IsParallel(Line *A, Line *B) {
    if (B->a == 0) return B->a == 0;
    if (B->b == 0) return A->b == 0;
    return (fabs(A->a/B->a - A->b/B->b) < 1E-8);
}
 
bool IsCommonIntersection(Line *A, Line *B, Line *C, float &x, float &y) {
    if (IsParallel(A, B)) return false;
    x = (A->b*B->c - B->b*A->c) / (A->a*B->b - A->b*B->a);
    y = -(A->a*x + A->c)/A->b;
    return (fabs(C->a*x+C->b*y+C->c) < 1E-8);
}
 
int main() {
    int N;
    float x,y;
 
    cout << "N = "; cin >> N;
    
    Line *Lines = new Line[N];
    
    for (int i = 0; i < N; i++) cout << "Line " << i+1 << " (a, b, c): "; cin >> Lines[i].a >> Lines[i].b >> Lines[i].c;   
 
    for (int i = 0; i < N; i++)
      for (int j = i+1; j < N; j++)
        for (int k = j+1; k < N; k++) {
            if (IsCommonIntersection(&Lines[i],&Lines[j],&Lines[k], x, y)) {
                cout << "Lines " << i << ", " << j << " and " << k << " is crossing at (" << x << ";" << y << ")." << endl;
            }
        }
    delete[] Lines;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2016, 15:19
Привет! Вот еще темы с решениями:

Определить, лежат ли три точки A, B, C на одной прямой. Если нет, найти угол ABC
Даны три точки A(x_1, y_1), \, B(x_2, y_2), \, C(x_3, y_3) Определить...

помогите пожалуйста задать прямые с помощью структур прямые задаются точкой и направляющим вектором. дальше как делать знаю
Разработать алгоритм определяющий взаимное расположение двух прямых в...

Две прямые описываются уравнениями напечатать координаты точки пересечения этих прямых, либо сообщить что эти прямые совпада
Две прямые описываются уравнениями а1x+b1y+c1=0 a2x+b2y+c2=0 напечатать...

Три ученика и три языка. Определить кто на каком программирует.
Решите задачи на C++(в виде кода программы) 3.Три ученика (Коля, Петя и...


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

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

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