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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
#1

Массив карт - C++

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

Нужно ввести поток карт, для дальнейшей сортировки. Карта представлена как два символа - (вес) + (масть). Вводится сразу два символа, без пробелов. Дальше идет следующая карта через пробел. Сортировать буду по весу. Так понял, что лучше организовать массив из массива Char [2]. Как это сделать лучше?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 10:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив карт (C++):

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

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

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

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

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

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

14
Integrity93
Сообщений: n/a
23.07.2012, 10:53 #2
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 10:59  [ТС] #3
Цитата Сообщение от Integrity93 Посмотреть сообщение
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
Спасибо, а есть другие варианты? Я даже с vector не знаком толком.
0
Intel~lect
135 / 124 / 2
Регистрация: 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
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 11:09  [ТС] #5
Я подумал про структуры, но тогда такой ввод сделать будет невозможно
2С QD ТС
Нужно же будет разделять пробелами элементы структуры.

Добавлено через 4 минуты
Может просто ввести строку, из 23 символов (13 карт и пробелы), и считать их через 2?
0
Intel~lect
135 / 124 / 2
Регистрация: 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
Prin53
2 / 2 / 0
Регистрация: 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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
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
Prin53
2 / 2 / 0
Регистрация: 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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
23.07.2012, 17:05 #10
Так и должно быть, всё сортирнулось правильно.
0
Prin53
2 / 2 / 0
Регистрация: 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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
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
Prin53
2 / 2 / 0
Регистрация: 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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
23.07.2012, 17:33 #14
Да просто всё. Имеем:
2== 50
...
9== 57

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

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

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

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

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

НУ и остальныфе буквы по возрастанию. Главное не больше 255!
Отлично, спасибо. Первая часть сделана.
0
23.07.2012, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 17:46
Привет! Вот еще темы с ответами:

Перетасовка карт в 52 листа - C++
Имитировать перетасовку ново колоды игральных карт в 52 листа многократным приминением операций сдвига и &quot;врезки&quot; так, чтобы никакие две...

Чтение магнитных карт - C++
Всем привет. Кто-нить имеет опыт программирования софта для считки данных с пластиковых магнитных карт совместимых со стандартами ISO...

Как раздать по 5 карт - C++
Из 5 издания Дэйтелов. Задача Создается массив 4х13 и иниц. случайными значениями от 1 - 52(номер) затем создаются 2 массива: с...

Клас колода карт - C++
Класс CardDeck (колода карт). Класс сохраняет массив из 32 карт (cards), а также текущую карту (currentCard). Надо написать функцию для...


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

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

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