Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
1

Массив карт

23.07.2012, 10:47. Просмотров 2839. Ответов 14
Метки нет (Все метки)

Нужно ввести поток карт, для дальнейшей сортировки. Карта представлена как два символа - (вес) + (масть). Вводится сразу два символа, без пробелов. Дальше идет следующая карта через пробел. Сортировать буду по весу. Так понял, что лучше организовать массив из массива Char [2]. Как это сделать лучше?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2012, 10:47
Ответы с готовыми решениями:

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

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

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

Колода карт
реализация колоды карт :wall:

14
Integrity93
23.07.2012, 10:53 2
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 10:59  [ТС] 3
Цитата Сообщение от Integrity93 Посмотреть сообщение
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
Спасибо, а есть другие варианты? Я даже с vector не знаком толком.
0
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 11:02 4
Может карту представить как структуру? Потом объявить массив этих структур:
C++
1
2
3
4
5
6
7
8
9
10
struct Karta
{
   char weight;
   char mast;
};
 
int main()
{
   Karta koloda[52];
}
1
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 11:09  [ТС] 5
Я подумал про структуры, но тогда такой ввод сделать будет невозможно
2С QD ТС
Нужно же будет разделять пробелами элементы структуры.

Добавлено через 4 минуты
Может просто ввести строку, из 23 символов (13 карт и пробелы), и считать их через 2?
0
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 11:09 6
Цитата Сообщение от Prin53 Посмотреть сообщение
Я подумал про структуры, но тогда такой ввод сделать будет невозможно
Почему невозможно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Karta
{
   char weight;
   char mast;
};
 
Karta koloda[13];
 
for (int i=0; i<13; i++)
{
   cout << "Введите вес карты: ";
   cin.get(koloda[i].weight);
 
   cout << "Введите масть карты: ";
   cin.get(koloda[i].mast);
 
   cin.get();  // считать пробел между картами
}
1
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 11:56  [ТС] 7
Просто в задании сказано, что на вход идет поток карт.

Добавлено через 44 минуты
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
#include <iostream>
#include <string>
using namespace std;
struct Karta
{
   char weight;
   char mast;
};
void Sort(Karta *koloda) 
{ 
    Karta trash; 
    for (int i = 0; i < 13; i++)
        for (int j=0; j < 13-i-1; j++) 
            if (koloda[j].weight > koloda[j+1].weight)
            {
                trash = koloda[j]; 
                koloda[j] = koloda[j+1];
                koloda[j+1] = trash;
            }
}
 
void main()
{ 
    Karta koloda[13];    
    for (int i=0; i<13; i++)
    {
        cout << "WE: ";
        cin>>koloda[i].weight;
 
        cout << "MA: ";
        cin>>koloda[i].mast;
 
    }
 
    for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 1;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
    Sort(koloda);
    for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 1)
            koloda[i].weight = 'A';
        if (koloda[i].weight == 10)
            koloda[i].weight = 'T';
        if (koloda[i].weight == 11)
            koloda[i].weight = 'J';
        if (koloda[i].weight == 12)
            koloda[i].weight = 'Q';
        if (koloda[i].weight == 13)
            koloda[i].weight = 'K';
    }
    for (i = 0; i < 13; i++)
        cout<<koloda[i].weight<<koloda[i].mast<<" ";
 
}
Сделал сортировку. Но она сортирует сначала буквы, а потом цифры. Подскажите, пожалуйста.
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
23.07.2012, 16:18 8
Вроде это неправильно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 1;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
У тебя туз идёт перед дамой и королём, а он их старше
1
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 16:51  [ТС] 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
Спасибо. Но все равно, при вводе такой строки
2С QD ТС AD бС 3D TD ЗН 5Н 7Н AS JH КН
Выводит
TC TD JH QD KH AD AC 2C 3D 3H 5H 6C 7H
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
23.07.2012, 17:05 10
Так и должно быть, всё сортирнулось правильно.
0
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:15  [ТС] 11
Цитата Сообщение от kravam Посмотреть сообщение
Так и должно быть, всё сортирнулось правильно.
По моему, должно быть так
2C 3D 3H 5H 6C 7H TC TD JH QD KH AD AC
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
23.07.2012, 17:22 12
Смотри
C++
1
2
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
'A' у тебя 14, а '2' у тебя не 2, а 50, поэтому у тебя цифры в конце, они больше букв (50> 14)
1
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:24  [ТС] 13
Цитата Сообщение от kravam Посмотреть сообщение
Смотри
C++
1
2
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
'A' у тебя 14, а '2' у тебя не 2, а 50, поэтому у тебя цифры в конце, они больше букв (50> 14)
Понятно. Не подскажешь, что предпринять? Идеи крутятся только о создании дублирующей структуры, уже integer-ов или преобразованием типов.
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
23.07.2012, 17:33 14
Да просто всё. Имеем:
2== 50
...
9== 57

++++++++++++++++++++++++++++++++++++++++

А ты сделай так:
T== 58

НУ и остальныфе буквы по возрастанию. Главное не больше 255!
1
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:46  [ТС] 15
Цитата Сообщение от kravam Посмотреть сообщение
Да просто всё. Имеем:
2== 50
...
9== 57

++++++++++++++++++++++++++++++++++++++++

А ты сделай так:
T== 58

НУ и остальныфе буквы по возрастанию. Главное не больше 255!
Отлично, спасибо. Первая часть сделана.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2012, 17:46

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

Цикл for и 56 карт
Выводит 14! карт в каждой строке. Я не понял как это получается. // 7_6.cpp: определяет точку...

Колода карт
Здравствуйте. Имеется код программы, которая тасует колоду карт и вытягивает необходимое количество...

Моделирование раздачи карт
Здравствуйте, при выполнение одного задания из книги возникла трудность. Нужно смоделировать...

Перетасовка карт в 52 листа
Имитировать перетасовку ново колоды игральных карт в 52 листа многократным приминением операций...


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

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

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