Глава 3
типа (в нашем случае 8tatus), является набором целых именованных констант, представленных своими идентификаторами. Значения констант этого списка перечисления начинаются, если не указано иное, с 0 и увеличиваются последовательно на 1. В предыдущем списке перечисления имя CONTINUE присвоено значению 0, WON присвоено значению 1, а LOST — значению 2. Идентификаторы в enum должны быть уникальными, но отдельные константы перечисления могут иметь одинаковые целые значения.
// Крепс
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int rollDice(void);
main() {
enum Status { CONTINUE, WON, LOST };
int sum, myPoint;
Status gameStatus;
// первый бросок костей // выигрыш после первого броска //проигрыш после первого броска // запоминание очков
srand(time(NULL)); sum = rollDice();
switch(sum} {
case 7: case 11:
gameStatus = WON;
break; case 2: case 3: case 12:
gameStatus = LOST;
break; default:
gameStatus = CONTINUE;
myPoint = sum;
cout « "Очки: " « myPoint « endl;
break;
while (gameStatus == CONTINUE) sum = rollDice();
if (sum == myPoint) gameStatus = WON;
else
if (sum == 7)
gameStatus - LOST;
[ // бросать дальше // выигрыш по очкам // проигрыш после суммы 7
if (gameStatus == WON)
cout « "Игрок выиграл" « endl; else
cout « "Игрок проиграл" « endl;
return 0;
Рис. 3.10. Программа моделирования игры в крепс (часть 1 из 2)
Функции 197
int rollDice(void)
int diel, die2, workSum;
diel = 1 + rand() % 6; die2 = 1 + rand() % 6; workSum = diel + die2;
cout « "Бросок игрока " « diel « " + " « die2 « " = " « workSum « endl;
return workSum;
Рис. 3.10. Программа моделирования игры в крепс (часть 2 из 2)
Бросок игрока 6 + 5 = 11 Игрок выиграл
Бросок игрока 6 + 6 = 12 Игрок проиграл
Бросок игрока 4 + 6 = 10 Очки: 10
Бросок игрока 2 + 4 = 6
Бросок игрока 6 + 5 = 11
Бросок игрока 3 + 3 = 6
Бросок игрока 6 + 4 = 10 Игрок выиграл
Бросок игрока 1 + 3 = 4 Очки: 4
Бросок игрока 1 + 4 = 5
Бросок игрока 5 + 4 = 9
Бросок игрока 4 + 6 = 10
Бросок игрока 6 + 5 = 11
Бросок игрока 1 + 2 = 3
Бросок игрока 5 + 2 = 7 Игрок проиграл
Рис. 3.11. Примеры прогонов игры в крепс
Хороший стиль программирования 3.8
Делайте заглавной первую букву идентификатора, используемого как имя типа, определенного пользователем.
Переменным типа Status, определенного пользователем, может быть присвоено только одно из трех значений, объявленых в перечислении. Если игра выиграна, gameStatus принимает значение WON. Если игра проиграна, gameStatus устанавливается равной LOST. В ином случае gameStatus принимает значение CONTINUE, так что кости могут быть брошены снова.
Типичная ошибка программирования 3.13
Присвоение целого эквивалента константы перечисления переменной перечислимого типа приводит к замечанию (предупреждению) компилятора.
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции