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

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

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

> Принадлежность точки отрезкам., Заданы N отрезков с координатами концов.
sergey121212
сообщение 11.11.2011 1:46
Сообщение #1


Новичок
*

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

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


Вообщем не пойму саму суть определения...
const n=3;
var i,x,k:integer;
a,b:array[1..n] of real;
begin
for i:=1 to n do
begin
writeln('Введите начало ',i,' отрезка');
readln(a[1]);
writeln('Введите конец ',i,' отрезка');
readln (b[1]);
end;
k:=0;
for i:=1 to n do
if (x>=a[i]) and (x<=b[i]) then
k:=k+1;
writeln(k);
if k=n then writeln('Да')
else
writeln ('Нет');
end.


Изображение



Думаю как-то так , хотя тут проверка пока-что только 2 отрезка...

const n=3;
type point=record
x,y:real;
end;
otr=record
k1,k2:point;
end;
var i:integer;
t:array[1..n] of otr;
x,y:real;


procedure ras(t1,t2:otr;var x,y:real);
begin
x:=((t1.k1.x*t1.k2.y-t1.k2.x*t1.k1.y)*(t2.k1.x-t2.k1.x)-(t2.k1.x*t2.k2.y-t2.k2.x*t2.k1.y)*(t1.k2.x-t1.k1.x))/((t1.k1.y-t1.k2.y)*(t2.k2.x-t2.k1.x)-(t2.k1.y-t2.k2.y)*(t1.k2.x-t1.k1.x));
y:=((t2.k1.y-t2.k2.y)*x-(t2.k1.x*t2.k2.y-t2.k2.x*t2.k1.y))/(t2.k2.x-t2.k1.x);
end;

begin
writeln('Введите координаты отрезков:');
for i:=1 to n do
begin
writeln('Отрезок #',i);
write('x1=');readln(t[i].k1.x);
write('y1=');readln(t[i].k1.y);
write('x2=');readln(t[i].k2.x);
write('y2=');readln(t[i].k2.y);
end;
ras(t[1],t[2],x,y);
if (((t[1].k1.x<=x)and(t[1].k2.x>=x)and(t[2].k1.x<=x)and(t[2].k2.x >=x))or((t[1].k1.y<=y)and(t[1].k2.y>=y)and(t[2].k1.y<=y) and(t[2].k2.y>=y))) then
writeln('Есть точка пересечения ! ')
else writeln('Нет точки пересечения ! ');

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 11.11.2011 9:31
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Там очень простая суть.
Проверяем в цикле все отрезки и считаем, сколько из них содержит эту точку (то есть левый край лежит слева от этой точки, а правый - справа от нее). Если это количество равно n (то есть числу ВСЕХ отрезков), то то все они содержать эту точку..
Все, мне, кажется, прозрачно. Нарисуй себе числовую ось и пометь на ней отрезки (разными цветами) - и все поймешь.

А твой код - судя по тому, что в нем мелькают игреки - по-видимому, призван реализовывать двумерную версию задачи. В условии ничего не сказано про количество измерений пространства. Так что ты уточни, что тебе нужно - двумерный случай или одномерный (а может, трехмерный..)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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