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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lester
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 5
#1

Числовые прямые (имеется ли у отрезков общая часть не нулевой длинны?) - C++

13.01.2013, 17:42. Просмотров 766. Ответов 7
Метки нет (Все метки)

Здравствуйте! Помогите пожалуйста решить задачу. Сижу, карпею над учебниками, но боюсь что к завтрашнему мне не осилить. Очень надеюсь на вашу помощь форумчане.
Задача:
На вещественной числовой оси заданы два отрезка /a1, b1/ и /а2, b2/. Составить программу, которая вводит исходные данные, и определяет имеется ли у этих отрезков общая часть не нулевой длинны.
Примечание: в исходных данных концы отрезков могут быть заданы в произвольном порядке. Например один отрезок может задаваться как [4,3] так и [3,4].
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 17:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Числовые прямые (имеется ли у отрезков общая часть не нулевой длинны?) (C++):

Логика. Числовые прямые - Информатика
Учусь в 9 классе, посоветовали решить и разобраться с выполнением данных уравнений. Только знаний самому решить не хватает, в голове мутно....

Общая точка двух отрезков - Pascal
Имя входного файла input.txt Имя выходного файла output.txt Максимальное время работы на одном тесте 2 секунды Ограничение по...

Общая точка двух отрезков - Геометрия
Есть 2 отрезка с одним общим концом, длина отрезков известна, координаты других концов известны. Как найти общую точку?

Проверить, существует ли общая точка у двух отрезков - C (СИ)
пользователь задаёт координаты концов отрезков, а программа должна определить есть ли у них общая точка. помогите плис

Идеальный поезд нулевой длинны передвигается по туннелю исключительно от силы гравитации - Физика
Здравствуйте. Помогите пожалуйста осуществить расчеты. Планета(сфера). Даны две точки географических координат. Из точки А в точку Б...

Общая часть строки (абзаца) через класс - HTML, CSS
Хотелось бы задать класс абзаца или элемента списка, чтобы к каждой строке, "помеченной" этим классом добавлялся конкретный символ. Или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3155 / 1957 / 218
Регистрация: 13.01.2012
Сообщений: 7,486
13.01.2013, 18:39 #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
#include <iostream>
int main(void)
{
    double a1, b1, a2, b2;
 
    std::cout << "a1: ";
    std::cin >> a1;
 
    std::cout << "b1: ";
    std::cin >> b1;
 
    std::cout << "a2: ";
    std::cin >> a2;
 
    std::cout << "b2: ";
    std::cin >> b2;
 
    double _a1, _b1, _a2, _b2;
 
    if (a1 > b1)
    {
        _a1 = b1;
        _b1 = a1;
    }
    else
    {
        _a1 = a1;
        _b1 = b1;
    }
 
    if (a2 > b2)
    {
        _a2 = b2;
        _b2 = a2;
    }
    else
    {
        _a2 = a2;
        _b2 = b2;
    }
 
    double a, b;
 
    a = _a2 > _a1? _a2 : _a1;
    b = _b2 < _b1? _b2 : _b1;
 
    if (a > b) std::cout << "no" << std::endl;
    else std::cout << "yes: " << a << ", " << b << std::endl;
 
    return 0;
}
Lester
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 5
14.01.2013, 12:02  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
    double a, b;
 
    a = _a2 > _a1? _a2 : _a1;
    b = _b2 < _b1? _b2 : _b1;
 
    if (a > b) std::cout << "no" << std::endl;
    else std::cout << "yes: " << a << ", " << b << std::endl;
 
    return 0;
}
программа будет работать некорректно. Что если один отрезок вложен в другой? Тернарная операция отражает не все случаи. А вот как сделать правильно что-то не допру никак. (((
vxg
Модератор
3155 / 1957 / 218
Регистрация: 13.01.2012
Сообщений: 7,486
14.01.2013, 12:08 #4
укажите a1 b1 a2 b2 при которых программа дает неверный результат
Lester
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 5
14.01.2013, 13:06  [ТС] #5
вот моя версия, вроде разобрался с вашей помощью.Вроде всё работает правильно:
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <map>
#include <string>
 
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "rus");
    cout << "Программа нахождения общей части отрезков" << endl;
 
    float n1 = 0, 
          n2 = 0,
          m1 = 0,
          m2 = 0,
          N,
          K;
    cout << "Первый интервал: " << endl;
    do 
    {
    cin >> n1;
    cin >> n2;
        if (n1 == n2)
            cout << "Введён нулевой отрезок. Повторите ввод!" << endl;
    }  while (n1 == n2);
 
        if (n1 > n2)
            {
            n2 = n1 + n2;
            n1 = n2 - n1;
            n2 = n2 - n1;
            }
            cout << "["<< n1 << "," << n2 << "]" << endl;
 
    cout << "Второй интервал: " << endl;
    do 
    {
    cin >> m1;
    cin >> m2;
        if (m1 == m2)
            cout << "Введён нулевой отрезок. Повторите ввод!" << endl;
    }  while (m1 == m2);
 
            if (m1 > m2)
            {
                m2 = m1 + m2;
                m1 = m2 - m1;
                m2 = m2 - m1;
            }
            cout << "["<< m1 << "," << m2 << "]" << endl;
 
    N = m1 < n2? m1 : 0;
    N = m1 <=n1? n1 : m1;
    K = m2 < n2? m2 : n2;
 
    if (N == K || n2 <= m1 || n1 >= m2|| m2 <= n1 || m1 >= n2 ||N == 0 )
         cout << "отрезки не имеют общей части." << endl;
    else cout << "общий отрезок: " << "[" << N << "," << K << "]" << endl;
        
 
    system ("pause >> VOID"); // ВПРАВО!
    return 0;
}
vxg
Модератор
3155 / 1957 / 218
Регистрация: 13.01.2012
Сообщений: 7,486
14.01.2013, 13:11 #6
и все-таки если не сложно укажите a1 b1 a2 b2 при которых предыдущий вариант программы дает неверный результат

Добавлено через 18 секунд
...или при котором вам показалось что он дает неверный результат
Lester
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 5
14.01.2013, 14:59  [ТС] #7
Цитата Сообщение от vxg Посмотреть сообщение
и все-таки если не сложно укажите a1 b1 a2 b2 при которых предыдущий вариант программы дает неверный результат

Добавлено через 18 секунд
...или при котором вам показалось что он дает неверный результат
если один отрезок вложен в другой
vxg
Модератор
3155 / 1957 / 218
Регистрация: 13.01.2012
Сообщений: 7,486
14.01.2013, 15:02 #8
все выводит. дайте конкретные значения на которых у вас затык
http://codepad.org/5yU5FOKw
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 15:02
Привет! Вот еще темы с ответами:

Заданы две прямые. Найти точку их пересечения (если таковая имеется). для простоты решения вид прямых y=kx+b - Turbo Pascal
Заданы две прямые. Найти точку их пересечения (если таковая имеется). для простоты решения вид прямых y=kx+b. Или просто помогите...

Конструктор копирования и оператор присваивания - общая часть, выделять ли в отдельный метод - C++
Как лучше? // конструктор копирования Fraction::Fraction( const Fraction&amp; rhs ) { // инициализируем данными параметра функции и...

Двумерный массив. Подсчитать количество строк, в которых имеется хотя бы 1 нулевой элемент - Turbo Pascal
СП подсчета строк двумерного массива A(N,M), в которых имеется хотя бы 1 нулевой элемент. Сделал программу, вылетает Type mismatch на 10...

Подсчитать строки двумерного массива, в которых имеется хотя бы один нулевой элемент - Pascal ABC
Условие задачи:составить программу подсчета строк двумерного массива A(N,M), в которых имеется хотя бы один нулевой элемент. В чем именно...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.01.2013, 15:02
Ответ Создать тему
Опции темы

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