|
Программирование >> Структурное программирование
a) Объявите массив values типа unsigned int с 5 элементами и присвойте элементам начальные значения в виде четных чисел от 2 до 10. Полагайте, что определена символическая константа SIZE, равная 5. b) Объявите указатель vPtr, который указывает на объект типа unsigned int. c) Напечатайте элементы массива values, используя запись с индексом массива. Используйте структуру for и считайте, что целая управляющая переменная i уже была объявлена. d) Укажите два разных оператора, которые присваивают начальный адрес массива address переменной указателю vPtr. e) Напечатайте элементы массива values, используя запись указатель-смещение. f) Напечатайте элементы массива values, используя запись указатель-смещение с именем массива как указателем. g) Напечатайте элементы массива values, используя индексацию указателя на массив. h) Сошлитесь на элемент 5 массива values, используя запись с индексом массива, запись с именем массива как указателем, запись с индексом указателя и запись указатель-смещение. i) На какой адрес ссылается выражение vPtr + 3? Какое значение хранится в этой ячейке? j) Предполагая, что vPtr указывает на values[4], укажите, на какой адрес ссылается выражение vPtr -= 4. Какое значение хранится в этой ячейке? 5.10. В каждом из следующих заданий напишите один оператор, который выполняет указанное действие. Считайте, что длинные целые переменные valuel и value2 уже объявлены и что переменной valuel присвоено начальное значение 200000. a) Объявите переменную IPtr указателем на объект типа long. b) Присвойте адрес переменной valuel переменной указателю IPtr. c) Напечатайте значение объекта, на который указывает IPtr. d) Присвойте значение объекта, на который указывает IPtr, переменной value2. e) Напечатайте значение value2. f) Напечатайте адрес value2. g) Напечатайте адрес, который хранится в IPtr. Совпадает ли напечатанное значение с адресом valuel. 5.11. Выполните следзющее: a) Напишите заголовок функции zero, которая получает в качестве параметра массив длинных целых значений biglntegers и не возвращает никакого значения. b) Напишите прототип функции пункта а). c) Напишите заголовок функции addlAndsumzero, которая получает в качестве параметра массив целых oneTooSmall и возвращает целое. d) Напишите прототип функции, описанной в пункте с). Замечание: упражнения с 5.12 по 5.15 достаточно необычны. Когда вы решите эти задачи, вы будете в состоянии легко разрабатывать программы для самых популярных карточных игр. 5.12. Модифицируйте программу на рис. 5.24 так, чтобы функция раздачи карт раздавала на руки пятикарточный покер. Затем напишите следующие дополнительные функции: a) Определите, находится ли на руках пара. b) Определите, находятся ли на руках две пары. c) Определите, находятся ли на руках три валета. d) Определите, находятся ли на руках четыре туза. e) Определите, находится ли на руках флеш (все пять карт одной масти). f) Определите, находятся ли на руках пять карт с последовательными фигурами. 5.13. Используйте разработки упражнения 5.12 для написания программы, которая раздает два пятикарточных покера, оценивает раздачу в каждые руки и определяет, какая из них лучше. 5.14. Модифицируйте программу, созданную в упражнении 5.13, так, чтобы она могла моделировать сдающего. Нять карт сдающего сдаются рубашкой вверх, так что игрок не может видеть фигуры на картах. Программа должна затем оценить карты на руках сдающего и, основываясь на их качестве, сдающий должен засветить дополнительно одну, две или три дополнительные карты, чтобы заменить соответствующее количество ненужных карт в исходной раздаче. Затем программа должна оценить заново раздачу на руки. {Предостережение: это трудная задача!) 5.15. Модифицируйте программу, разработанную в упражнении 5.14, так, чтобы она могла автоматически обрабатывать раздачу на руки сдающего, но позволяла игроку решать, какие карты из имеющихся на руках заменять. Программа должна затем оценивать оба набора карт на руках и определять победителя. Теперь используйте эту новую программу, чтобы сыграть 20 партий против компьютера. Кто выиграл больше, вы или компьютер? Дайте сыграть 20 партий против компьютера одному из ваших друзей. Кто выиграл больше? Основываясь на результатах этих игр, введите в программу соответствующие модификации для улучшения ее работы (это тоже сложная задача). Сыграйте еще 20 партий. Улучшилась ли игра вашей модифицированной программы? 5.16. В программе тасования и раздачи карт на рис. 5.24 мы активно использовали неэффективный алгоритм тасования, допускающий возможность неопределенной отсрочки. В данной задаче вы должны
Рис. 5.36. Пример тасованного массива deck Заметим, что хотя рассмотренный в этой задаче подход улучшает алгоритм тасования, алгоритм раздачи все еще требует поиска в массиве deck карты 1, затем карты 2, потом карты 3 и т.д. Хуже того, даже после того как алгоритм раздачи раздаст карты, он продолжает поиск в остатке колоды. Модифицируйте программу на рис. 5.24 так, чтобы, как только карта сдана, не было в дальнейшем попыток найти этот номер карты и программа немедленно сдавала бы следующую карту. В главе 16 мы разработаем алгоритм раздачи карт, который требует всего одну операцию на карту. 5.17. {Моделирование: черепаха и заяц). В этой задаче мы воссоздадим один из истинно великих моментов истории, а именно, классическую гонку черепахи и зайца. Вы будете использовать генерацию случайных чисел для разработки модели этого памятного события. Наши соперники начинают гонку в первой клетке из 70. Каждая клетка представляет собой возможную позицию вдоль трассы гонки. Первый из соперников, достигший или миновавший клетку 70, вознаграждается ведром моркови и салата. Трасса вьется по склону скользкой горы, так что соперникам случается падать на землю. Имеются часы, которые отбивают такт раз в секунду. С каждым тактом ваша программа должна устанавливать позицию животных согласно следующим правилам: будете создать высокоэффективный алгоритм тасования, который позволяет избежать неопределенной отсрочки. Модифицируйте программу на рис. 5.24 следующим образом. Начните с задания начальных значений массиву deck, как показано на рис. 5.35. Модифицируйте функцию shuffle, чтобы в цикле обрабатывать строка за строкой и столбец за столбцом поочередно каждый элемент массива. Каждый элемент должен переставляться со случайно выбранным элементом массива. Напечатайте результирующий массив, чтобы определить, удовлетворительно ли перетасована колода (например, как на рис. 5.36). У вас может появиться желание вызвать функцию shuffle несколько раз, чтобы быть уверенным в удовлетворительном тасовании.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |