Насколько я смог понять, в твоей программе острова обозначены единицами. В моем алгоритме они обозначены -1 (минус единицами). Мне кажется, это вполне может вызвать такое поведение. Выходов, как всегда, два: 1. Переделать мой код (не оченб красиво будет, но можно) 2. Поменять обозначение острова у тебя на -1. Думай..
PS Вообще, в твоей программе трудно разбираться.. Форматирование ты презираешь как класс? Даже мой кусок выровнял в линеечку - я еле узнал его..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
С подсчетом островов я разобрался. OSTROVA.rar ( 8.64 килобайт )
Кол-во скачиваний: 457
Как теперь сделать все в графическом режиме, поле и сетку нарисовать смогу, а как перемещаться поэтой сетке(для выделения острова) и сделать так, чтоб масив заполнялся путем выделения клетки в этой сетке?
Заполнять - точно так же. Нужно поменять только интнрфейс. Я не совсем понимаю, зачем ты сделал юнит ENGINE.. Вот выделить интерфейс в отдельный юнит - это было бы правильно. Тогда замена текста на графику состояла бы в написании нового юнита - и все. Попробуй разделить engine на два юнита, выделив графику. А как писать - аналогично.. Только использовать графику: Line, Rectangle, Bar, OutTextXY.. - и т.д. т.п. . Начни и показывай..
PS а форматирование у тебя все так же на нуле.. Читать такие программы удовольствия мало. Учти, это затрудняет тех, кто отвечает тебе (если уж тебе самому все равно) с соответствующим результатом..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Попробуй разделить engine на два юнита, выделив графику.
На какие и как? Просто располовинить?
Вот добавил новый юнит GRAFICA, из предыдущих островов. В графическом режиме вылазиет поле, и можно управлять мышью. А как состыковать это все с моей задачей, что-то придумать не могу. Труба полная . OSTROVA.rar ( 58.61 килобайт )
Кол-во скачиваний: 466
На какие и как? Просто располовинить? ... Труба полная
Попробуй отделить все, что относится к отображению в отдельный юнит. Скажем, твой DrawMap - это явно к отображению, а Schet - нет. Это я грубо, примерно. Остальные найди сам. Соответственно, и переменные разделить. Многое для этого придется переделать, задача сама по себе непростая. А потом по образу и подобию того юнита, который отображает текст, сделаешь юнит, который отображает в графике. Это потребует немалой работы, но зато в результате должно получиться следующее: нужна графика - подставляешь юнит с графикой, нужен текст - подставляешь текстовый..
PS Еще раз поторяю: разберись с форматированием программного текста. Если снова проигнорируешь мой совет - я тоже буду игнорировать твои вопросы. Я не имею в виду, что ты сразу все правильно отфоматируешь, но хотя бы обратить на это внимание - необходимо!
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Еще раз повторяю: разберись с форматированием программного текста. ...
Вот понавтыкал пробелов, может лучше будет.
А вот в этом случае идет заполнение мвссива? OSTR.rar ( 52.9 килобайт )
Кол-во скачиваний: 430
Если идет, то я там добавил (Procedure SCHET). Не подскажите, как в графмческом режиме вывести числовую переменную. В данном случае результат процедуры (SCHET).
Народ, подскажите алгоритм выполнения подсчета островов или блок схему процедуры подсчета островов.
Процедура подсчета островов:
..... Procedure Schet; Var n:integer; begin n:=mx*my; for wy:=1 to my do for wx:=1 to mx do if (Z[wx,wy]=1) and (Z[wx,wy+1]<>1) and (Z[wx+1,wy]<>1) and (Z[wx,wy-1]<>1) and (Z[wx-1,wy]<>1) then begin Inc(n); Z[wx,wy]:=n; end; for wy:=1 to my do for wx:=1 to mx do if (Z[wx,wy]=1) and (Z[wx,wy+1]<mx*my) and (Z[wx+1,wy]<mx*my) and (Z[wx,wy-1]<mx*my) and (Z[wx-1,wy]<mx*my) then begin Inc(n); Z[wx,wy]:=n; end else if(Z[wx,wy]=1) then begin if (Z[wx,wy+1]>mx*my) then Z[wx,wy]:=Z[wx,wy+1]; if (Z[wx+1,wy]>mx*my) then Z[wx,wy]:=Z[wx+1,wy]; if (Z[wx,wy-1]>mx*my) then Z[wx,wy]:=Z[wx,wy-1]; if (Z[wx-1,wy]>mx*my) then Z[wx,wy]:=Z[wx-1,wy]; end; write(n-mx*my); end; .....
Я как бы сделал блок схему, и алгоритм проги, но мне сказали после условия "Если поле заполнено", подробно расписать, как происходит подсчет островов.
Народ, подскажите алгоритм выполнения подсчета островов или блок схему процедуры подсчета островов. ... Я как бы сделал блок схему, и алгоритм проги, но мне сказали после условия "Если поле заполнено", подробно расписать, как происходит подсчет островов.
Твоя процедура работает неправильно.. Нет смысла, думаю, составлять алгоритм или блок-схему по неверной процедуре. Вот, смотри - тут приведены острова, потом выводится результат твоей процедуры, а потом сама матрица, где можно видеть, как ты считал острова. Видно, что один и тот же остров помечен разными цифрами. Волны означают воду..
@^WARlock^@ - чисто по-человечески, скажи, почему ты сначала задаешь вопрос, тебе отвечают, потом ты делаешь все по-другому, а потом снова просишь ответить на вопрос, на который уже отвечено в самом первом посте темы?.. Это вызываает недоумение.. Есть ли смысл говорить, если собеседник не слышит?
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Точно, а я и не замечал(наверное потомучто больше 4-6 островов не выделял). Не подскажите, из-за чего так происходит? И, что надо изменить в процедуре SCHET, чтобы прога считала правильно.
Советы, по поводу того, что процдура SCHET не корректно работает, я обратил внимание перепроверил, да это действительно так. На какие вопросы я не отвечаю? Мне кажется, что совсем наоборот, мои вопросы ни кто не замечат.
Вот на этот: @^WARlock^@ - чисто по-человечески, скажи, почему ты сначала задаешь вопрос, тебе отвечают, потом ты делаешь все по-другому, а потом снова просишь ответить на вопрос, на который уже отвечено в самом первом посте темы?.. Это вызываает недоумение.. Есть ли смысл говорить, если собеседник не слышит?
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
И, что надо изменить в процедуре SCHET, чтобы прога считала правильно.
Мой совет: вернись к началу, и возьми мою процедуру в точности в том виде, в котором она есть. Я понимаю, тебя не устраивает, что в ней острова обозначены -1, а не 1. Поменяй в моей процедуре все знаки на обратные. То есть острова обозначай 1, а их номера - отрицательными числами. Это самый простой способ, имхо.. Тогда и алгоритм будет один в один. Сможешь взять прямо из первого мессаджа. Что непонятно - я объясню..
PS ты извини за наезды, просто старайся внимательно читать советы и придерживаться их. Либо говори, почему делаешь иначе. Ведь это же двусторонний разговор, так?
Добавлено через 4 мин. Но будет значительно красивее, если ты в своей части переделаешь 1 на -1. По-хорошему, вообще не нужно привязываться к конкретному числу. Просто сделай константу - скажем, Terra = -1. При заполнении островов используй ее. Нигде не пользуйся явно минус единицей или единицей. Вот подсчет - это другое дело. Номер должен быть явно. Улавливаешь идею? Говори тут активней, тогда результат будет лучше. Успехов!
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Бывает.. одни тупят, другие ждут у них просветления. Главное - дождаться..
Цитата(@^WARlock^@ @ 27.04.2007 12:02)
видимо всетаки ты отчасти был прав, на счет того, что я не слушаю советов.
Фраза сказана предельно осторожно, но если ты действительно это понял хоть немного - это самое большое твое (и немного мое ) достижение в этой работе. Программирование на втором месте..
Цитата(@^WARlock^@ @ 27.04.2007 12:02)
Надеюсь теперь ты мне поможешь реализовать блок-схему процедуры SCHET.
Помогу обязательно! Только сначала высплюсь..
Цитата(@^WARlock^@ @ 27.04.2007 12:02)
И еще такой нюанс, как сделать, чтобы мой PASCAL распознавал русский язык.
Этот вопрос много раз обсуждался, есть надежные способы. Признаться, я по ним не спец..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой