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

> Острова
сообщение
Сообщение #1


Пионер
**

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

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


Народ помогите написать программу.


Острова (определить кол-во островов на озере).

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


Новичок
*

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

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


Цитата
1) Допустим я сделал поле, как перемещаться по этому полю, и как выделить остров.

Используй чтение клавиши с помощью: key := readkey; В key в этом случае записывается прочитанная клавиша с клавиатуру. Пусть у тебя выделена какая то клетка в начале. Далее сделай так, чтобы по нажатии клавишей вверх, вниз, влево, вправо - твоя клетка передвигалась соответственно. Т.е. когда пользователь нажимает влево - выделение надо стереть и нарисовать снова на одну клетку левее. При передвижение запоминаются координаты выделенной клетки, чтобы по нажатию пользователем, к примеру, клавиши Enter мы смогли выйти на нужную клетку поля. Т.е. условие key = Enter как раз можно поставить на выход из нашего цикла.
P.S. Ну и конечно на передвижение нашей выделительной клетки надо поставить ограничения, чтобы она не выбегала за пределы поля smile.gif

Сообщение отредактировано: T i m e -


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

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

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


Цитата(T i m e @ 1.03.2007 17:59) *

Используй чтение клавиши с помощью: key := readkey; В key в этом случае записывается прочитанная клавиша с клавиатуру. Пусть у тебя выделена какая то клетка в начале. Далее сделай так, чтобы по нажатии клавишей вверх, вниз, влево, вправо - твоя клетка передвигалась соответственно. Т.е. когда пользователь нажимает влево - выделение надо стереть и нарисовать снова на одну клетку левее. При передвижение запоминаются координаты выделенной клетки, чтобы по нажатию пользователем, к примеру, клавиши Enter мы смогли выйти на нужную клетку поля. Т.е. условие key = Enter как раз можно поставить на выход из нашего цикла.
P.S. Ну и конечно на передвижение нашей выделительной клетки надо поставить ограничения, чтобы она не выбегала за пределы поля smile.gif


Исходный вопрос какой был? Сосчитать кол-во островов!
Или вы предлагаете пользователю при помощи стрелочек и ентера по одному выделить все острова, и чтобы в переменную-счётчик записывалось количество нажатий ентера? Не смешно.
И почему вы так реадкей любите? А давайте я стану всем советовать вешаться на $09 прерывание и смотреть в порт $60! Ведь это самый продвинутый способ чтения с клавиатуры! (у него есть плюсы - возможность фиксирования нажатия нескольких клавиш, и он видит и различает ЛЮБУЮ клавишу, включая правый и левый альт итд).

Для выделения острова можно:
1. Определить все клетки, относящиеся к острову (обходом в глубину или в ширину, например).
2. Все эти клетки обвести в квадратную рамочку, выводя ксором. Тогда общая граница двух соседних клеток, относящихся к острову, будет обведена 2 раза, то есть вообще как будто бы не обведена (свойство такое у ксора). По углам аналогично.
А для снятия выделения надо обвести все это клетки ещё раз.


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


TarasBer, а чем тебе так не понравился ReadKey?
Человек (я имею в виду T i m e) предложил способ решения, причем в рамках Turbo Pascal - в чем он не прав? Кстати, ты даже не написал, что, по-твоему, следует использовать взамен ReadKey (ну, кроме обработки прерывания).
Кстати, чтобы использовать ReadKey, совсем не обязательно его любить. mad.gif

И еще, поясни, пожалуйста, слова:
1. Определить все клетки, относящиеся к острову (обходом в глубину или в ширину, например).

Что есть "обход в глубину или в ширину"? Нырять при этом не нужно?.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

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

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


Цитата(Lapp @ 2.03.2007 5:50) *

TarasBer, а чем тебе так не понравился ReadKey?
Человек (я имею в виду T i m e) предложил способ решения, причем в рамках Turbo Pascal - в чем он не прав? Кстати, ты даже не написал, что, по-твоему, следует использовать взамен ReadKey (ну, кроме обработки прерывания).
Кстати, чтобы использовать ReadKey, совсем не обязательно его любить. mad.gif

И еще, поясни, пожалуйста, слова:
1. Определить все клетки, относящиеся к острову (обходом в глубину или в ширину, например).

Что есть "обход в глубину или в ширину"? Нырять при этом не нужно?.. smile.gif

Я извиняюсь, просто меня проглючило немного... Я от Варлока увидел только вопросы о том, как определить сколько островов, и как выделить остров. А как организовать перемещение - я не заметил. Вот и показался мне ответ Времени не в тему. Разумеется, я не против редкея, в данном случае его вполне хватает. Про порты - это я переборщил. Извиняюсь, я не прав.
А обход - это если остров состоит из нескольких клеток - то мы сначала находим клетку, которая относится к острову, а потом обходом (не, нырять не стоит) находим все клетки, до которых из неё можно добраться по суше.


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

Сообщений в этой теме
@^WARlock^@   Острова   28.02.2007 16:06
Lapp   Не совсем понятно, в чем проблема. Если одна клет…   28.02.2007 17:43
T i m e   Мне тоже не понятно... @^WARlock^@ поконкретней …   28.02.2007 22:42
@^WARlock^@   Проблема в том. 1) Допустим я сделал поле, как п…   1.03.2007 14:31
Lapp   Проблема в том. 1) Допустим я сделал поле, как …   1.03.2007 15:32
T i m e   Используй чтение клавиши с помощью: key := readke…   1.03.2007 21:59
TarasBer   Используй чтение клавиши с помощью: key := readke…   2.03.2007 0:16
T i m e   Я отвечал не на исходный вопрос, а на тот который…   2.03.2007 0:44
Lapp   TarasBer, а чем тебе так не понравился ReadKey? Че…   2.03.2007 9:50
TarasBer   TarasBer, а чем тебе так не понравился ReadKey? Ч…   3.03.2007 23:07
@^WARlock^@   Взял морской бой и убрал лишнее. Вот, что я име…   3.03.2007 11:26
volvo   2 Time: ты наказан? Вот и сиди в карцере! Еще …   3.03.2007 19:24
@^WARlock^@   Вижу вы тут спор затеяли. Но всетаки:   4.03.2007 16:45
Lapp   Вижу вы тут спор затеяли.@^WARlock^@, спор, как ты…   6.03.2007 8:55
@^WARlock^@   Да просто подсчитать острова, их кол-во должно о…   6.03.2007 13:23
@^WARlock^@   Эот код действителен если остров состоит из одной …   25.03.2007 16:40
Lapp   если мой остров состоит не из одной клетки, а бол…   25.03.2007 16:43
@^WARlock^@   Я его уже смотрел, но не смог реализовать.   25.03.2007 16:45
Lapp   Мне неясно - в чем именно трудность? Я сейчас тупо…   25.03.2007 17:46
@^WARlock^@   Проссмотрел выше указанный код, начиная с {реализа…   28.03.2007 8:30
Lapp   Из-за чего так получается? Насколько я смог по…   28.03.2007 10:13
@^WARlock^@   С подсчетом островов я разобрался. Как теперь с…   5.04.2007 15:29
@^WARlock^@   Так, как можно заполнять массив в графическом режи…   7.04.2007 17:03
Lapp   Молодец, прога, вроде, работает! :) как можно…   8.04.2007 9:25
@^WARlock^@   На какие и как? Просто располовинить? :blink: В…   9.04.2007 14:06
Lapp   На какие и как? Просто располовинить? ... Труба…   9.04.2007 16:38
@^WARlock^@   Вот понавтыкал пробелов, может лучше будет. А во…   12.04.2007 9:21
Lapp   как в графмческом режиме вывести числовую перемен…   12.04.2007 9:36
@^WARlock^@   В моей последней проге идет хоть какое-то заполнен…   13.04.2007 11:30
@^WARlock^@   Как и "все", я решил забить на подключен…   18.04.2007 17:17
@^WARlock^@   Народ, подскажите алгоритм выполнения подсчета ост…   22.04.2007 10:09
Lapp   Народ, подскажите алгоритм выполнения подсчета ос…   22.04.2007 15:47
@^WARlock^@   Точно, а я и не замечал(наверное потомучто больше…   22.04.2007 16:58
Lapp   Не подскажите, из-за чего так происходит? И, что …   23.04.2007 14:35
Lapp   И, что надо изменить в процедуре SCHET, чтобы про…   24.04.2007 10:18
@^WARlock^@   Советы, по поводу того, что процдура SCHET не ко…   24.04.2007 9:39
Lapp   На какие вопросы я не отвечаю? Вот на этот: @^W…   24.04.2007 9:57
@^WARlock^@   Не понимаю почему я тупил столько времени. LAPP -…   27.04.2007 15:02
Lapp   Не понимаю почему я тупил столько времени. Бывает…   27.04.2007 15:43
@^WARlock^@   LAPP - говорил, что поможешь реализовать блок-схем…   2.05.2007 8:23
Lapp   LAPP - говорил, что поможешь реализовать блок-схе…   2.05.2007 9:01
@^WARlock^@   Последний рабочий вариант программы: Подскажи, п…   2.05.2007 10:39
Lapp   Подскажи, по какому принципу работает твоя прога(…   2.05.2007 10:42
Lapp   1. Обнуляем счетчик островов N. Ну, это понятно. …   2.05.2007 12:02
@^WARlock^@   У меня вот, что получилось:   2.05.2007 14:00
Lapp   У меня вот, что получилось: Пока что сыровато, я…   2.05.2007 14:32
@^WARlock^@   Я в блок-схемах не силен. Может тогда предложишь …   2.05.2007 15:40
Lapp   Я в блок-схемах не силен. Может тогда предложишь …   3.05.2007 12:45
@^WARlock^@   Как я понял, это выход в твоей проге, а в моей эт…   3.05.2007 9:08
@^WARlock^@   Решил перед сдачей проги окончательно её протестир…   10.05.2007 11:08


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

 





- Текстовая версия 28.03.2024 22:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name