![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 1 Всего: 42 |
Это классно ![]() ![]() -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
KasMP |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Я вчера наконец-то отошла от раздумий над алгоритмами и приступила к написанию программы.
Решила создать модуль, в котором будут нужные ВА. В модуле были созданы типы для списка и некоторые переменные:
После процедур считывания первой вершины и всех остальных идут периметр и площадь (это мне удалось достаточно быстро и легко). Прошу каких-нибудь рекомендаций, замечаний.
Дальше идет определение принадлежности точки многоугольнику: точка последовательно соединяется со всеми соседними вершинами, накапливается сумма площадей полученных треугольников (площадь каждого отдельного треугольника считается по формуле Герона); если накопленная сумма площадей равна площади многоугольника, то точка принадлежит многоугольнику (иначе не принадлежит, это понятно). Очевидно, что при подсчете площадей двух соседних треугольников длина одной и той же стороны будет нужна 2 раза. Это учтено: длина каждой стороны считается один раз, а в цикле просто переводятся указатели. Мне удалось найти у себя несколько ошибок: периметр вместо полупериметра, непереведенные на вершину вперед указатели и т.п.. Но функция по прежнему всегда выдает false.
В упор не могу найти еще ошибки (помогите, пожалуйста). Ну и сама программа, в которой все это тестируется, выглядит так:
Это сообщение отредактировал(а) KasMP - 20.5.2008, 07:59 |
||||||||||
|
|||||||||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
![]() ![]() ![]() Я вместо массива организовала динамический список ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
я так понял, у тебя сравниваются площади "строго равно". все же у тебя дробный тип данных.
воспользуйся сравнением "отлиается на некую погрешность". ну, так отладь функции в отдельности. корми тестовые данные, смотри дебаггером текущие значения переменных. сравнивай с ожидаемым. когда функции в отдельности будут отлажены и проверены по мере сил, приходи к тестированию программы в целом. а то даже с помощью целого форума искать ошибку в непростом коде - вещь небыстрая, малоинтересная и низкоинформативная ![]() |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
skyboy,
![]() (очень рада тебя видеть!!!)
![]() ![]() ![]() Т.е., другими словами, взять модуль разности суммы площадей треугольников и площади многоугольника, а затем сравнить этот модуль с какой-то положительной величиной? Я так и делаю ![]() ![]() |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 1 Всего: 42 |
Если в Delphi нет специальной функции, то алгоритм описан правильно ![]() главное чтобы эта положительная величина была достаточно мала ![]() -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Подумаем, сколько это должно быть... Только проблема в том, что функция проверки принадлежности точки многоугольнику выдает false даже тогда, когда результаты всех вычислений, всех извлечений корней целочисленны ![]() ![]() |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 1 Всего: 42 |
KasMP,
А что тут искать? бери треугольник со сторонами 3, 4, 5 переведи на листике его в векторы и точку где-нибудь внутри. затем заданные значения просчитай своей функцией и выведи результат суммы площадей. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
О
![]() Сегодня запустила тот же самый код на другом компе - функция работала идеально ![]() ![]() Как такое может быть ![]() ![]() (может память надо чаще очищать ![]() ![]() |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Сделала все кроме пересечения двух многоугольников (вторым "многоугольником" может быть точка). Про пересечение буду читать вот это.
Сдавать в классе мы уж не успеваем, поэтому буду писать на e-mail. Я попробовала прокомментировать модуль и саму программу так, чтобы преподаватель понял, откуда что взялось. Не могли бы вы оценить то, насколько понятно получилось? Помогите, пожалуйста, своей оценкой. Я нисколько не хочу, чтобы преподаватель увяз в дебрях переменных, связей между ними и т.п.. Хочется, чтобы ему было не очень сложно и чтобы он не мучился слишком сильно... (видимо, придется посылать два варианта: с комментариями и без - уж слишком много их получилось) |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 30 Всего: 372 |
KasMP, покажи что у тебя получилось, почитаю
![]() |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Сейчас
![]() Добавлено через 2 минуты и 44 секунды Эм... Если открыть *.pas в блокноте, выбрать шрифт "Terminal", скопировать и вставить сюда, то вместо кириллицы получается абракадабра. Если выбирать не "Terminal", то получается абракадабра и в блокноте, и здесь... ![]() Добавлено через 3 минуты и 58 секунд Как перенести кириллицу из *.pas (т.е. из-под MSDOS) сюда (т.е. в Windows)? |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 30 Всего: 372 |
KasMP, прикрепи сам файл
![]() |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Так не все будут качать... Кто-то по ссылке до статьи дойти не может, а тут тем более...
Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: 1 Всего: 30 |
Там 5 файлов: модуль с комментариями и без, программа с комментариями и без, формула для площади многоугольника.
Добавлено через 7 минут и 44 секунды Я вспомнила, что забыла очистить память!!!!!! Добавлю потом... Считайте, что память очищена ![]() Добавлено через 10 минут и 54 секунды Да, кстати, вам потребуется файл входных данных. Можете взять этот:
Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |