Форум программистов, компьютерный форум CyberForum.ru

Пересекаются ли отрезки - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.93
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 19:39     Пересекаются ли отрезки #1
Даны три различных числа. Среднее из них заменить суммой квадратов, большее ― квадратом суммы меньшего и среднего, меньшее оставить без изменения.


Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D –координаты отрезков
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 19:46     Пересекаются ли отрезки #2
Цитата Сообщение от КИК Посмотреть сообщение
Среднее из них заменить суммой квадратов
Я правильно понял: если среднее число = с, то его заменяем так c=c^2+c^2 ?
И по второй задаче:

Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D –координаты отрезков
Вообще-то по моим понятиям (и не только по моим) [A,B] и [C,D] - это две точки, а значит один отрезок. Или Вы имели ввиду ввод дважды в переменные A,B,C,D и вывод результата: пересекаются ли отрезки или нет?
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 19:55  [ТС]     Пересекаются ли отрезки #3
ну вобще то мне нужно написать это в С++
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 20:01     Пересекаются ли отрезки #4
Я понял, нужно написать на С++. Но только ответьте на мои предыдущие вопросы.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
20.10.2009, 20:04     Пересекаются ли отрезки #5
Никому не рекомендую браться за вторую задачу, пока условие не сузится, например, до такого:

Любые три конца отрезков гарантированно не лежат на одной прямой.

Я как-то решал по дури- перебирал ВСЕ варианты взаимного расположения 4-х точек. 7 потов сошло. А всё почему? А потому, что предполагалолсь, что какой-то дурик будет вводить некорректные данные, например: три точки лежат на одной прямой или две точки совпадают ну и так далее.
И все эти варианты я учитывал.
Ну его, знаете ли.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 20:14     Пересекаются ли отрезки #6
kravam,
Я попробую.
Кстати, вот предварительный алгоритм, который думаю использовать в этой задаче (думаю подошло бы и к Вашей задаче). Составляем функции прямых линий по заданым точкам. Ищем точку пересечения этих прямых линий (Если она существует). Потом определяем принадлежит ли эта точка отрезку одному, а потом второму. Если принадлежит обоим то да, если хоть одному не принадлежит то нет.
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 20:38  [ТС]     Пересекаются ли отрезки #7
ну если получится отошлете мне решение

Добавлено через 1 минуту
valeriikozlov на счет точе А это отдельная точка так же В и С и Д
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
20.10.2009, 20:39     Пересекаются ли отрезки #8
Угу
Если все 4 точки лежат на одной прямой, то существует столько вариантов взаимного расположения отрезков:
1) Отрезки совпадают
2) У отрезков нет общих точек
3) У отрезков есть одна общая точка
4) Один отрезок полностью лежит внутри другого
5) Один отрезок частично лежит внутри другого
6) Отрезки имеют как совпадающие, так и не совпадающие части.

Это всё нужно оговорить.
Это. заметь, я предполагал, что ни один отрезок не равен нулю.
Ну и так далее
В общем, работы непочатый край. И чтобы её избежать всего-то и нужно- сузить условие до разумного.
Ну, твоё дело
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 20:46  [ТС]     Пересекаются ли отрезки #9
я просто первокурсник не понимаю об чем выговорите решите как сможете сузьте как надо
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 20:47     Пересекаются ли отрезки #10
КИК,
Еще раз:
Цитата:Сообщение от КИК
Среднее из них заменить суммой квадратов

Я правильно понял: если среднее число = с, то его заменяем так c=c^2+c^2 ?
И по второй задаче:

Цитата:Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D –координаты отрезков

Вообще-то по моим понятиям (и не только по моим) [A,B] и [C,D] - это две точки, а значит один отрезок. Или Вы имели ввиду ввод дважды в переменные A,B,C,D и вывод результата: пересекаются ли отрезки или нет?

kravam,
Если отрезки лежат на одной прямой, то линии (созданые на основе этих отрезков) пересекаются ("точка" их пересечения является линией). Если это так то берется интервал равный одному отрезку и сравнивается с интервалом второго отрезка. Если они имеют хотя бы частичное пересечение (или может быть правильнее сказать "сочетание"), то то как раз интервал принадлежащий обоим отрезкам и есть решение.
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 20:51  [ТС]     Пересекаются ли отрезки #11
по моему пересечение двух отрезков это не линия а точка
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 21:00     Пересекаются ли отрезки #12
Цитата Сообщение от КИК Посмотреть сообщение
по моему пересечение двух отрезков это не линия а точка
Бывает что и линия.
Так все-таки:
Цитата Сообщение от КИК Посмотреть сообщение
A,B,C,D –координаты отрезков
A - мне рассматривать например как (10,20)? (и также рассматривать B,C,D).
КИК
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 6
20.10.2009, 21:05  [ТС]     Пересекаются ли отрезки #13
я не знаю сам не понимаю ничего ну рассмотри так как хочешь
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 21:30     Пересекаются ли отрезки #14
1 задача:
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
#include <iostream.h>
#include <Windows.h>
#include <process.h>
int a, b, c, temp;
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        cout<<"Ââåäèòå ïåðâîå ÷èñëî\n";
        cin>>a;
        cout<<"Ââåäèòå âòîðîå ÷èñëî\n";
        cin>>b;
        cout<<"Ââåäèòå òðåòüå ÷èñëî\n";
        cin>>c;
        if(a<b && b<c)
        {
            temp=c;
            c=a;
            a=temp;
        }
        if(a<c && c<b)
        {
            temp=b;
            b=a;
            a=temp;
        }
        if(b<c)
        {
            b=temp;
            b=c;
            c=temp;
        }
        a=(b+c)*(b+c);
        cout<< "Áîëüøåå ÷èñëî (Г§Г*ìåГ*ГҐГ*Г® ГЄГўГ*äðГ*òîì ñóììû ìåГ*ГјГёГҐГЈГ® ГЁ ñðåäГ*ГҐГЈГ®): "<<a<<endl;
        b=b*b+b*b;
        cout<< "ÑðåäГ*ГҐГҐ ÷èñëî (Г§Г*ìåГ*ГҐГ*Г® ñóììîé ГЄГўГ*äðГ*òîâ): "<<b<<endl;
        cout<< "ГЊГҐГ*ГјГёГҐГҐ ÷èñëî (îñòГ*âëåГ*Г® ГЎГҐГ§ èçìåГ*ГҐГ*ГЁГ©): "<<c<<endl;
        system("pause");
        return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.10.2009, 06:22     Пересекаются ли отрезки #15
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
89
90
91
92
93
94
#include <iostream.h>
#include <Windows.h>
#include <process.h>
struct koor{ double a, b;};
double A1, A2, B1, B2, C1, C2, x, y, mas[4], temp;
int i, j;
bool r;
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        koor A, B, C, D;
        cout<<"Ââåäèòå êîîðäèГ*Г*ГІГ» òî÷êè A\n";
        {
        cin>>A.a>>A.b;
        mas[0]=A.a;
        }
        cout<<"Ââåäèòå êîîðäèГ*Г*ГІГ» òî÷êè B\n";
        {
        cin>>B.a>>B.b;
        mas[1]=B.a;
        }
        cout<<"Ââåäèòå êîîðäèГ*Г*ГІГ» òî÷êè C\n";
        {
        cin>>C.a>>C.b;
        mas[2]=C.a;
        }
        cout<<"Ââåäèòå êîîðäèГ*Г*ГІГ» òî÷êè D\n";
        {
        cin>>D.a>>D.b;
        mas[3]=D.a;
        }
        A1=A.b-B.b;
        B1=B.a-A.a;
        C1=A.a*B.b - B.a*A.b;
        A2=C.b-D.b;
        B2=D.a-C.a;
        C2=C.a*D.b - D.a*C.b;
        r=true;
        if(A1*B2-A2*B1==0)
        {
            if(A1/A2==B1/B2 && A1/A2==C1/C2)
            {
                for(i=0; i<3; i++)
                    for(j=0; j<3-i; j++)
                        if(mas[j]>mas[j+1])
                        {
                            temp=mas[j];
                            mas[j]=mas[j+1];
                            mas[j+1]=temp;
                        }
                if((A.a<=C.a && A.a>=D.a) || (A.a>=C.a && A.a<=D.a) || (B.a<=C.a && B.a>=D.a) || (B.a>=C.a && B.a<=D.a) || (A.a<C.a && B.a>C.a))
                    cout<<"Ïåðåñå÷åГ*ГЁГҐ îòðåçêîâ ÿâëÿåòñÿ ëèГ*ГЁГҐГ© Гў ïðîìåæóòêå Г± Гµ="<<mas[1]<<" ГЇГ® x="<<mas[2]<<endl;
                else
                    cout<<"Ïåðåñå÷åГ*ГЁГї Г*ГҐГІ"<<endl;
            }
            else
                cout<<"Ïåðåñå÷åГ*ГЁГї Г*ГҐГІ"<<endl;
        r=false;
        }
        else
        {
            x=(C1*B2-C2*B1)/(A1*B2-A2*B1)*-1;
            y=(A1*C2-A2*C1)/(A1*B2-A2*B1)*-1;
            if(A.a<B.a && C.a<D.a)
                if(x>=A.a && x<=B.a && x>=C.a && x<=D.a)
                {
                    cout<<"Ïðÿìûå ïåðåñåêГ*ГѕГІГ±Гї Гў òî÷êå x="<<x<<"   y="<<y<<endl;
                    r=false;
                }
            if(A.a<B.a && C.a>D.a)
                if(x>=A.a && x<=B.a && x<=C.a && x>=D.a)
                {
                    cout<<"Ïðÿìûå ïåðåñåêГ*ГѕГІГ±Гї Гў òî÷êå x="<<x<<"   y="<<y<<endl;
                    r=false;
                }
            if(A.a>B.a && C.a<D.a)
                if(x<=A.a && x>=B.a && x>=C.a && x<=D.a)
                {
                    cout<<"Ïðÿìûå ïåðåñåêГ*ГѕГІГ±Гї Гў òî÷êå x="<<x<<"   y="<<y<<endl;
                    r=false;
                }
            if(A.a>B.a && C.a>D.a)
                if(x<=A.a && x>=B.a && x<=C.a && x>=D.a)
                {
                    cout<<"Ïðÿìûå ïåðåñåêГ*ГѕГІГ±Гї Гў òî÷êå x="<<x<<"   y="<<y<<endl;
                    r=false;
                }
        }
        if(r)
            cout<<"Ïåðåñå÷åГ*ГЁГї Г*ГҐГІ"<<endl; 
        system("pause");
        return 0;
}
Хотел бы остановиться на вводе данных. Например на экране написано: "Введите координаты точки A", нужно ввести соответственно два числа. Можно например так: 10enter, 20enter. А можно и так (через пробел): 10 20enter.
Программа работает, единственное не польностью проработанное направление - в случае если два отрезка на одной линии и имеют общий интервал, то этот интервал выводится на экран только ввиде значений 'x'

Добавлено через 18 минут
Всегда времени не хватает, пора бежать на работу:
Строку 52 моего кода замените на:
C++
1
if((A.a<=C.a && A.a>=D.a) || (A.a>=C.a && A.a<=D.a) || (B.a<=C.a && B.a>=D.a) || (B.a>=C.a && B.a<=D.a) || (A.a<C.a && B.a>C.a) || (A.a>C.a && B.a<C.a))
Air_life
 Аватар для Air_life
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
22.10.2009, 01:56     Пересекаются ли отрезки #16
Всем привет! Кто нибудь имеет ту же программу на Си? Могли бы помочь написать, пожалуйста.. На С++ не понимаю совсем.. =( Благодарю заранее

Добавлено через 34 секунды
* Программа с пересечением отрезков
oxotnik
 Аватар для oxotnik
1585 / 1062 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
22.10.2009, 10:53     Пересекаются ли отрезки #17
она и есть на С
Air_life
 Аватар для Air_life
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
22.10.2009, 11:08     Пересекаются ли отрезки #18
хах =) тогда извиняюсь за глупый вопрос.. половина команд для меня тут просто неизвестна...я только 2ю неделю учу язык Си

Добавлено через 10 минут
Можно тогда несколько глупых вопросов по программке:
1)за что отвечают SetConsoleCP(1251) и SetConsoleOutputCP(1251);
2)как часто в программах употребляется cout<<"xxx"<<endl; и в чем преимущество перед printf("");
3) что такое cin>>c;
4)что такое struct koor{ double a, b;};
Спасибо заранее за объяснение и еше раз извиняюсь за глупые аопросы =)
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
22.10.2009, 11:22     Пересекаются ли отрезки #19
Air_life,
... я только 2ю неделю учу язык Си ...

... Можно тогда несколько глупых вопросов по программке: ...

то есть за 2 недели ты так и не удосужился открыть учебник и почитать его? интересно, а как ты тогда "учишь"?
3 и 4 - лень пересказывать ответы из учебника (:
2 - преимущество - в type-safety а также гоогле cout vs printf
1 - для вывода в консоль кириллицы, для тех, кто не умеет это делать через локали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2009, 11:43     Пересекаются ли отрезки
Еще ссылки по теме:

Отрезки C++
C++ Пересекаются ли кривая
Выяснить, пересекаются ли параболы C++
Подсчитать единичные отрезки C++
Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D – координаты отрезков на числовой оси (ответ- да или нет) C++

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

Или воспользуйтесь поиском по форуму:
Air_life
 Аватар для Air_life
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
22.10.2009, 11:43     Пересекаются ли отрезки #20
хмммм.. спасибо за ответ =) учебник читаю, вот только до многих команд еще просто не дошла.. программировала на Паскале, теперь на Си,.. Вроде как логика понятна, а лексикон совсем разный... так и учимся всему и понемногу..

Добавлено через 14 минут
ПО-моему, исходник программы на С++.. в учибнике по Си половина команд просто нет, да и вижу я их впервые
Yandex
Объявления
22.10.2009, 11:43     Пересекаются ли отрезки
Ответ Создать тему
Опции темы

Текущее время: 17:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru