Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
1

Цикл for и 56 карт

18.08.2010, 22:44. Просмотров 1061. Ответов 19
Метки нет (Все метки)

Выводит 14! карт в каждой строке.
Я не понял как это получается.

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// 7_6.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
 
using namespace std;
 
enum Suit {clubs, diamonds, hearts, spades};
enum Man {Jake, Nik, Bob, Arni};
const int jack =10;
const int queen=11;
const int king =12;
const int ace = 13;
 
 
 
 
class card
{
private:
    int number;
    Suit suit;
public:
    card()
    {};
    void set(int n, Suit s)
    {
        suit =s;
        number =n;
    }
    void display();
};
 
void card::display()
{
    if(number>=2 && number<10)
        cout << number;
    else
    {
        switch(number)
        {
        case jack: cout << 'J'; break;
        case queen: cout << 'Q'; break;
        case king: cout << 'K'; break;
        case ace: cout << 'A'; break;
        }
    }
    switch(suit)
    {
    case clubs: cout << static_cast<char>(5);break;
    case diamonds: cout << static_cast<char>(4);break;
    case hearts: cout << static_cast<char>(3);break;
    case spades: cout << static_cast<char>(6);break;
    }
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    card deck[52];
    int j;
 
    cout << endl;
    for(j=0;j<52;j++)
    {
        int num = (j%13)+2;
        Suit su = Suit(j/13);
        deck[j].set(num,su);
        
        // выводил сразу для проверки...
        /*deck[j].display();
        cout << "   ";
        if(!((j+1)%13))
            cout << endl;*/
    }
 
    cout << "Deck:\n";
    for(j=0;j<52;j++)
    {
        deck[j].display();
        cout << "   ";
        if(!((j+1)%13))
            cout << endl;
    }
 
    // перемешиваем
    srand(time(NULL));
    for(j=0;j<52;j++)
    {
        int k = rand()%52;
        card temp = deck[j];
        deck[j] = deck[k];
        deck[k] = temp;
    }
    ////////////////
 
    cout << "\nShuffel deck:\n";
    for(j=0;j<52;j++)
    {
        deck[j].display();
        cout << "   ";
        if(!((j+1)%13))
            cout << endl;
    }
 
 
    getch();
    return 0;
}
Еще вопрос, касающийся остатка от деления
C++
1
int num = (j%13)+2;
Как при j равном, скажем, единице, мы получаем число 3?
1/13 = 0,076
0,076 +2 = 2,076
Откуда 3?
Объясните пожалуйста данную арифметическую операцию.

в случае:
C++
1
if(!((j+1)%13))
я понимаю. Мол, если остаток равен нулю, то...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2010, 22:44
Ответы с готовыми решениями:

Сколькими способами из колоды (36 карт) можно выбрать неупорядоченный набор из 6 карт, удовлетворяющих условию
Сколькими способами из колоды 36 карт можно выбрать неупорядоченный набор из 6 карт, чтобы в этом...

Реализовать структуру "Колода карт"; сформировать случайную перетасовку карт для трёх игроков
Создать структуру колоды карт, состоящую из двух полей- переменных перечислимого типа &quot;масть&quot; и...

Раздача карт, оценка комбинации и выяснение сколько карт взять, сколько сбросить
Всем добра! Хочу спросить, как решать задачу со сдачей, оценкой карты и после всего этого нужно ещё...

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

19
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.08.2010, 23:15 2
Цитата Сообщение от half-node Посмотреть сообщение
int num = (j%13)+2
Цитата Сообщение от half-node Посмотреть сообщение
1/13 = 0,076
мне кажется, что код немного не соответствует тому, что вы считаете. в коде берется остаток от деления, а вы считаете как деление.
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 09:59  [ТС] 3
Цитата Сообщение от fasked Посмотреть сообщение
мне кажется, что код немного не соответствует тому, что вы считаете. в коде берется остаток от деления, а вы считаете как деление.
остаток от деления при 1/13 = 076... почему для меня и загадка...откуда единица появляется.

по основному вопросу есть идеи?)
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 10:02 4
half-node, остаток от деления 1 на 13 будет равен 1:
1|13
0|0
1 <- это и есть остаток
Читаем, что такое остаток от деления.
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:08  [ТС] 5
Цитата Сообщение от Nameless One Посмотреть сообщение
half-node, остаток от деления 1 на 13 будет равен 1:
1|13
0|0
1 <- это и есть остаток
Читаем, что такое остаток от деления.
Я ошибаюсь, или можно это как-то объяснить человеческим языком?)
что значит 0|0?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 10:10 6
Вспомни, как в школе ты делил числа в столбик. Это я так схематично попытался это изобразить
По ссылке все расписано человеческим языком.
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:12  [ТС] 7
А...Все, спасибо. По крайней мере "зацепка"
По поводу основного вопроса, откуда отображение еще одной карты в каждой масти?
Тут нужно сделать пояснение: прорисовывается только
C++
1
2
3
4
5
6
7
switch(suit)
        {
        case clubs: cout << static_cast<char>(5);break;
        case diamonds: cout << static_cast<char>(4);break;
        case hearts: cout << static_cast<char>(3);break;
        case spades: cout << static_cast<char>(6);break;
        }
эта часть. Т.е. картинка масти. Ни цифры слева, ни т.п. нет
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 10:16 8
half-node, а что вообще должна твоя программа делать, я так и не понял.
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:17  [ТС] 9
Создает колоду карт, в количестве 52 штуки.
Каждой присваивается масть.
Выводим на экран.
Потом эта колода перемешивается...и выводится на экран.

такая вот бесполезная
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 10:19 10
half-node, щас сделаем
0
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2010, 10:43 11
Цитата Сообщение от half-node Посмотреть сообщение
Я ошибаюсь, или можно это как-то объяснить человеческим языком?
иначе говоря, это операция деления по модулю. или просто взятие модуля (не путать с тем, что в школе называли модулем числа, то есть операцией abs (абсолютной величины). как только это не называется
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:47  [ТС] 12
Цитата Сообщение от fasked Посмотреть сообщение
иначе говоря, это операция деления по модулю. или просто взятие модуля. как только это не называется
Если взять число 0.076 по модулю, оно разве не будет равно нулю? )
0
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2010, 10:50 13
Цитата Сообщение от half-node Посмотреть сообщение
Если взять число 0.076 по модулю, оно разве не будет равно нулю? )
модульная арифметика применима только к целым числам
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:51  [ТС] 14
Цитата Сообщение от fasked Посмотреть сообщение
модульная арифметика применима только к целым числам
Вы меня окончательно запутали )))

Добавлено через 36 секунд
Хотя, с остатком я кажется понял. Просто чуть позже попрактикуюсь, дабы понять
0
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2010, 10:54 15
Цитата Сообщение от half-node Посмотреть сообщение
Вы меня окончательно запутали
В первом столбике остаток от деления, во втором деление (для целых чисел)
Код
0 % 5 = 0 || 0 / 5 = 0
1 % 5 = 1 || 1 / 5 = 0
2 % 5 = 2 || 2 / 5 = 0 
3 % 5 = 3 || 3 / 5 = 0
4 % 5 = 4 || 4 / 5 = 0
5 % 5 = 0 || 5 / 5 = 1
6 % 5 = 1 || 6 / 5 = 1
7 % 5 = 2 || 7 / 5 = 1
и так далее. тенденция ясна?
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 10:56  [ТС] 16
Цитата Сообщение от fasked Посмотреть сообщение
и так далее. тенденция ясна?
Вполне, спасибо!
С этим более или менее разобрался. Осталось просто попрактиковаться, чтобы уже до конца понять что откуда.
Но вот вопрос по поводу отображения лишнего символа - еще в силе.
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 11:29 17
Вот без лишних символов:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <cstdlib>
#include <algorithm>
 
enum suit
{
    diamonds = 0,
    spades,
    hearts,
    clubs
};
 
class card
{
    suit su;
    int value;
 
public:
 
    card (int val)
        : su (suit (val / 13)), value ((val % 13) + 2)
    {
    }
 
    card ()
        : su (suit (0)), value (0)
    {
    }
 
    friend std::ostream & operator << (std::ostream& os, const card & rhs)
    {
        // Выводим достоинство карты
        switch (rhs.value)
        {
        case 11:
            os << "J";
            break;
        case 12:
            os << "Q";
            break;
        case 13:
            os << "K";
            break;
        case 14:
            os << "A";
            break;
        default:
            os << rhs.value;
        }
        // Выводим масть карты
        switch (rhs.su)
        {
        case clubs:
 
            os << " Clubs"; //os << static_cast<char>(5);
            break;
        case diamonds:
            os << " Diamonds"; //os << static_cast<char>(4);
            break;
        case hearts:
            os << " Hearts"; //os << static_cast<char>(3);
            break;
        case spades:
            os << " Spades"; //os << static_cast<char>(6);
        }
        return os;
    }
};
 
class deck
{
    static const size_t D_SIZE = 52;
    card m_deck[D_SIZE];
 
public:
 
    deck ()
    {
        for (size_t i = 0; i < D_SIZE; ++i)
            m_deck[i] = card (i);
    }
 
    void shuffle ()
    {
        std::random_shuffle (m_deck, m_deck + D_SIZE);
    }
 
    void display () const
    {
        for (size_t i = 0; i < D_SIZE; ++i, std::cout << std::endl)
            std::cout << m_deck[i];
    }
};
 
int main (void)
{
    deck hand;
    std::cout << "Before shuffling: " << std::endl;
    hand.display ();
    hand.shuffle ();
    std::cout << "After shuffling: " << std::endl;
    hand.display ();
    return EXIT_SUCCESS;
}
0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 11:41  [ТС] 18
Понимаете в чем дело))
Многое из того, что Вы мне здесь показали - я вообще впервые вижу. Я ж еще только учусь.
Строки типа:
C++
1
friend std::ostream & operator << (std::ostream& os, const card & rhs)
меня пока-что вообще в ступор вводят.
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 11:44 19
half-node, это перегрузка дружественного оператора вывода в поток, для того, чтобы можно было написать так:
C++
1
2
card c(34);
std::cout << c << std::endl;

Не по теме:

ЗЫ. Если проходите классы, то и перегрузку операторов тоже должны проходить. Перегрузка оператора вывода - вообще классический случай, он должен быть в любой книжке описан

0
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
19.08.2010, 11:49  [ТС] 20
перегрузку функций проходил, операторов - пока что нет.
Дело в том, что Лафоре учит от легкого к сложному.
Например, сначала он предложил изучить структуры, потом функции, классы, потом массивы и строки, уже потом указатели (о ссылках он рассказывал в главе о функциях) и т.д и т.п.

Добавлено через 2 минуты
http://www.piter.com/book.phtml?978594723302
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2010, 11:49

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

Из колоды карт (36 карт) наудачу берут пять карт
Здравствуйте! С теорией вероятностей всегда имел проблему, не могу никак сообразить. Задание такое:...

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

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

Сколькими способами из колоды в 36 карт можно выбрать неупорядоченный набор из 5 карт
Добрый день. Помогите, пожалуйста с этими задачами. Вообще не понимаю, как то делать 2)...


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

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

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