Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
9 / 5 / 4
Регистрация: 03.10.2017
Сообщений: 110
1

Реализовать структуру "Колода карт"; сформировать случайную перетасовку карт для трёх игроков

18.04.2018, 00:47. Просмотров 2717. Ответов 5
Метки нет (Все метки)

Создать структуру колоды карт, состоящую из двух полей- переменных перечислимого типа "масть" и "старшинство". Сформировать случайную перетасовку карт для трех игроков.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2018, 00:47
Ответы с готовыми решениями:

Иерархия: класс "карта", "колода карт"
(Иерархия). Создать класс карта, имеющая ранг и масть. Карту можно перевернуть и открыть. Создать...

Создать класс "Колода карт"
Создать колоду карт. Конструкторы колоды должны инициализировать колоду упорядочено и случайным...

Колода карт из 36 карт, сколькими способами можно достать 5 карт?
Колода карт из 36 карт. Сколькими способами можно достать 5 карт так, чтобы среди них были пиковые...

Написать класс "Колода карт" на С#, используя WindowsFormsAppilications
Требуется описать класс "Колода карт", включающий в себя закрытый массив элементов класса "карта"....

5
457 / 382 / 326
Регистрация: 05.11.2013
Сообщений: 1,043
Записей в блоге: 6
18.04.2018, 03:58 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
 
using namespace std;
 
enum CardSuit { CLUBS, DIAMONDS, HEARTS, SPADES };
enum CardRank { SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE };
#define stringify( name ) # name
const char* CardSuitNames[] = {
 stringify(CLUBS),
 stringify(DIAMONDS),
 stringify(HEARTS),
 stringify(SPADES)
};
const char* CardRankNames[] = {
 stringify(SIX),
 stringify(SEVEN),
 stringify(EIGHT),
 stringify(NINE),
 stringify(TEN),
 stringify(JACK),
 stringify(QUEEN),
 stringify(KING),
 stringify(ACE)
};
 
struct Card {
 CardSuit suit;
 CardRank rank;
};
 
void print(Card c) {
 cout << CardSuitNames[c.suit] << " " << CardRankNames[c.rank];
}
 
void printDeck(vector <Card> &deck) {
 for (int i = 0; i<deck.size(); i++) {
  cout << endl << (i+1) << " ";
  print (deck[i]);
 }
}
 
int main() {
 vector <Card> deck;
 Card c;
 for (int i=0; i<36; i++) {
  c.suit = static_cast<CardSuit>(i%4);
  c.rank = static_cast<CardRank>(i%9);
  deck.push_back (c);
 }
 cout << endl << endl << "Generated deck" << endl;
 printDeck(deck);
 sort(deck.begin(), deck.end(), [&](const Card &a, const Card &b) {
  return a.suit < b.suit || a.suit == b.suit && a.rank < b.rank; }
 );
 cout << endl << endl << "Sorted deck" << endl;
 printDeck(deck);
 const int n = 3;
 int players[n];
 for (int i = 0; i < n; i++) {
  random_shuffle(deck.begin(),deck.end());
  cout << endl << endl << "Player " << (i+1) << endl;
  printDeck(deck);
 }
 cin.get(); return 0;
}
0
sourcerer
18.04.2018, 07:47
  #3
 Комментарий модератора 
ulyana_md, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
18.04.2018, 15:55 4
Два раза перечислять значения, да ещё и хранить набор соответствий как-то не айс. Тем более, всё равно в макросы влезли.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
#include <vector>
 
#define MAKE_ENUM(VAR) VAR,
#define MAKE_STRINGS(VAR) #VAR,
#define MAKE_ENUM_AND_STRINGS(NAME, VARS) \
enum NAME { VARS(MAKE_ENUM) }; \
const std::vector<std::string> NAME##Names { VARS(MAKE_STRINGS) }
 
#define CARD_SUIT_ENUM(DO) \
    DO(CLUBS) \
    DO(DIAMONDS) \
    DO(HEARTS) \
    DO(SPADES)
 
#define CARD_RANK_ENUM(DO) \
    DO(SIX) \
    DO(SEVEN) \
    DO(EIGHT) \
    DO(NINE) \
    DO(TEN) \
    DO(JACK) \
    DO(QUEEN) \
    DO(KING) \
    DO(ACE)
 
MAKE_ENUM_AND_STRINGS(CardSuit, CARD_SUIT_ENUM);
MAKE_ENUM_AND_STRINGS(CardRank, CARD_RANK_ENUM);
 
void Print(const CardSuit suit, const CardRank rank)
{
    std::cout << CardSuitNames[suit] << " " << CardRankNames[rank] << std::endl;
}
 
int main()
{
    Print(DIAMONDS, ACE);
}
0
3 / 3 / 2
Регистрация: 11.04.2018
Сообщений: 38
18.04.2018, 19:39 5
ПерС, запустил Вашу программу два раза. Результат одинаковый. Получается не совсем "случайная перетасовка карт".

Добавлено через 1 час 8 минут
Вот набросал просто без структур.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# include <stdio.h>
# include <ctime>
# include <stdlib.h>
bool w[36];
int main() {
    int h,x,y,z;
    char g[9]={54,55,56,57,84,74,81,75,65};
    srand(time(NULL));
    h=36;
    while (h) {
        x=rand()%h+1; y=0; h--;
        while (x) if (!w[y++]) x--;
        w[--y]=1; x=y/9; z=y%9;
        printf("%c%c  ",g[z],x+3);
    }
}
Выдаёт каждый раз новый результат. (T - это 10)
0
457 / 382 / 326
Регистрация: 05.11.2013
Сообщений: 1,043
Записей в блоге: 6
19.04.2018, 08:44 6
Результат одинаковый
просто не инициализировался генератор с.ч.
вот так д.б. разный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <ctime>
 
using namespace std;
 
enum CardSuit { CLUBS, DIAMONDS, HEARTS, SPADES };
enum CardRank { SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE };
#define stringify( name ) # name
const char* CardSuitNames[] = {
 stringify(CLUBS),
 stringify(DIAMONDS),
 stringify(HEARTS),
 stringify(SPADES)
};
const char* CardRankNames[] = {
 stringify(SIX),
 stringify(SEVEN),
 stringify(EIGHT),
 stringify(NINE),
 stringify(TEN),
 stringify(JACK),
 stringify(QUEEN),
 stringify(KING),
 stringify(ACE)
};
 
struct Card {
 CardSuit suit;
 CardRank rank;
};
 
void print(Card c) {
 cout << CardSuitNames[c.suit] << " " << CardRankNames[c.rank];
}
 
void printDeck(vector <Card> &deck) {
 for (int i = 0; i<deck.size(); i++) {
  cout << endl << (i + 1) << " ";
  print(deck[i]);
 }
}
 
int main() {
 vector <Card> deck;
 Card c;
 for (int i = 0; i<36; i++) {
  c.suit = static_cast<CardSuit>(i % 4);
  c.rank = static_cast<CardRank>(i % 9);
  deck.push_back(c);
 }
 cout << endl << endl << "Generated deck" << endl;
 printDeck(deck);
 sort(deck.begin(), deck.end(), [&](const Card &a, const Card &b) {
  return a.suit < b.suit || a.suit == b.suit && a.rank < b.rank; }
 );
 cout << endl << endl << "Sorted deck" << endl;
 printDeck(deck);
 const int n = 3;
 vector <Card> players[n];
 srand(time(0));
 for (int i = 0; i < n; i++) {
  players[i] = deck;
  random_shuffle(players[i].begin(), players[i].end());
  cout << endl << endl << "Player " << (i + 1) << endl;
  printDeck(players[i]);
 }
 cin.get(); return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2018, 08:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Описать класс "Колода карт"
Уважаемые форумчане! Требуется описать класс &quot;Колода карт&quot;, включающий в себя закрытый массив...

Колода из 36 карт. Кол-во способов выбрать 5 карт
Сколькими способами из колоды в 36 карт можно выбрать неупорядоченный набор из 5 карт так, чтобы в...

Задача по теме классы "про карты", если все 5 карт одной масти, то выдать «Флеш», в противном – сдать еще 5 карт
Доброго времени суток) Пишу прогу по теме Классы, дописав до определенного места столкнулся с...

Найти вероятность, что из 3, взятых из колоды карт (36) будет "туз", "дама" и "король"
Составить программу вычисления факториала числа в виде процедуры и оформить применение этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.