IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

4 страниц V « < 2 3 4  
 Ответить  Открыть новую тему 
> Подключение мыши, (программа Кроссворд)
LOVE133
сообщение 19.05.2006 13:51
Сообщение #61


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


надеюсь - это окончательный вариант... Только есть еще несколько вопросов по процедурам в программе. Если можно, прокомментируйте несколько процедур, как именно они работают, файл Komment.pas . У меня обнаружилось несколько непоняток в связи с неполадками в работе )))
1) словарь просматривается от начала до конца только один раз? или по кругу?
2) в случае ситуации, когда нельзя составить кроссворд в принципе, что будет в этом случае, зависнет?
3) пару раз выводил на экран кроссворд, в котором одно и тоже слово встречалось 3 раза )))
и еще.. проверку на правильность ввода при самом вводе сетки мне милостиво разрешили не делать, но заставили выводить где именно ошибся пользователь.Так как у меня процедура SELECTED заполнения идет через repeat , то там очень сложно что-то поменять так , что б и смысл соранился и что-то можно было вывести... я думала о полной перерисовке экрана, то есть если есть 4 клетки вместе, то выделить их все , елси есть одна стоящая одиноко. выделить и ее, а потом спросить перерисовать сетку или нет.
это конечно все мелочи, меня волнуют больше всего комментарии , отчет писать надо будет )


Прикрепленные файлы
Прикрепленный файл  ________.rar ( 209.69 килобайт ) Кол-во скачиваний: 120
Прикрепленный файл  KOMMENT.PAS ( 3.31 килобайт ) Кол-во скачиваний: 158
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 19.05.2006 16:16
Сообщение #62


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Read this.


Прикрепленные файлы
Прикрепленный файл  comment.txt ( 8.09 килобайт ) Кол-во скачиваний: 188
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 21.05.2006 22:01
Сообщение #63


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


Volvo , очень прошу вас прокомментировать код... потому как самой не осилить ну никак, как не старалась.Так как писала не я и процедура рекурсивная то и трассировать очень сложно, не все понимаю , как работает.А спрашивать будут...
program IncMassive;

type

setArray = array[1..10, 1..10] of integer;

var

a,b:setarray;

i,j:integer;

n:integer;


procedure print(const a: setarray);

var i, j: integer;

begin

writeln;

for i := 1 to n do begin

for j := 1 to n do write(a[i,j]:3);

writeln;

end;

end;


procedure increm(i_start, j_start: integer;

n: integer; value: integer; var a: setarray);

begin

a[i_start, j_start] := value;


if (i_start > 1) and (a[i_start - 1, j_start] > value)

then increm(i_start - 1, j_start, n, value + 1, a);


if (i_start < n) and (a[i_start + 1, j_start] > value)

then increm(i_start + 1, j_start, n, value + 1, a);


if (j_start > 1) and (a[i_start, j_start - 1] > value)

then increm(i_start, j_start - 1, n, value + 1, a);


if (j_start < n) and (a[i_start, j_start + 1] > value)

then increm(i_start, j_start + 1, n, value + 1, a);

end;



begin

randomize;

write('input N:'); readln(n);


for i := 1 to n do

for j := 1 to n do a[i, j] := random(2);


print(a);


b := a;

for i := 1 to n do

for j := 1 to n do

if b[i, j] = 1 then inc(b[i, j], n*n);


for i := 1 to n do

for j := 1 to n do

if b[i, j] = n*n + 1 then Increm(i, j, n, 2, b);


for i := 1 to n do

for j := 1 to n do

if b[i, j] <> 0 then dec(b[i, j]);


print(b);

readln;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
pascal65536
сообщение 23.05.2006 6:07
Сообщение #64


Пионер
**

Группа: Пользователи
Сообщений: 62
Пол: Мужской

Репутация: -  1  +


Извините, что вмешиваюсь.
Просто Вы затронули интересную тему - составление кроссворда.
Я тоже бился над этой задачей, лет несколько тому назад.
Если интересно, то с удовольствием поделюсь опытом.
Очень мне словарь Ваш понравился. Я свой создавал сам, ещё до того как смог впервые выйти в интернет.
Пришлось написать спец. утилитку - "выдиратель" слов из текста, причем тех, в которых нет ничего, кроме букв русского алфавита (в Вашем словаре есть слова с дефисами это слово ведь не годится для кроссворда)
Потом возникла проблема отделения имён существительных в ед.числе им.падеже от всех остальных, тогда пришлось написать ещё одну программку, которая по окончанию определяла нужное это слово или нет. Набор неверных окончаний хранился в отдельном файле.
Сетку для кроссворда "рисовал" в текстовом редакторе, из звёздочек и пробелов. Мыши на моём компьютере по моему не было тогда, или я просто не решался её подключать.
И полным перебором всех слов сетка заполнялась. Правда не все сетки ей были по зубам, на этом я собственно и остановился.
Ещё пару слов про словарь. Слова были разбиты по длине, и хранились в отдельных файлах. 02, 03 ... 24
Длиннее 24 букв слов в орфографическом словаре нет, да и вряд ли его придётся использовать.
При такой системе хранения, отпадала проблема отбрасывания "коротких" или "длинных" слов. Файл делался короче, примерно, в 10 раз и работать с ним было намного легче. По крайней мере отбрасывалась как минимум одна проверка на совпадение длины.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 23.05.2006 7:33
Сообщение #65


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


Я с удовольчствием рассмотрю все предложения ))) Когда я бралась за эту задачу. я не думала, что все будет настолько сложно и запутанно. Утром доделала заполнение сетки, теперь начались проблемы с рекурсией.
Дело в том , что в программе используется массив USED - использованные ранее подошедшие и не подошедшие слова. То есть , если словарь хотя бы 4000 слов, то на каком-то шаге рекурсии , его весь нужно загнать в этот массви, джля того чтобы определить подходит слово или его надо удалить на этом шаге, но в паскале это возможно только с помощью динамической памяти... вот тут я и села. ТО есть программа до ходит да максимального размера массива использованных слов, а дальше проверка , было слово или нет просто станвовится бесполезной. ведь массив кончился и ничего туда больше не записывается. тут образуется зацикливание, вроде до конца файла еще не дошли, и слова уже все подряд подходят и рекурсия дальше не идет .... что тут делать?


Прикрепленные файлы
Прикрепленный файл  ________.rar ( 182.91 килобайт ) Кол-во скачиваний: 116
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 24.05.2006 10:28
Сообщение #66


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Love133
Если потерпите, завтра выложу версию с продвинутым словарем, поддерживающим запоминание до 32000 слов и ускоренный поиск слова заданной длины.
pascal65536
Привет соратникам! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 24.05.2006 11:50
Сообщение #67


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


тут вот какая мысль возникла... а ведь большинство слов в получившемся кроссворде нвчинаются на первые 3-4 буквы алфавита...


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 24.05.2006 12:50
Сообщение #68


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


а потому словарь отсортирован по алфавиту и длине слов. в начале самые длинные, и гнезда сортируются так же, то есть берем первое подходящее слово ( а оно в начале алфавита smile.gif ) и идем дальше и так до упора. Если не прокатило, берем второе подходящее слово - все из того же словаря , значит отличаться они будут максимумна 2-3 буквы )))) Попробовала работать с динамической памятью... Косяков немеряно, память толком выгрузить не могу.... но работает вернее...

Конечно потерплю )) деваться все равно некуда, сдавать-то надо....

Сообщение отредактировано: LOVE133 - 24.05.2006 12:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
pascal65536
сообщение 24.05.2006 15:47
Сообщение #69


Пионер
**

Группа: Пользователи
Сообщений: 62
Пол: Мужской

Репутация: -  1  +


GoodWind
Это поначалу так, что слова начинаются на одинаковые буквы, потом, когда кроссворд достроится до конца, окажется, что буквы-то разные. Первое слово берётся из алфавитного списка, а все оставльные подбираются по маске.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 24.05.2006 16:30
Сообщение #70


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


Paskal , как там насчет наработок ? мне было бы интересно посмотреть на ваш вариант обработки словаря и перебор, потому как дымаю полным перебором все это дело решилось бы быстрее раза в 3 )))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
pascal65536
сообщение 24.05.2006 16:35
Сообщение #71


Пионер
**

Группа: Пользователи
Сообщений: 62
Пол: Мужской

Репутация: -  1  +


LOVE133
Думаете, быстрее? Нифига подобного. СтОит подумать над другим алгоритмом, отличным от полного перебора.
А исходник выложу у себя на сайте, сюда линк выложу. Думаю, администраторы не обидятся.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 25.05.2006 16:43
Сообщение #72


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Oops...
Зашился я с работой, так что не до кроссвордов. Видимо, я выбываю из игры...
В общем, идея была такая - хранить в массиве использованных слов не сами слова, а номера соответствующих записей в файле словаря. Тогда имеем всего два байта на слово, за счет чего размер массива можно существенно растянуть. Для этого, правда, пришлось сконвертировать словарь из текстового в типизированный файл. Начерно я это реализовал, оно даже работает, хотя одну не очень большую сетку ковыряло с полчаса. (А все из-за того, что слова на i-том и i+1-м уровне рекурсии оказались не связанными друг с другом). Но к "передаче в эксплуатацию" не готово.
mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 25.05.2006 19:22
Сообщение #73


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


давайте хоть черновик )))как-нибудь доковыряю, смысл в принципе понятный, а до ума доведу как-нибудь, потому что в том виде, что у меня сейчас точно не примут )) просто на каком-то месте зацикливается и дальше не строит и сообщение о том что построить нельзя не выводит, поэтому и не принимают ... а косяки подправлю ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
pascal65536
сообщение 25.05.2006 21:19
Сообщение #74


Пионер
**

Группа: Пользователи
Сообщений: 62
Пол: Мужской

Репутация: -  1  +


Выкладываю исходник, для общего ознакомления.
Только, пожалуйста, не надо его массово распространять.
Дата создания многих файлов - август 1999 года, так что прошу не судить строго, за корявый местами код.
findword.zip 322кБ Ссылка будет актуальна до июня.
В архиве есть всё, о чем я писал. Сетка кроссворда в файле setka.txt
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 26.05.2006 9:31
Сообщение #75


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Вот.
Читайте ReadMe.txt
Может, стоит подумать над тем, чтобы как-то отображать на экране процесс поиска, чтобы пользователь не скучал, и не думал, что все повисло? Хотя в графическом режиме это будет давать лишние тормоза...


Прикрепленные файлы
Прикрепленный файл  New_voc.zip ( 143.99 килобайт ) Кол-во скачиваний: 124
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
LOVE133
сообщение 27.05.2006 10:06
Сообщение #76


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


Пасибки огромное ))) потихоньку разбераюсь, все равно торопиться уже некуда , только сдать осталось . Может , все таки доделаю, как положено )))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 29.05.2006 9:07
Сообщение #77


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V « < 2 3 4
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.08.2025 6:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"