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

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

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

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


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

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

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


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


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


Бывалый
***

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

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


Read this.


Прикрепленные файлы
Прикрепленный файл  comment.txt ( 8.09 килобайт ) Кол-во скачиваний: 117
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #64


Пионер
**

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

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


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


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

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

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


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


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


Бывалый
***

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

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


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


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

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

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


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


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


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

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

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


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

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

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


Пионер
**

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

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


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


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

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

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


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


Пионер
**

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

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


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


Бывалый
***

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

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


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


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

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

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


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


Пионер
**

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

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


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


Бывалый
***

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

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


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


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


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

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

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


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


Бывалый
***

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

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


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

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

 




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