IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Отрезки имеющие общие точки, Геометрия
Рустам
сообщение 25.05.2009 18:49
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Даны действительные числа a1..a50 эти числа определяют 25 интервалов числовой оси
(a1,a2) , (a3,a4) и тд.
имеют ли все данные интервалы общие точки, если да то указать какую нибудь из этих точек



Прошу доделать эту прогу пожалуйста,вроде бы на мой взгляд осталось немного, но категорически не успеваю

uses crt;
const n=4; {для примера рассматривал 4 интервала только}
var
a: array[1..2,1..n] of integer;
i,j,k: integer;

b: array [1..2] of integer;
begin
clrscr;

for i:=1 to n do begin
writeln('x,y');
for j:=1 to 2 do begin

readln(a[i,j])
end;
end;


for i:=1 to n do begin

for j:=1 to 2 do begin
write(a[i,j]:3);
end;
writeln;
end;

{раз все интервалы могут иметь общую точку то достаточно взять один интервал первый например и сравнить со всеми}
for i:=2 to n do
begin
if (a[1,1]<a[i,1]) and (a[1,2]<a[i,2]) and (a[1,2]>a[i,1]) {если первый лежит чуть левее}
then
begin
b[1]:=a[i,1]; b[2]:=a[1,2];

if (a[1,1]>a[i,1]) and (a[1,2]>a[i,2]) and (a[i,1]<a[i,2]){если первый интервал лежит чуть правее}
then
begin
if b[2]<a[i,2] then b[2]:=a[i,2];
if b[1]<a[1,1] then b[1]:=a[1,1];
end;

if (a[1,1]<a[i,1]) and (a[2,2]>a[i,2]) then begin {если первый интервал содержит следующий}
b[1]:=a[i,1];
b[2]:=a[i,2];
end;

if (a[1,1]>a[i,1]) and (a[2,2]<a[i,2]) then begin {если первый интервал содержится в следующем}
b[1]:=a[1,1];
b[2]:=a[2,2];
end;
end;

readkey;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 25.05.2009 19:57
Сообщение #2


Гость






А если без такого количества сравнений? Просто взять, первый интервал запомнить как общий интервал (очевидно, что если есть общая точка, то она должна принадлежать и первому интервалу, правда?), а начиная со второго - смотреть: если начало очередного интервала (назовем его A[ i ]) лежит правее начала общего - то новым началом общего интервала станет точка A[ i ]. Если конец нового интервала (назовем его A[j]) левее конца общего - то новым концом общего интервала станет A[j]... В конце - проверить, если начало общего интервала лежит правее конца, то общие точки есть, и взять любую из них. Если же начало левее конца - то общих точек нет...

Это все - на правах догадки... Хотя, по-моему, должно сработать...

Вкралась ошибка, выделенное красным слово раньше было "правее"

Сообщение отредактировано: volvo - 25.05.2009 20:18
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 10:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"