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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Геомеьрическая задача
Uriah
сообщение 8.10.2006 0:23
Сообщение #1


Новичок
*

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

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


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

Метод решения:
Пусть прямая задана уравнением ax+by+c=0, где a,b,c – коэффициенты в уравнении, входные данные, вещественные числа.
n – количество точек множества, входные данные, целое число.
(xi,yi)│i=1..n ─ координаты множества точек, входные данные, вещественные числа.
l ─ расстояния от заданной прямой до точек прямой, промежуточные данные, вещественные число
Ввод a,b,c.
Ввод n.
Для i от 1 до n вводим координаты точек множества (xi,yi), где i изменяется на единицу (i = i+1).
При (a*a+b*b)>0, находим расстояния от прямой до заданных точек:
l = (a*xi+b*yi+c)/sqrt(a*a+b*b)
Если (a*xi+b*yi+c)>0, то точка находится выше прямой, и тогда определяем какая точка находится ближе к прямой, путём сравнения расстояний от прямой до точек.
Выводим координаты точки ближайшей к прямой из точек, лежащих выше неё.
Если (a*xi+b*yi+c)<0, то точка находится ниже прямой, и тогда определяем какая точка находится ближе к прямой, путём сравнения расстояний от прямой до точек.
Выводим координаты точки ближайшей к прямой из точек, лежащих ниже неё.


Часть проги я написал: задал множество точек и нашёл расстояния от них до прямой,
необходимо токо кусок чтобы определить точку, ближайшую к прямой, из точек, лежащих выше прямой, и точку ближайшую к прямой, из точек, лежащих ниже. ПОМОГИТЕ, ктонить, ПОЖАЛУЙСТА!!!!!!!!! заранее БЛАГОДАРЕН!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 8.10.2006 13:19
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


для начала, приведи код уже написанного тобой.
а если прямая вертикальная - как считать "выше" и "ниже"?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 11.10.2006 15:36
Сообщение #3


Гость






Цитата(мисс_граффити @ 8.10.2006 13:19) *

для начала, приведи код уже написанного тобой.
а если прямая вертикальная - как считать "выше" и "ниже"?


я в задал условие, что (a*a+b*b)<>0
 К началу страницы 
+ Ответить 
Гость
сообщение 11.10.2006 16:00
Сообщение #4


Гость






вот часть исходника:

Код
program Mnogestvo;
uses Crt;
const n=5;
var a,b,c:real; i:integer;
      X: array [1..n] of real;
      Y: array [1..n] of real;
      l: real;
begin
ClrScr;
writeln ('Введите a,b,c');
readln (a,b,c);
for i:=1 to n do
begin
writeln ('Введите координаты', ' ', i, '-й точки множества');
readln (X[i],Y[i]);
end;
for i:=1 to n do
begin
if (a*a+b*b)<>0 then
l:= (a*X[i]+b*Y[i]+c)/sqrt (a*a+b*b);
writeln (l);
end;





readkey;
end.
 К началу страницы 
+ Ответить 
-Uriah-
сообщение 13.10.2006 17:11
Сообщение #5


Гость






Никто помочь не может?
 К началу страницы 
+ Ответить 
Uriah
сообщение 13.10.2006 17:24
Сообщение #6


Новичок
*

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

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


Подскажите хоть, пожалуйста, допустим я определ ближайшие расстояния до прямой, как мне обратно вівести координаты этих ближайших точек !low.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.10.2006 17:37
Сообщение #7


Гость






Цитата
как мне обратно вівести координаты этих ближайших точек
Ты же запоминаешь точки в массиве?

Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)...

А потом по запомненным индексам просто вытянешь из массива сами точки...
 К началу страницы 
+ Ответить 
Uriah
сообщение 13.10.2006 18:55
Сообщение #8


Новичок
*

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

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


Цитата(volvo @ 13.10.2006 17:37) *

Ты же запоминаешь точки в массиве?

Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)...

А потом по запомненным индексам просто вытянешь из массива сами точки...

я запоминаю точки в двух одномерных массивах x,y

и мне надо использовать l без индекса
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.10.2006 18:58
Сообщение #9


Гость






Тогда во-первых, объясни почему без индекса? Чтоб самому себе найти проблемы, а потом долго и упорно их решать?

А во-вторых, приведи, наконец программу (ПОЛНОСТЬЮ, а не отрывок из несущественностей, типа организации ввода), которую до сих пор сделал... Почему все считают, что кто-то должен повторить то же самое, что они уже наваяли? dry.gif КОМУ нужна помощь, наконец???
 К началу страницы 
+ Ответить 
Uriah
сообщение 13.10.2006 19:04
Сообщение #10


Новичок
*

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

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


l я взял сначала с индексом, но мой препод сказал исправить, чтоб было без него, говорит, что так прога занимает больше места, хотя я и не знаю как это организовать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.10.2006 19:19
Сообщение #11


Гость






А у тебя в задании что, где-то приведены ограничения по "занимаемому месту"? Я этого не нашел...

Извини, но используя ТОЛЬКО два одномерных массива и одну переменную, ты эту задачу НЕ решишь... По крайней мере еще или 6 переменных (4 для хранения координат (X, Y) точки с минимальным расстоянием "над прямой"/"под прямой" и 2 - для сохранения самого мин. значения тоже "над"/"под"), или индексы.

Насчет "занимает больше места" - ты что, ОБЕ программы ему показывал, и он сравнил размеры? Откуда он знает, ЧТО БУДЕТ занимать больше места? Он что, провидец?
 К началу страницы 
+ Ответить 
Uriah
сообщение 13.10.2006 19:26
Сообщение #12


Новичок
*

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

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


я учусь в инсте на программиста(1 курс). первая лаба была на разработку методов решения задачи, и я использовал l[i], и за это препод снял почти половину балов

за нерациональное решение задачи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Uriah
сообщение 14.10.2006 18:01
Сообщение #13


Новичок
*

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

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


с переменной ничего не получается, а вот с массивом - всё класс!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Uriah
сообщение 14.10.2006 19:17
Сообщение #14


Новичок
*

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

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


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



Код
program Mnogestvo;
uses Crt;
const n=5;
var a,b,c:real; i:integer;
      X: array [1..n] of real;
      Y: array [1..n] of real;
      l: real;
begin
ClrScr;
writeln ('Введите a,b,c');
readln (a,b,c);
for i:=1 to n do
begin
writeln ('Введите координаты', ' ', i, '-й точки множества');
readln (X[i],Y[i]);
end;
for i:=1 to n do
begin
if (a*X[i]+b*Y[i]+c)>0
then l[i]:= a*X[i]+b*Y[i]+c;
end;
if l[i]>0 then
begin
for i:=1 to n do
begin
if (a*X[i+1]+b*Y[i+1]+c)<l[i] then
l[i]:= a*X[i+1]+b*Y[i+1]+c;
end;
writeln (l[i]);
writeln (i);
writeln (X[i],Y[i]);
end;


readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Uriah
сообщение 14.10.2006 20:01
Сообщение #15


Новичок
*

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

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


помогите плиз
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Uriah
сообщение 14.10.2006 21:00
Сообщение #16


Новичок
*

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

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


не понимаю в чём ошибка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.10.2006 21:35
Сообщение #17


Гость






Цитата
не понимаю в чём ошибка
В том, что ты определил переменную L как Real, а пытаешься обратиться к ней - как к массиву. Поэтому программа и не компилируется...
 К началу страницы 
+ Ответить 
Uriah
сообщение 15.10.2006 11:44
Сообщение #18


Новичок
*

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

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


это я здесь при записи ошибся, а так она и записана как массив, а всё-равно не работает
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.10.2006 12:04
Сообщение #19


Гость






А здесь должно быть то же самое, что и у тебя, иначе вся тема просто будет снесена напрочь, как переливание из пустого в порожнее. Нужна помощь - давай ПРАВИЛЬНЫЙ код. Не даешь - тему в мусор. Надоело уже сюсюкаться тут с такими как ты! mad.gif
 К началу страницы 
+ Ответить 
Uriah
сообщение 15.10.2006 12:56
Сообщение #20


Новичок
*

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

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


извините,пожалуйста.
Помогите плиз
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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