![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
NickolsoN |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Мужской Реальное имя: NickolsoN Репутация: ![]() ![]() ![]() |
Помогите написать программу.
Решение задании должно садержать 1. Доказательство выигрышной стратегии для игроков 2. Реализацию игры на компьютере с соблюдением уловий - одним игроком в игре должен быть компьютер - начальное состояние игры, два тех игр, где оно явно не задано, должно формироваться случайным образом (случайное число выбирается из экстетического представления картинки на экране); - после представления начального состояния, а игре должен быть запрос Кто будет ходить первым?»; - игра должна быть оформлена с помощью графических средств* - игра должна иметь «Заставку» и Правила игры - управление игрой должно осуществляться либо с помощью управляющих клавиш клавиатуры либо мышкой - компьютер должен играть по выигрышной стратегии: либо вследствие начальных данных игры, либо, следя за ходом человека, перехватив инициативу из-за его ошибки Игра Болтянского Играют двое. Первый выбирает натуральное число от 2 до 9, Второй умножает это число на выбираемое натуральное число от 2 до 9, затем первый выбирает число и умножает результат на любое натуральное число от 2 до 9 и т.д. Выигрывает тот, у кого впервые получится произведение, больше заданного положительного числа C Выяснить при каких С существует выигрышная ситуация у первого игрока, при каких - у второго. помогите пожалуйста, можно и без графики Сообщение отредактировано: NickolsoN - |
![]() ![]() |
NickolsoN |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Мужской Реальное имя: NickolsoN Репутация: ![]() ![]() ![]() |
вот щас подлатал прогу, вывод нормально работает и нормально пишит кто выйграл, комп числа выдает случайным образом, без стратегии. Можно но ли, знаяя стратегию, отредактировать мою прогу? а насчет графики....никогда не пользовался))даже не представляю как)может вы поможете сначала со стратегией??пожалуйста=)
Сообщение отредактировано: NickolsoN - |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Хорошо. Ты сделал достаточно много, чтоб я убедился, что ты умеешь работать. Но ты не выполняешь все мои просьбы, и это затрудняет разговор. Это не упрек, скорее оправдание, почему я выкладываю свой вариант. Посмотри на него и сам сделай выводы.
Обрати внимание на такие моменты.. 1. Форматирование программы. Сдвиги делаются не там, где тебе кажется красивее, а по правилам. Постарайся понять их на примере моего кода. Это тебе сильно поможет в будущем при написании более длинных программ. 2. Процедуры и функции используй не только для повторяющегося кода, но и для структуризации, чтоб выделить блоки, отличающиеся по смыслу. 3. Убери CRT. Никогда не делай ClrScr без осознанной необходимости. Мне уже надоело это всем говорить, читай тут: Матрица. Суммы диоганалей паралельных главной и побочной 4. Всегда старайся все числа убрать в константы. Например, тут есть числа 2 и 9. Вроде бы, они не должны меняться. На самом же деле может оказаться, когда ты придешь сдавать эту прогу препу, что он скажет: "хорошо, молодой человек, вы справились; а теперь та же задача для пределов 5 и 28..." И ты станешь ползать по всей программе, выискивая двойки и девятки.. Теперь по поводу стратегии.. Хорошо, я не буду убирать из своей проги алгоритм выигрышной стратегии. Постарайся с ним разобраться. Тебе придется это сделать, так как в задании есть вопрос: при каких С есть выигрышная стратегия. Задавай вопросы, если будет что-то неясно )). const -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Так. Кажется, я придумал, как объяснить эту интуицию.
См. рисунок: ![]() Идет игра до цели C. Пусть МЫ играем проив НИХ. Игра находится в некоторой промежуточной стадии, произведение в настоящий момент равно P. Ход наш. И мы думаем то, что можем думать.. Во-первых, договоримся о терминах: начало хода - это чему равно произведение к этому ходу; сам ход - это на что мы домножаем (от 2 до 9); результат хода - то, что получается после умножения начала на ход. Например, если начало хода равно 12, а наш ход равен 3, то результат нашего хода есть 36. Допустим, что выиграть сразу одним ходом мы не можем, потому что C слишком велико. Так вот, с самого начала ясно, что нам НЕЛЬЗЯ (если, конечно, мы хотим выиграть), чтоб результат нашего хода попал в промежуток от C/9 до C, потому что они (если они не дураки) сразу смогут выиграть. Этот ПЛОХОЙ для нас интервал изображен толстой красной линией. Но с другой стороны, мы хотим, чтобы результат ИХ хода попал на этот участок. Желательно ЗАСТАВИТЬ их сделать такой ход. Для этого попробуем определить такой участок, любой ход с которого попадет в красный. Это сделать легко (проанализируй сам и поймешь), этот участок - от C/9/2 до C/9. Нам надо, чтобы они начинали свой ход внутри этого участка. А их начало - это наш предыдущий результат! Значит, нам надо СТРЕМИТЬСЯ попасть в этот кусок предыдущим ходом. На рисунке этот кусок изображен толстой зеленой линией. Таким образом, мы выяснили, что нам желательно попасть ЗА число C/9/2. Другими словами, нашей ДАЛЬНЕЙ целью все еще является C, но появилась цель поближе. Назовем ее C1 (подразумевая, что то C было как бы C0). То есть, C1=C/18. После этого мы можем абстрагироваться от дальней цели и заняться выполнением более близкой. Иными словами, теперь игра ведется не до C, а до C1. Если мы выиграем эту игру, то мы выиграем и всю игру. И мы можем повторить все те же самые рассуждения, но теперь про C1. И тогда мы найдем число C2, которое снова станет нашей новой целью. А между C2 и C1 - красный участок потоньше и зеленый участок потоньше. А за ним последкет C3 и так далее.. Так будет продолжаться до тех пор, пока текущее произведение P не попадет ЗА очередную Ci. Если оно окажется на красном куске - отлично, мы ходим так, чтобы попасть на следующий зеленый. Если нет - мы ходим как-то (при этом желательно выбрать маленький ход, чтоб затянуть игру) и хдем ИХ ошибки. Это, так сказать, сухая теория. На практике все немного усложняется из-за того, что целые числа делятся не точно, а с остатком. Попробуй с учетом всего вышесказанного осмыслить функцию AI. Что будет неясно - задавай вопросы. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 11.09.2025 20:12 |