Геомеьрическая задача |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Геомеьрическая задача |
Uriah |
Сообщение
#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, то точка находится ниже прямой, и тогда определяем какая точка находится ближе к прямой, путём сравнения расстояний от прямой до точек. Выводим координаты точки ближайшей к прямой из точек, лежащих ниже неё. Часть проги я написал: задал множество точек и нашёл расстояния от них до прямой, необходимо токо кусок чтобы определить точку, ближайшую к прямой, из точек, лежащих выше прямой, и точку ближайшую к прямой, из точек, лежащих ниже. ПОМОГИТЕ, ктонить, ПОЖАЛУЙСТА!!!!!!!!! заранее БЛАГОДАРЕН! |
мисс_граффити |
Сообщение
#2
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
для начала, приведи код уже написанного тобой.
а если прямая вертикальная - как считать "выше" и "ниже"? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Гость |
Сообщение
#3
|
Гость |
|
Гость |
Сообщение
#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- |
Сообщение
#5
|
Гость |
Никто помочь не может?
|
Uriah |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
Подскажите хоть, пожалуйста, допустим я определ ближайшие расстояния до прямой, как мне обратно вівести координаты этих ближайших точек
|
volvo |
Сообщение
#7
|
Гость |
Цитата как мне обратно вівести координаты этих ближайших точек Ты же запоминаешь точки в массиве?Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)... А потом по запомненным индексам просто вытянешь из массива сами точки... |
Uriah |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
Ты же запоминаешь точки в массиве? Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)... А потом по запомненным индексам просто вытянешь из массива сами точки... я запоминаю точки в двух одномерных массивах x,y и мне надо использовать l без индекса |
volvo |
Сообщение
#9
|
Гость |
Тогда во-первых, объясни почему без индекса? Чтоб самому себе найти проблемы, а потом долго и упорно их решать?
А во-вторых, приведи, наконец программу (ПОЛНОСТЬЮ, а не отрывок из несущественностей, типа организации ввода), которую до сих пор сделал... Почему все считают, что кто-то должен повторить то же самое, что они уже наваяли? КОМУ нужна помощь, наконец??? |
Uriah |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
l я взял сначала с индексом, но мой препод сказал исправить, чтоб было без него, говорит, что так прога занимает больше места, хотя я и не знаю как это организовать
|
volvo |
Сообщение
#11
|
Гость |
А у тебя в задании что, где-то приведены ограничения по "занимаемому месту"? Я этого не нашел...
Извини, но используя ТОЛЬКО два одномерных массива и одну переменную, ты эту задачу НЕ решишь... По крайней мере еще или 6 переменных (4 для хранения координат (X, Y) точки с минимальным расстоянием "над прямой"/"под прямой" и 2 - для сохранения самого мин. значения тоже "над"/"под"), или индексы. Насчет "занимает больше места" - ты что, ОБЕ программы ему показывал, и он сравнил размеры? Откуда он знает, ЧТО БУДЕТ занимать больше места? Он что, провидец? |
Uriah |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
я учусь в инсте на программиста(1 курс). первая лаба была на разработку методов решения задачи, и я использовал l[i], и за это препод снял почти половину балов
за нерациональное решение задачи |
Uriah |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
с переменной ничего не получается, а вот с массивом - всё класс!
|
Uriah |
Сообщение
#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. |
Uriah |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
помогите плиз
|
Uriah |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
не понимаю в чём ошибка
|
volvo |
Сообщение
#17
|
Гость |
Цитата не понимаю в чём ошибка В том, что ты определил переменную L как Real, а пытаешься обратиться к ней - как к массиву. Поэтому программа и не компилируется... |
Uriah |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
это я здесь при записи ошибся, а так она и записана как массив, а всё-равно не работает
|
volvo |
Сообщение
#19
|
Гость |
А здесь должно быть то же самое, что и у тебя, иначе вся тема просто будет снесена напрочь, как переливание из пустого в порожнее. Нужна помощь - давай ПРАВИЛЬНЫЙ код. Не даешь - тему в мусор. Надоело уже сюсюкаться тут с такими как ты!
|
Uriah |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: 0 |
извините,пожалуйста.
Помогите плиз |
Текстовая версия | 11.10.2024 15:28 |