![smile.gif](style_emoticons/default/smile.gif)
![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Бродяжник |
![]()
Сообщение
#41
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Когда сдавать-то?
![]() |
LOVE133 |
![]()
Сообщение
#42
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
сдавать демо-версию завтра, а у меня кроме веселого меню и пары кнопок ничего нет )))) даже левого какого вывода слов на экран ...
|
Бродяжник |
![]()
Сообщение
#43
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сочувствую...
В том файле, который Вы прикрепили последним, я нашел пару ошибок. 1) это то, что я ведь в своей проге не случайно сделал функцию IsLetter. Вот представьте себе, что Вы пытаетесь узнать, есть ли сосед слева у самой левой клетки? Или сосед сверху у самой верхней? Что будет? Range Check Error, вот что. 2) Когда Вы первый раз вызываете функцию ARBEIT, Вы передаете ей переменную Ng, которая не определена. Перед первым вызовом надо поставить Ng := 1. Больше я ничего не смог выяснить, из-за отсутствия файла словаря. Мой-то словарь не подходит! Сегодня буду в сети еще часов до 4 по Москве, а дальше все... каникулы до среды. |
LOVE133 |
![]()
Сообщение
#44
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
а так , если пользоваться вашей программой. как е в мой интерфейс загнать? а в принципе , будет работать такая рекурсия или надо все в принципе переделывать? а словарь вот....
Прикрепленные файлы ![]() |
Бродяжник |
![]()
Сообщение
#45
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
ща посмотрим...
Правка: Жаль, но чтобы привести это все в чувство, нужно больше времени. И словарь кстати не тот совсем... ведь это простой текстовый файл, а в программе у Вас стоит FSTR=file of string, что вовсе не то же самое. К сожалению, в ближайших несколько дней я уже не смогу быть Вам полезным... Удачи! Сообщение отредактировано: Бродяжник - |
LOVE133 |
![]()
Сообщение
#46
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
завтра как-нибудь еще отверчусь, скажу, что все в процессе, постараюсь отладить, может чего и получится...Огромное спасибо за неоценимую помощь )))
![]() |
LOVE133 |
![]()
Сообщение
#47
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
вот... только теперь выясняется, что память в паскале не резиновая и словарь в 50000 слов обработать трудновато, даже не знаю, что тут можно сделать ... может подскажете, потому что замучала ошибка выхода за диапазон, и словарь пришлось урезать , теперь слова длинне 5 букв использовать нельзя. В файле словарь и код.МОжет можно как-нибудь решить проблему нехватки памятики и выхода за диапазоны?
Сообщение отредактировано: LOVE133 - Прикрепленные файлы ![]() |
Бродяжник |
![]()
Сообщение
#48
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Привет!
В последнем выложенном файле есть как минимум следующие ошибки: 1. Еще раз возвращаюсь к разнице между text и file of string. Ваш словарь - это text, а не file of string. Поэтому к нему нельзя обращаться, как к file of string. В частности, нельзя использовать процедуру seek. Сделайте следующую вещь: напишите маленькую программу такого вида: program test;А потом сравните файлы f1.txt и f2.txt. И найдите 10 отличий. Поэтому считывание слова из словаря (GEt_word_from_sl) не работает. 2. Теперь к функции Maska_Slova, конкретно вот к этому фрагменту: with gnezdo doЕсли if horizontal, то почему увеличивается игрек? Ведь это вертикальная координата? 3. Процедура Get_Gnezda (я уже об этом упоминал). for i:=1 to n do Если индекс i отсчитывается от единицы, это значит, что будет обращение к ячейке a[i-1,j] то есть a[0,j]. А такой ячейки нет. Поэтому такое обращение даст ошибку. Значит, надо учитывать эту особенность - если клетка находится в 1 столбце, у нее не может быть соседей слева. То же самое касается клеток первой строки: у них не может быть соседей сверху. Чтобы это учесть, я в своих экспериментах написал функцию, которая при обращении к несуществующим ячейкам ведет себя так, как если бы там были "небуквенные" ячейки. Вы можете обойти это по-другому, но эту проблему надо решить. 4. Вы вставили в функцию ARBEIT присваивание ng := 1; Это не совсем то, что требовалось, потому что это напрочь убило рекурсию. Это нужно было прописать перед первым вызовом ARBEIT: if a[i,j]=1 then bukv[i,j]:=' ' else bukv[i,j]:='0'; Или просто if ARBEIT( bukv,1) then ok:=true ; Для начала разберитесь с этим. |
LOVE133 |
![]()
Сообщение
#49
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
Доброго времени суток ))
все координально переделала, вроде работает... теперь начались косяки с интерфейсом 1) не могу повторно задать сетку и создать кроссворд, то есть когда ошибочно введена сетка, повторное нажатие на NEW вызывает сетку, но кроссворд на MAKE уже не получается 2) как быть с выводом готового кроссворда на экран ? в графическом режиме не отображаются русские буквы (((, выключать графику? 3) можно конечно попробовать в транслите. но тогда начинаются проблемы с перекодированием - в русском 33 буквы, в английском всего 26 ))) тут демо-версия, выводит кроссворд в графическом режиме... Прикрепленные файлы ![]() |
Бродяжник |
![]()
Сообщение
#50
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот, сыскал в сети... русские фонты для BGI.
Прикрепленные файлы ![]() |
Бродяжник |
![]()
Сообщение
#51
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
И еще есть замечания по рекурсии.
Во-первых, что делает переменная flag? Ведь на участке между flag := falseи if not flNoWord and not flag thenзначение flag не меняется. Поэтому фактически это условие сводится к if not flNoWord. Во-вторых, как должна работать рекурсия? У нас должна быть возможность вернуться назад на любое число шагов. Например, первые 5 гнезд заполнились нормально. А шестое мы так и не смогли заполнить. Мы возвращаемся назад на один шаг. Это значит, что последнее вписанное слово нужно вычеркнуть из сетки. То есть либо необходим специальный алгоритм вычеркивания, либо нужно сохранить предыдущую копию. Допустим, у нас есть копия. Но вот беда - оказывается, что другого варианта заполнения пятого гнезда нет. Это значит, что надо вернуться еще на шаг назад и вычеркнуть из сетки еще и четвертое слово. То есть нужна еще одна копия - и не одна, а весь набор промежуточных копий для всех шагов. Если мощь компьютера позволяет, можно и так. А если нет? Тогда нужно изобретать специальный алгоритм вычеркивания. Почему специальный? Потому что он должен учитывать то, что буква в сетке может принадлежать не одному, а сразу двум словам. И вычеркивать ее нужно с оглядкой. Еще один вариант сводится к тому, чтобы в специальном стеке хранить все вписываемые в сетку буквы, а также те символы, которые были в сетке до этого вписывания. Например, пересекаются слова "кот" и "сон". При выписывании слова "кот", в стек попадают: к (пробел) о (пробел) т (пробел) При вписывании слова "сон": с (пробел) о о н (пробел) Теперь при вычеркивании слова "сон" на место букв "с" и "н" будут вписаны пробелы, а вместо "о" опять "о", которое и останется там, если не будет вычеркнуто слово "кот". Ведь сейчас что получается? Допустим, пятое слово пересекается с четвертым и шестым. Мы заполнили шесть гнезд, дошли до седьмого. С седьмым ничего не вышло, с шестым и пятым тоже, пришлось вернуться к четвертому слову. Мы меняем четвертое слово и снова беремся за пятое. Вызываем для него ARBEIT. Входим в ARBEIT и заново определяем маску пятого слова (и это правильно). И в эту маску попадают буквы из нового четвертого слова, а также - внимание! - из уже отвергнутого шестого (оно ведь все-таки было вписано в сетку!). |
LOVE133 |
![]()
Сообщение
#52
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
после многочисленных тестов пришла к выводу что рекурсия плохая и не работает ))) (*тихонько сходит с ума*). Работает только в одну сторону с перебором словаря и просто проверкой , подходит , не подходит...
но ничего путного придумать не могу, потому как не хватате глубоко понимания сущности рекурсии... если хранить маску слов на всех этапах, то не хватит никакой памяти... Однокурсник использует деревья и списки, остался последний день, не думаю, что успею переделать все )) |
Бродяжник |
![]()
Сообщение
#53
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я уже почти заставил его работать, хотя тут, конечно, всплыли новые приколы. Например, может случиться так, что есть четыре первых гнезда. При этом первые три не пересекаются друг с другом, а четвертое пересекается с первым и со вторым. Мы заполнили три первых, перешли к четветрому, а с ним не стряслось. И происходит что: мы возвращаемся к третьему, меняем в нем слово - и это никак не влияет на ситуацию с четвертым гнездом. Мы прокручиваем все варианты для третьего гнезда, и только потом переходим ко второму и что-то в нем меняем. И это может продолжаться весьма долго...
но зато у меня уже заполнился вот такой кроссворд: .О.В. Еще бы узнать, что такое АЖГОН и АДАЗА... Сообщение отредактировано: volvo - |
Бродяжник |
![]()
Сообщение
#54
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Оно работает!
Это еще актуально? |
LOVE133 |
![]()
Сообщение
#55
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
Конечно актуально ))) допуск до экзамена )) тут не только такие приколы выплыли.. почти половина моей работы напрасна, при чем так что выть хочется... Сделала мышь, чтоб удобнее было, теперь надо клавиатуру подключать, интерфейс плохой. проверка неправильная.Теперь надо не только проверить можно ли составить кроссворд, но и пользователю показать , что так делать нельзя, то есть если он уже забил слово, то сделать так , чтоб ы восседние клеточки и кликнуть-то нельзя было, то есть показать, куда можно кликать а куда нет, вообщем полный провал ... сколько глюков будет, я уже чувствую...
|
Бродяжник |
![]()
Сообщение
#56
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ладно, кладу то, что пока есть.
Те несколько кроссвордов, которые я пробовал, заполнились. Единственное, что: - я так и понял, что с проверкой что-то неладно, поэтому я ее просто отключил; - процесс рекурсии может быть длительным. При этом желательно брать такую сетку, чтобы в ней был минимум горизонтальных слов. Например, кроссворд в виде буквы Ш строится на ура, а вот в виде Е не так быстро. Если хотите порадоваться, задайте сетку в виде квадрата ***** - словарь полон всяких загадочных слов типа "аак" или "абаза". Ну, тут мы не виноваты... Итак, вот исходник. (У меня буквы в графическом режиме выводятся нормально. Если у вас - нет, поэкспериментируйте со шрифтами). Прикрепленные файлы ![]() |
LOVE133 |
![]()
Сообщение
#57
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
пасибо вам огроменно , не знаю, что б я делала ))) все работает на ура, и даже если где-то выяснится что не на ура, то наверно не расстроюсь, теперь остался интерфейс. но тут как-нибудь постараюсь справиться... теперь вот придется думать над проверками, где можно клутку ставить , а где нет ... начинаю трассировать программу. так графика подвисает после очередного прерывания и ничего сделать не могу. потому как мышь пропадает, поэтому и проверить сложно , где что не работает.
|
Бродяжник |
![]()
Сообщение
#58
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хорошо!
С интерфейсом Вы справитесь, Вы жутко способная. ![]() А я пойду почивать на лаврах. Удачи! |
LOVE133 |
![]()
Сообщение
#59
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
Вчера докрутила, перестала мышь работать... не работает на весь экран в программе, то есть на полэкрана работает, а на вторую половину никак.Самое интересное. что запускаешь оригинал, на работает, запускаешь похожую программу, с теми же процедурами - работает . И если оригинал запустить после копии, то он тоже начинает работать, а ошибку найти не могу, ничего вроде не меняла.Может подскажете, где косяк?
Прикрепленные файлы ![]() |
Бродяжник |
![]()
Сообщение
#60
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() А вообще ничего, ничего, проект развивается! (А заставка, кстати, была неплохая...) |
![]() ![]() |
![]() |
Текстовая версия | 1.09.2024 8:30 |