![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
-LOVE133- |
![]()
Сообщение
#1
|
Гость ![]() |
скачала несколько юнитов для работы с мышью, но при запуске программы требует файл типа TPU , а все юниты просто с расширение PAS. что в этих ситуациях обычно делают?
|
![]() ![]() |
LOVE133 |
![]()
Сообщение
#2
|
![]() Гарцующая лошадка ![]() ![]() Группа: Пользователи Сообщений: 107 Пол: Женский Реальное имя: Любовь Репутация: ![]() ![]() ![]() |
Вот что у меня получилось . структура данных
Код Tgnezdo=record x,y:integer; - координаты ячейки, где начинается слово len:byte; -длина слова horizontal:boolean; - горизонтально или вертикально расположено слово end; Дальше я бы хотела сделать так 1) берем первое гнездо из массива гнезд , смотрим, как расположено слово , сколько букв в нем 2) смотрим на сетку-массив символов, где если есть буква , то стоит пробел, если буквы нет в этом месте, то стоит 0 Код for i:=1 to n do for j:=1 to n do begin if a[i,j]=1 then bukv[i,j]:=' ' else bukv[i,j]:='0'; end; - где a[I,j] – исходный массив нулей и единиц(сетка кроссворда) 3) считываем из файла слово нужной длины, кидаем в массив , дальше идем так: Код for w:=1 to q do {q-количество слов , счетчик} for j:=1 to b[gnezdo[q].len].first do readln(f,s); {здесь b-массив записей, обозначающих начало и конец слов в текстовом файле заданной длины, то есть B[3].first=576, потому что слова длиной 3 начинаются с 576 строки в словаре} with gnezdo[w] do begin {после прохода следующего блока если ок истина, то слово подходит и его можно запихнуть в сетку по горизонтали } if horizontal then begin okgor:=true; i:=0; while okgor and ( i <len) do begin if (bukv[x,y+i]=' ') then begin okgor:=true; ok:=true; inc(i); end else if (bukv[x,y+i]<>s[i]) then begin okgor:=false end else inc(i); end; {все верно, запихиваем в сетку } if okgor then for i:=0 to len-1 do begin bukv[x,y+i]:=s[i+1]; end {все то же самое , но для вертикали } okgor:=true; i:=0; while okgor and ( i <len) do begin if (bukv[x+i,y]=' ') then begin okgor :=true; inc(i); end else if (bukv[x+i,y]<>s[i]) then begin okgor:=false end else inc(i); end; if okgor then for i:=0 to len-1 do begin bukv[x+i,y]:=s[i+1]; end end; end; end; У меня теперь проблема, все это работает для одного слова. То есть как считали его , так одно и гоняем, он не считывает нигде больше. Как это можно загнать в рекурсию, то есть что б он считывал, прогонял, проверял, смотрел, если подходит, считываем еще одно слово, если не подходит , возвращаемся на шаг назад и считываем другое слово . Можно как-нибудь из этого организовать рекурсию?то есть считывать слова. пока весь кроссворд не заоплнится ? |
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 6:37 |