Форум программистов, компьютерный форум CyberForum.ru

Программа про карты - C++

Восстановить пароль Регистрация
 
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 20:18     Программа про карты #1
Дана программа

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 <ctime>
using namespace std;
 
enum Suit { clubs, diamonds, hearts, spades };
 
const int jack = 11;
const int queen = 12;
const int king = 13;
const int ace = 14;
 
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 main ( )
{setlocale(LC_ALL,"Rus");
  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 );
  }
  
  cout << "Исходная колода:\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 << "\nПеремешанная колода:\n";
  int hj=0;
  for ( j = 0; j < 52; j++ )
  {
    deck [ j ].display ( );
    cout << "  ";
    if ( !( ( j + 1 ) % 13 ) ) 
    {
    {if(hj==12)
    {cout<<"Колода "<<1<<"-ого игрока "<<endl;}
    else if(hj==25)
        {cout<<"Колода "<<2<<"-ого игрока "<<endl;}
    else if(hj==38)
    {cout<<"Колода "<<3<<"-ого игрока "<<endl;}
    else if(hj==51)
        {cout<<"Колода "<<4<<"-ого игрока "<<endl;}
    cout << endl;
    cout << endl;
    cout << endl;
    hj++;
    }
    }}
  cin.get();
   cin.get();
  return 0;
}
Вопрос: почему данная структура не работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for ( j = 0; j < 52; j++ )
  {
    deck [ j ].display ( );
    cout << "  ";
    if ( !( ( j + 1 ) % 13 ) ) 
    {
    {if(hj==12)
    {cout<<"Колода "<<1<<"-ого игрока "<<endl;}
    else if(hj==25)
        {cout<<"Колода "<<2<<"-ого игрока "<<endl;}
    else if(hj==38)
    {cout<<"Колода "<<3<<"-ого игрока "<<endl;}
    else if(hj==51)
        {cout<<"Колода "<<4<<"-ого игрока "<<endl;}
    cout << endl;
    cout << endl;
    cout << endl;
    hj++;
    }
    }}
А эта работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
int hj=0;
  for ( j = 0; j < 52; j++ )
  {
    deck [ j ].display ( );
    cout << "  ";
    if ( !( ( j + 1 ) % 13 ) ) // начинаем новую строку после каждой 13-й карты
    {cout<<"Колода "<<hj+1<<"-ого игрока "<<endl;cout << endl;
    cout << endl;
    cout << endl;}
    hj++;
  }
  cin
???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.07.2011, 20:29     Программа про карты #2
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for ( j = 0; j < 52; j++ )
  {
    deck [ j ].display ( );
    cout << "  ";
    if ( !( ( j + 1 ) % 13 ) ) 
        {
        {if(hj==12)
        {cout<<"Колода "<<1<<"-ого игрока "<<endl;}
        else if(hj==25)
                {cout<<"Колода "<<2<<"-ого игрока "<<endl;}
        else if(hj==38)
        {cout<<"Колода "<<3<<"-ого игрока "<<endl;}
        else if(hj==51)
                {cout<<"Колода "<<4<<"-ого игрока "<<endl;}
        cout << endl;
        cout << endl;
        cout << endl;
        }}
        hj++;
        }
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
14.07.2011, 20:30     Программа про карты #3
parkito, смотри:
j меняется от 0 до 51, при этом условие ( !( ( j + 1 ) % 13 ) ) выполнится всего 4 раза, т.е. hj максимум будет равно 4. Таким образом условия (hj==12), (hj==38) и (hj==51) никогда не выполняются.
Не знаю, что тебе надо, но может есть смысл вынести hj++; за тело if ( !( ( j + 1 ) % 13 ) ) ?

Добавлено через 15 секунд
опоздал...
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 20:41  [ТС]     Программа про карты #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
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 <ctime>
using namespace std;
 
enum Suit { clubs, diamonds, hearts, spades };
 
const int jack = 11;
const int queen = 12;
const int king = 13;
const int ace = 14;
 
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 main ( )
{setlocale(LC_ALL,"Rus");
  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 );
  }
  
  cout << "Исходная колода:\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 << "\nПеремешанная колода:\n";
  int hj=0;
  for ( j = 0; j < 52; j++ )
  {
    deck [ j ].display ( );
    cout << "  ";
    if ( !( ( j + 1 ) % 13 ) ) 
        {
        {if(hj==0)
        {cout<<"Колода "<<1<<"-ого игрока "<<endl;}
        else if(hj==1)
                {cout<<"Колода "<<2<<"-ого игрока "<<endl;}
        else if(hj==2)
        {cout<<"Колода "<<3<<"-ого игрока "<<endl;}
        else if(hj==3)
                {cout<<"Колода "<<4<<"-ого игрока "<<endl;}
        cout << endl;
        cout << endl;
        cout << endl;
        hj++;
        }
        }}
  cin.get();
   cin.get();
  return 0;
}
Yandex
Объявления
14.07.2011, 20:41     Программа про карты
Ответ Создать тему
Опции темы

Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru