![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
-LOVE133- |
![]()
Сообщение
#1
|
Гость ![]() |
скачала несколько юнитов для работы с мышью, но при запуске программы требует файл типа TPU , а все юниты просто с расширение PAS. что в этих ситуациях обычно делают?
|
![]() ![]() |
Бродяжник |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
И еще есть замечания по рекурсии.
Во-первых, что делает переменная flag? Ведь на участке между flag := falseи if not flNoWord and not flag thenзначение flag не меняется. Поэтому фактически это условие сводится к if not flNoWord. Во-вторых, как должна работать рекурсия? У нас должна быть возможность вернуться назад на любое число шагов. Например, первые 5 гнезд заполнились нормально. А шестое мы так и не смогли заполнить. Мы возвращаемся назад на один шаг. Это значит, что последнее вписанное слово нужно вычеркнуть из сетки. То есть либо необходим специальный алгоритм вычеркивания, либо нужно сохранить предыдущую копию. Допустим, у нас есть копия. Но вот беда - оказывается, что другого варианта заполнения пятого гнезда нет. Это значит, что надо вернуться еще на шаг назад и вычеркнуть из сетки еще и четвертое слово. То есть нужна еще одна копия - и не одна, а весь набор промежуточных копий для всех шагов. Если мощь компьютера позволяет, можно и так. А если нет? Тогда нужно изобретать специальный алгоритм вычеркивания. Почему специальный? Потому что он должен учитывать то, что буква в сетке может принадлежать не одному, а сразу двум словам. И вычеркивать ее нужно с оглядкой. Еще один вариант сводится к тому, чтобы в специальном стеке хранить все вписываемые в сетку буквы, а также те символы, которые были в сетке до этого вписывания. Например, пересекаются слова "кот" и "сон". При выписывании слова "кот", в стек попадают: к (пробел) о (пробел) т (пробел) При вписывании слова "сон": с (пробел) о о н (пробел) Теперь при вычеркивании слова "сон" на место букв "с" и "н" будут вписаны пробелы, а вместо "о" опять "о", которое и останется там, если не будет вычеркнуто слово "кот". Ведь сейчас что получается? Допустим, пятое слово пересекается с четвертым и шестым. Мы заполнили шесть гнезд, дошли до седьмого. С седьмым ничего не вышло, с шестым и пятым тоже, пришлось вернуться к четвертому слову. Мы меняем четвертое слово и снова беремся за пятое. Вызываем для него ARBEIT. Входим в ARBEIT и заново определяем маску пятого слова (и это правильно). И в эту маску попадают буквы из нового четвертого слова, а также - внимание! - из уже отвергнутого шестого (оно ведь все-таки было вписано в сетку!). |
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 4:23 |