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

Вычислить факт параллельности прямых заданных координатами двух точек

21.06.2019, 23:33. Показов 9585. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
П.5.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
double pp(double a, double b)
{
    if (a == b)
        return 1;
    else return 0;
}
void pp(double a, double b, int* rez)
{
    if (a == b)
        * rez = 1;
    else *rez = 0;
}
void pp(double a, double b, int& rez)
{
    if (a == b)
        rez = 1;
    else rez = 0;
}
 
int main()
{
    double x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6, k1, k2, k3;
    setlocale(LC_ALL, "Russian");
    cout << "Введите координаты X и Y прямых AB,CD,EF" << endl;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4 >> x5 >> y5 >> x6 >> y6;
    cout << " координаты AB =" << x1 << y1 << x2 << y2 << " координаты CD =" << x3 << y3 << x4 << y4 << " координаты EF =" << x5 << y5 << x6 << y6 << endl << endl;
    k1 = (y2 - y1) / (x2 - x1);
    k2 = (y4 - y3) / (x4 - x3);
    k3 = (y6 - y5) / (x6 - x5);
    cout << "k для AB = " << k1 << endl;
    cout << "k для CD = " << k2 << endl;
    cout << "k для EF = " << k3 << endl;
    int rez = 0;
 
    if (pp(k1, k2) == 1)
        cout << "AB и CD параллельны" << endl;
    else cout << "AB и CD не параллельны" << endl;
 
    if (pp(k1, k3) == 1)
        cout << "AB и EF параллельны" << endl;
    else cout << "AB и EF не параллельны" << endl;
 
 
    if (pp(k2, k3) == 1)
        cout << "CD и EF параллельны" << endl;
    else cout << "CD и EF не параллельны" << endl;
 
    cout << "Результат параллельности для AB,CD,EF для указателя " << endl;
 
    pp(k1, k2, &rez);
    if (rez == 1)
        cout << "AB и CD параллельны" << endl;
    else cout << "AB и CD не параллельны" << endl;
 
    pp(k1, k3, &rez);
    if (rez == 1)
        cout << "AB и EF параллельны" << endl;
    else cout << "AB и EF не параллельны" << endl;
 
    pp(k2, k3, &rez);
    if (rez == 1)
        cout << "CD и EF параллельны" << endl;
    else cout << "CD и EF не параллельны" << endl;
 
    cout << "Результат параллельности для AB,CD,EF для ссылки " << endl;
 
    pp(k1, k2, rez);
    if (rez == 1)
        cout << "AB и CD параллельны" << endl;
    else cout << "AB и CD не параллельны" << endl;
 
    pp(k1, k3, rez);
    if (rez == 1)
        cout << "AB и EF параллельны" << endl;
    else cout << "AB и EF не параллельны" << endl;
 
    pp(k2, k3, rez);
    if (rez == 1)
        cout << "CD и EF параллельны" << endl;
    else cout << "CD и EF не параллельны" << endl;
 
    system("Pause");
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2019, 23:33
Ответы с готовыми решениями:

Поиск номеров двух точек (заданных координатами), расстояние между которыми наибольшее
Дан массив структур. Элементами структуры являются координата X, Y, Z некоторой точки в пространстве. Таких точек 20. Создать...

Определить количество общих точек у двух отрезков, заданных координатами своих концов
Помогите пожалуйсто. Условие задачи на Делфи Определить количество общих точек у двух отрезков, заданных координатами своих концов....

Вычислить и напечатать полярные координаты точек, заданных декартовыми координатами
Три точки заданы своими декартовыми координаты x=(x1,x2); y=(y1,y2);z=(z1,z2) вычислить и напечатать полярные координаты этих точек.Кроме...

11
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
22.06.2019, 00:00
Прямая задаётся как-то так: y=k*x+c, параллельные прямые будут иметь одинаковый коэффицент k.
От его и нужно искать.
Остерегайтесь деления на ноль. Удачи.

И кода много лишнего.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
22.06.2019, 00:28
neket99, вектора, задающие прямые:
a{x1 - x2, y1 - y2};
b{x3 - x4, y3 - y4};
косинус угла между ними:
cos_ab = (ax*bx + ay*by)/sqrt(ax*ax + ay*ay)/sqrt(bx*bx + by*by).
Если abs(cos_ab) - 1 < eps, то параллельны (eps = 1e-8).
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 24
22.06.2019, 00:28  [ТС]
Просто фишка в том,что вот условие задачи: Разработать функцию, определяющую факт параллельности прямых, заданных координатами двух точек на плоскости.Ввести три пары координат точек, задающих положение трёх прямых. Используя разработанную функцию найти среди них количество параллельных прямых. Прямые(надеюсь,что я не ошибаюсь) я задал как нужно по условию задачи. А код,к сожалению,умею пока что писать только таким образом.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
22.06.2019, 00:37
косинус не нужно считать, просто сравниваем ax/ay и bx/by
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
22.06.2019, 00:47
neket99, да мы поняли все твоё условие и твою ошибку. не надо повторяться.
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
22.06.2019, 01:14
Тут я поигрался с твоей задачей - цепляй нужное/подходящее
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
 
struct line
{
    int x0, x1;
    int y0, y1;
    double koeff;
    bool vertical;
 
    line() 
    {
        vertical = false;
    };
    line(int x0_, int y0_, int x1_, int y1_) : x0(x0_), y0(y0_), x1(x1_), y1(y1_)
    {
        vertical = false;
        initialize_koeff();
    }
 
    void initialize_koeff()
    {
        line temp = *this;
        temp.x1 -= temp.x0;
        temp.y1 -= temp.y0;
 
        if(temp.x1)
        {
            koeff = static_cast<double> (temp.x1)/temp.y1;
        } else {
            koeff = 0;
            vertical = true;
        }
    }
 
    static bool compare(line a, line b)
    {
        if(b.vertical && a.vertical) return true;
        if(b.koeff == a.koeff) return true;
        return false;
    }
 
    bool compare(line a)
    {
        if(vertical && a.vertical) return true;
        if(koeff == a.koeff) return true;
        return false;
    }
 
};
 
void print_par_result(line a, line b)
{
    if(line::compare(a, b))
    {
        std::cout << "\nparallel;";
    } else {
        std::cout << "\nnot par";
    }
}
 
int main()
{
    line a(1,1,2,2);
    line b(4,4,7,7);
 
    line c(-1,-1, -1, 9);
 
    line d(5,99,5,-998);
 
    line e(0,0,2,2);
    line f(6,6,-1,-1);
 
    line x(-1,-2,-2,-3);
    line g(0,0,3,0);
    line h(2,2,4,2);
 
    print_par_result(a, b);
    print_par_result(a, c);
    print_par_result(d, c);
    print_par_result(e, f);
    print_par_result(e, b);
    print_par_result(e, d);
 
    print_par_result(g, h);
 
    system("pause");
    return 0;
}
Добавлено через 13 минут
Цитата Сообщение от Folian Посмотреть сообщение
koeff = static_cast<double> (temp.x1)/temp.y1;
Нет, сам накосячил с делением на ноль(хоть double это и съест). Разберусь завтра, а сейчас спать пора.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
22.06.2019, 01:22
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
#include <iostream>
using namespace std;
const int lcount = 3;
struct xy {
    double x, y;
} lines[lcount][2];
bool is_collinear(int first, int second)
{
    xy d1 = { lines[first][0].x - lines[first][1].x, lines[first][0].y - lines[first][1].y };
    xy d2 = { lines[second][0].x - lines[second][1].x, lines[second][0].y - lines[second][1].y };
 
    return d1.x*d2.y == d1.y*d2.x;
}
int main(){
    setlocale(LC_ALL, "Russian");
    char pt = 'A';
    for (int i = 0; i < lcount; ++i)
        for (int j = 0; j < 2; ++j, ++pt)
        {
            cout << "Введите координаты X и Y точки " << pt;
            cin >> lines[i][j].x >> lines[i][j].y;
        }
    for (int i = 0; i < lcount; ++i)
        for (int j = i+1; j < lcount; ++j)
            if (is_collinear(i, j))
                cout << char('A' + i * 2) << char('B' + i * 2)
                << " параллельна "
                << char('A' + i * 2) << char('B' + i * 2) << endl;
    cin.get();
    return 0;
}
Добавлено через 3 минуты
Folian, математики давным давно придумали хранить прямые не как y=kx+b, а как ax+by+c=0;
а вы тут всё с какими-то bool vertical трахаетесь
2
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
22.06.2019, 01:52
[quote="Kuzia domovenok;13673710"]
C++
1
2
3
4
5
6
bool is_collinear(int first, int second)
{
* * xy d1 = { lines[first][0].x - lines[first][1].x, lines[first][0].y - lines[first][1].y };
* * xy d2 = { lines[second][0].x - lines[second][1].x, lines[second][0].y - lines[second][1].y };
return d1.x*d2.y == d1.y*d2.x;
}[
/quote]
За это спасибо,
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ax+by+c=0;
Это я забыл, и трахаюсь с
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
какими-то bool vertical
как пятничный алкотормоз
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.06.2019, 02:18
Цитата Сообщение от neket99 Посмотреть сообщение
факт параллельности прямых, которые заданны координатами, а не факт равенства коэффициентов
странное противопоставление. прямые у=k1x+b1 и у=k2x+b2 параллельны если k1=k2

neket99, напишите условие задачи
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 24
22.06.2019, 02:29  [ТС]
Разработать функцию, определяющую факт параллельности прямых, заданных координатами двух точек на плоскости.Ввести три пары координат точек, задающих положение трёх прямых. Используя разработанную функцию найти среди них количество параллельных прямых. Так же забыл указать одно из условий этой задачи(важное),то что это должно быть через перегрузку функций.
Разработанная программа должна содержать функцию, выполняющую индивидуальное задание. При этом разработанная функция должна быть реализована 3 способами:
- как функция, возвращающая искомое значение;
- как функция, возвращающая искомое значение через дополнительный аргумент - указатель;
- как функция, возвращающая искомое значение через дополнительный аргумент - ссылку.
(поэтому могло показатся,что у меня много лишнего в проге(хотя там и так я много всего лишнего скорее всего написал)
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,252
22.06.2019, 12:12
посмотри это:
Определить могут ли 4 точки быть вершинами параллелограмма
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2019, 12:12
Помогаю со студенческими работами здесь

Определение параллельности прямых
uses System; const Eps = 1E-5; // Погрешность type TPoint = class(ICloneable, IEquatable&lt;TPoint&gt;) private _X, _Y:...

Дано множество точек на плоскости, заданных полярными координатами. Получить декартовы координаты этих точек
Получилось сделать для координаты одной точки, а как сделать для множества точек, через цикл или массив? #include &lt;stdio.h&gt; ...

Проверка параллельности прямых - найти ошибки в коде
Компилятор выдает синтаксические ошибки, помогите исправить. #include &lt;stdio.h&gt; #include &lt;math.h&gt; struct POINT { ...

Посчитать количество точек пересечения прямых (заданных коэффициентами своих уравнений)
Задано множество прямых на плоскости(коэффициентами своих уравнений). Посчитать количество точек пересечения этих прямых.

Обработка массива точек заданных их целочисленными координатами
а) удалить все точки из IV четверти б) подсчитать количество точек, лежащих на прямой y = x в) найти все наименее удалённые от начала...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru