|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.02.2009, 22:07 | #1 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Объясните пожалуйста, где и как ошибся
Задача. Даны 2 множества точек на плоскости. Выбрать 4 различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел мин.площадь.
Проблема в процедуре raschet(я запутался с циклами, проверяя точки на наличие квадрата(Ответ всегда пишет: 'Sredi tochek pervogo mnogestva kvadratov ne sushestvuet.'))... Последний раз редактировалось Manchester; 07.02.2009 в 21:02. |
07.02.2009, 18:48 | #2 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Мне почему-то кажется, что из 3х точек квадрат не построить.
|
07.02.2009, 20:19 | #3 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Да, ступиил... ща снова попробую..
|
07.02.2009, 21:01 | #4 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Еще нашел ошибку-переменные перепутал, но все равно не работает, та же проблема. Чего то с перебором наврал...
Последний раз редактировалось Manchester; 07.02.2009 в 21:05. |
07.02.2009, 21:19 | #5 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Я всю программу не смотрел, но вот что бы точно переделал.
1. Работать с точками удобнее, когда они объявлены как запись типа Tpoint=record x,y:integer; end; Тогда будет только 2 массива a,b:array[1..20] of TPoint; Покольку в массиве, где ищем квадраты, мы не знаем как точки расположены, какая первая, вторая и т.д. надо делать перебор в в четверном цикле, предварительноно описав функцию длины. for i:=1 to n-3 do for j:=i+1 to n-2 do for k:=j+1 to n-1 do for l:=k+1 to n do if (dl(a[i],a[j])=dl(a[j],a[k]))and(dl(a[j],a[k]) =dl(a[k],a[l]))and(dl(a[k],a[l])=dl(a[k],a[l])=dl(a[i],a[l]))and(dl(a[i],a[k])=dl(a[j],a[l])) then выводить координаты или писать, что это квадрат и проверять дальше, входят ли в него точки другого массива, а если входят, то если его сторона меньше стороны всех предыдущих квадратов, то это искомый. Короче, геморрой еще тот. Кроме того, поскольку длины сторон будут вещественные числа, нужно сравнивть длины не просто a=c? a abs(a-c)<e(точность, например 0,00000001). |
07.02.2009, 21:27 | #6 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Спасибо, про записи подумаю, в перебор врубился, ща переделаю. Но вот про веществ. числа ты написал:
не а=с, а abs(a-c)<e Что такое e? |
07.02.2009, 21:34 | #7 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Буквой е обычно обозначают точность, или погрешность вычислений. Обычно это малая величина, чуть болше ноля, например 0,0000001.
Тогда, сравнивая два вещественных числа, например pi и с=32,14159, они не будут равны, хотя и то и другое это pi, но с разной точностью. Тогда мы пишем if abs(pi-c)<0.0001 then равны. Так и уВас, нужно писать if (abs(dl[ai],a[j])-dl[ai]j],a[k]))<0.00001) then они равны. |
07.02.2009, 21:39 | #8 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
А, понял, спасибо что просвятили, а то я что-то не разу с таким не сталкивался...
|
07.02.2009, 21:40 | #9 | |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Цитата:
|
|
09.02.2009, 20:49 | #10 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Уфф...
Жалею, что не использовал записи. но сил уже нет. Представьте себе, она снова не работает... Снова выводит:"Sredi tochek pervogo mnogestva kvadratov ne sushestnuet.", при том, что точки ввожу с клавиатуры и тщательно подбираю их. Но потом нажимаешь Еnter и она выводит какие-то странные координаты вершин квадрата... Бред какой-то... p.s. Знаю, что сделал ее коряво и громоздко, но работать она должна! Помогите пожалуйста! Последний раз редактировалось Manchester; 09.02.2009 в 20:57. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
объясните, пожалуйста | brainstorm | Помощь студентам | 10 | 14.10.2008 23:49 |
Объясните пожалуйста | TheHerd | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 04.04.2008 21:33 |
Не разберу где ошибся, по моему много напутал | Forro | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 14.01.2008 14:19 |