|
Программирование >> Структурное программирование
] j Программа раздачи карт (часть1). Ti #include <iostream.h> #include <iomahip.h> #include <stdlib.h> i*! #include <time.h> void shuffle(int [][13]); .\ void deal{const int [][13], const char *[], const char *[]); i main ( ) { char *suit[4] = ( Черви , Бубны , Трефы , Пики }; char *face[13] = { Туз , Двойка , Тройка , Четверка , \ Пятерка , Шестерка , Семерка , Восьмерка , Девятка , Десятка , Валет , Дама , Король }; int deck[4][13] = {0}; srand(time(NULL) shuffle (deck) ; deal (deck, face, suit); return 0; void shuffle(int wDeck[][13] { int row, column; for (int card = 1; card <= 52; card++) row = randO % 4; column = randO % 13; 1:3 while (wDeck [row] [column] != 0) { row = randO % 4; column = rand () % 13; wDeck[row][column] = card; Рис. 5.24. Программа раздачи карт (часть! из 2) колоду. Мы выбрали раздельное программирование этих операций, потому что обычно карты раздаются после того, как они растасованы (а не во время тасования). Программа тасования и раздачи карт представлена на рис. 5.24, а пример ее выполнения - на рис. 5.25. Заметим, что в функции deal использовано форматирование выходных данных: cout << setw(9) << setiosflags(ios::right) wFace[column] << масти setw(5) setiosflags(ios::left) wSuit[row] (card % 2 == 0 ? \n : \t); Предыдущий оператор вывода выводит название фигуры в поле размером 9 символов с выравниванием вправо, а название масти - в поле размером 5 символов с выравниванием влево. Выходные данные печатаются в две колонки. Если карта выводится в первой колонке, выводится символ табуляции и перемещает вывод во вторую колонку, в противном случае выводится символ новой строки. void deal(const int wDeck[ ] [13], const char *wFace[ const char *wSuit[ for (int card = 1; card <= 52; card++) for (int row = 0; row <= 3; row++) for (int column = 0; column <= 12; column++) if (wDecl<[row] [column] == card) * cout << setw(9) << setiosflags(ios::right) << wFace[column] << масти setw(5) << setiosflags(ios::left) << wSuit[row] (card % 2 == 0 ? \n : \t); Рис. 5.24. Программа раздачи карт (часть 2 из 2)
Рис. 5.25. Пример работы программы раздачи карт Рис. 5.26. [Профамма многоцелевой сортировки, использующая указатели на функции (чааь 1 из 2) cout endl; return 0; В алгоритме раздачи имеется слабое место. Когда соответствующая карта найдена, даже если она найдена с первой попытки, две внутренние структуры for продолжают просмотр оставшихся элементов deck. В упражнениях и в учебном примере в главе 16 мы исправим этот недостаток. 5.11. Указатели на функции Указатель на функцию содержит адрес функции в памяти. В главе 4 мы видели, что имя массива на самом деле является адресом первого элемента массива. Аналогично, имя функции на самом деле - начальный адрес ее кода. Указатели на функции можно передавать функциям, возвращать из функций, хранить в массивах и присваивать другим указателям на функции. Чтобы проиллюстрировать использование указателей на функции, мы модифицировали программу пузырьковой сортировки на рис. 5.15 и сформировали программу, приведенную на рис. 5.26. Програ1Л4а многоцелевой сортировки, использующая указатели на функции ♦include <iostream.h> ♦include <iomanip.h> void bubble(int *, const int, int (*) (int, int) ); int ascending (const int, const int); int descending(const int, const int); main () { const int arraySize = 10; int order, a[arraySize] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37); cout Введите 1 для сортировки в возрастающем порядке, endl Введите 2 для сортировки в убывающем порядке: ; cin >> order; cout endl Элементы данных в исходном порядке endl; for (int counter = 0; counter < arraySize; counter++) cout setw(4) a[counter]; if (order == 1) { bubble(a, arraySize, ascending); cout endl Элементы данных в возрастающем порядке endl; else { I bubble(a, arraySize, descending); cout << endl Элементы данных в убывающем порядке endl; for (counter = 0; counter < arraySize; counter++) cout setw(4) a[counter];
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |