Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2009, 22:07   #1
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию Объясните пожалуйста, где и как ошибся

Задача. Даны 2 множества точек на плоскости. Выбрать 4 различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел мин.площадь.
Проблема в процедуре raschet(я запутался с циклами, проверяя точки на наличие квадрата(Ответ всегда пишет: 'Sredi tochek pervogo mnogestva kvadratov ne sushestvuet.'))...
Вложения
Тип файла: txt project.txt (5.1 Кб, 122 просмотров)

Последний раз редактировалось Manchester; 07.02.2009 в 21:02.
Manchester вне форума Ответить с цитированием
Старый 07.02.2009, 18:48   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Мне почему-то кажется, что из 3х точек квадрат не построить.
puporev вне форума Ответить с цитированием
Старый 07.02.2009, 20:19   #3
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Да, ступиил... ща снова попробую..
Manchester вне форума Ответить с цитированием
Старый 07.02.2009, 21:01   #4
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Еще нашел ошибку-переменные перепутал, но все равно не работает, та же проблема. Чего то с перебором наврал...

Последний раз редактировалось Manchester; 07.02.2009 в 21:05.
Manchester вне форума Ответить с цитированием
Старый 07.02.2009, 21:19   #5
puporev
Старожил
 
Регистрация: 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).
puporev вне форума Ответить с цитированием
Старый 07.02.2009, 21:27   #6
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Спасибо, про записи подумаю, в перебор врубился, ща переделаю. Но вот про веществ. числа ты написал:
не а=с, а abs(a-c)<e Что такое e?
Manchester вне форума Ответить с цитированием
Старый 07.02.2009, 21:34   #7
puporev
Старожил
 
Регистрация: 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 они равны.
puporev вне форума Ответить с цитированием
Старый 07.02.2009, 21:39   #8
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

А, понял, спасибо что просвятили, а то я что-то не разу с таким не сталкивался...
Manchester вне форума Ответить с цитированием
Старый 07.02.2009, 21:40   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
pi и с=32,14159
Здесь конечно же pi и с=3,14159
puporev вне форума Ответить с цитированием
Старый 09.02.2009, 20:49   #10
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Уфф...
Жалею, что не использовал записи. но сил уже нет. Представьте себе, она снова не работает... Снова выводит:"Sredi tochek pervogo mnogestva kvadratov ne sushestnuet.", при том, что точки ввожу с клавиатуры и тщательно подбираю их. Но потом нажимаешь Еnter и она выводит какие-то странные координаты вершин квадрата... Бред какой-то...
p.s. Знаю, что сделал ее коряво и громоздко, но работать она должна! Помогите пожалуйста!
Вложения
Тип файла: txt project.txt (6.0 Кб, 118 просмотров)

Последний раз редактировалось Manchester; 09.02.2009 в 20:57.
Manchester вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объясните, пожалуйста 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