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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Геомеьрическая задача
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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


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


Гость






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

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


я в задал условие, что (a*a+b*b)<>0
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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


Новичок
*

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

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


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


Гость






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

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

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


Новичок
*

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

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


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

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

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

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

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

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


Гость






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

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


Новичок
*

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

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


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


Гость






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

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

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


Новичок
*

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

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


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

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


Новичок
*

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

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


с переменной ничего не получается, а вот с массивом - всё класс!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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

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

 





- Текстовая версия 11.10.2024 15:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name