Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 15
1

Пересечение отрезков на одной прямой

28.11.2014, 21:38. Показов 9183. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача 1
Даны целое n>2 и вещественные числа a1, b1, ..., an, bn (ai < bi).
Рассматривая пары ai и bi как левые и правые концы отрез-
ков на одной и той же прямой, определить концы отрезка,
являющегося пересечением всех этих отрезков. Если такого
отрезка нет, сообщить об этом. Например, если n = 3 и a1 = 0,
b1 = 10, a2 = 1, b2 = 11, a3 = –1, b3 = 5, то результатом будет
отрезок [1, 5].

(Текст второй задачи удалён)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2014, 21:38
Ответы с готовыми решениями:

Пересечение отрезков
Как проверить пересечение отрезков? Т.е. координаты не нужны. Всё что делал - не работает когда...

Пересечение отрезков на прямой
На прямой задано n отрезков координатами своих концов , i = 1, n. Имеют хотя бы два отрезка...

Пересечение N отрезков на числовой прямой
Даны N отрезков на числовой прямой с их правой и левой координатой (Lx и Rx) в произвольном...

Пересечение двух отрезков на числовой прямой
Пересечение двух отрезков и на числовой прямой. Найти красивое решение, то есть наиболее ясное и...

11
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
28.11.2014, 21:44 2
Правила форума: Одна тема - одна задача!
И не надо пихать свои задачи в чужие темы! (Дана строка символов. Преобразовать ее, заменив в ней каждую точку многоточием)
0
Cyborg Drone
29.11.2014, 06:26
  #3

Не по теме:

Вопрос из чужой темы был выделен в отдельную тему: Заменить в строке все восклицательные знаки точками

0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
29.11.2014, 09:00 4
Лучший ответ Сообщение было отмечено Безнадега как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
n,i,min,max:integer;
a,b:array[1..100]of integer;
f:boolean;
begin
readln(n);
for i:=1 to n do
readln(a[i],b[i]);
min:=a[1];
max:=b[1];
for i:=1 to n do
begin
if a[i]>min then min:=a[i];
if b[i]<max then max:=b[i];
end;
f:=true;
for i:=1 to n do
begin
if min>b[i]then f:=false;
if max<a[i]then f:=false;
end;
if f then writeln(min,' ',max)else writeln('no solution');
end.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.11.2014, 09:09 5
Лучший ответ Сообщение было отмечено Безнадега как решение

Решение

Pascal
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
uses crt;
var n,i:integer;
    a,b,x1,x2:real;
    f:boolean;
begin
clrscr;
repeat
write('Количество отрезков >2  n=');
readln(n);
until n>2;
f:=false;
repeat
writeln('Введите концы первого отрезка a<b');
readln(x1,x2);
until x1<x2;
writeln('Введите концы остальных отрезков');
for i:=2 to  n do
 begin
  repeat
  writeln('Введите концы ',i,' отрезка a<b');
  readln(a,b);
  until a<b;
  if ((a>=x1)and(a<x2))or((b>x1)and(b<=x2)) then
   begin
    f:=true;
    if a>x1 then x1:=a;
    if b<=x2 then x2:=b;
   end;
 end;
if not f then write('Пересечения нет')
else write('Концы отрезка пересечения х1=',x1:0:2,' x2=',x2:0:2);
readln
end.
1
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 15
29.11.2014, 20:56  [ТС] 6
А можно еще блок схему пожалуйста?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.11.2014, 21:05 7
Лучший ответ Сообщение было отмечено Безнадега как решение

Решение

В редакторе по коду
Миниатюры
Пересечение отрезков на одной прямой  
1
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 10
26.03.2018, 22:33 8
Добрый день.
Подскажите, как можно подправить код, чтобы была проверка пересечения искомого отрезка со всеми отрезками? Как я понимаю, сейчас, если есть два отрезка которые пересекаются, то будет вычислен отрезок этого пересечения.
Полдня убил, никак не догнал...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2018, 06:52 9
Pascal
1
if ((a>=x1)and(a<x2))or((b>x1)and(b<=x2)) then
Это и есть проверка.
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 10
27.03.2018, 12:59 10
Puporev, Да, это я понимаю, но если для примера ввести 3 отрезка: (1,5), (4,6) и (7,9), то будет найден отрезок (4,5). Но в условии задачи необходимо чтобы все концы отрезков пересекались, отрезок (7,9) не пересекается, для этого примера должно сработать "not f", но оно почему то не срабатывает.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2018, 13:08 11
Цитата Сообщение от Mislap Посмотреть сообщение
но оно почему то не срабатывает
Наверное потому что код написан неверно, я вот свой код проверил, точно неверно, выдает ответ 4, 5, что конечно же неверно, видимо в голове на тот момент сидело найти наибольшее пересечение, но не всех отрезков.
А код кот Бегемот, показывает правильный ответ.
1
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 10
29.03.2018, 01:59 12
Puporev, Недавно начал изучать Паскаль, хотел изучить на вашем примере, используя только циклы. Получилось вот так. Вроде сейчас считает правильно, но не уверен. Не подскажите, что можно улучшить в коде?

Добавлено через 29 минут

Добавлено через 18 минут
Pascal
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
var 
  Y:integer=0; Z:integer=0; 
  n,i:integer;
  a,b,x1,x2:real;
  f:boolean;
begin
repeat
write('Количество отрезков >2  n=');
readln(n);
until n>2;
repeat
writeln('Введите концы первого отрезка a<b');
readln(x1,x2);
until x1<x2;
writeln('Введите концы остальных отрезков');
 
for i:=2 to n do
 begin
  repeat
  writeln('Введите концы ',i,' отрезка a<b');
  readln(a,b);
  until a<b;
  f:=false;
  if ((a>=x1)and(a<x2))or((b>x1)and(b<=x2)) or ((a<x1) and (b>x2)) then
   begin
    f:=true;
    if (a>=x1) then x1:=a
    else Y:=Y+1;
    if (a<x1) and (b>x1) then Y:=Y-1;
    if b<=x2 then x2:=b
    else Z:=Z+1;
    if (b>x2) and (a<x2) then Z:=Z-1;
   end;
 end;
if ((Y>0) or (Z>0) or (not f)) then writeln('Пересечения нет')
else writeln('Концы отрезка пересечения х1=',x1:0:2,' x2=',x2:0:2);
write (Y,Z,F);
end.
0
29.03.2018, 01:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2018, 01:59
Помогаю со студенческими работами здесь

проверить n отрезков (на прямой) на пересечение k из них
Даны n, k и t. Дан массив отрезков (длины n) на прямой, заданный в произвольной форме. ...

Построение множества отрезков на одной прямой
program tardis; uses GraphABC; Var i,x,y :integer; begin x:=1; y:=1; line(5,400,5,5);...

Доказать, что середины отрезков AC, BD и PQ принадлежат одной прямой
Дан тетраэдр ABCD, точки P и Q делят отрезки AB и CD в отношении 1:3. Доказать, что середины...

На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков
Помогите пожалуйста понять, что от меня хотят и какой(как) разработать алгоритм для решения этой...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru