Программирование >>  Структурное программирование 

1 ... 117 118 119 [ 120 ] 121 122 123 ... 342


] 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];



1 ... 117 118 119 [ 120 ] 121 122 123 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика