Страница 1 из 1

Массив структур и функции

Добавлено: 08 дек 2009, 22:46
Dragon
Есть задачка. Необходимо подсчитать кол-во комбинаций карт на руках у игрока в 5-карточном покере. Реализовать через массив структур.
Вобщем-то вопрос в том, как передать функции (без указателей т.к. пока с ними не знаком и данная задача их использвание не подразумевает!) массив структур?

Код: Выделить всё

#include <iostream>
const int ARRAY = 5;

struct Poker
{
   char value[3]; //значение карты (такое, временное, решение взято из-за десятки)
   char suit; //масть
};

void array_fill(); //???

int main()
{
   Poker player[ARRAY];
   array_fill(); //???
   return 0;
}
Если структура содержит массивы, то через ссылку передать можно.
А когда это массив структур...

Хотелось бы узнать, реально ли и как это сделать.
Заранее спасибо за помощь.

Re: Массив структур и функции

Добавлено: 09 дек 2009, 02:19
Romeo
Можно так:

Код: Выделить всё

void array_fill(Poker[] arrPoker);
Фактически, это тоже скрытая форма указателя, но отсутствие звёздочки должно тебя успокоить (ибо с указателями ты ещё не знаком).

Re: Массив структур и функции

Добавлено: 10 дек 2009, 10:35
Dragon
Спасибо.

Правда там ошибки компилятора, собственно решил заполнять массив в основной программе (пока с указателями не знаком), а для передачи в функцию использую 2 временные переменные :)

Re: Массив структур и функции

Добавлено: 11 дек 2009, 01:05
Romeo
Давай сюда код. Поругаем и наставим на путь истинный :)

Re: Массив структур и функции

Добавлено: 11 дек 2009, 10:41
Dragon
Немного переработал структуру.

Код: Выделить всё

#include <iostream>
#include <cstdlib>

const int ARRAY_SIZE = 5;

struct Poker
{
    int value;
    char suit;
};

void check_suit(char suit);

int transform(char ch_value);

int main()
{
    using namespace std;
    Poker player[ARRAY_SIZE];
    char ch_value, ch_suit;

  cout << "Enter 5 values of cards with suit:\n"
         << "(2-9 - 2-9, T - 10, J - Jack, Q - Queen, K - King, A - Ace)\n"
         << "(S - spades, H - hearts, D - diamonds, C - clubs)\n";
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        cout << "Card " << i+1 << " value : ";
        cin >> ch_value;
        player[i].value = transform(ch_value);
        cout << "Card " << i+1 << " suit : ";
        cin >> player[i].suit;

        //Проверяем корректность ввода масти
        ch_suit = player[i].suit;
        check_suit(ch_suit);
    }

    return 0;
}

//Используем библиотеку классов cstdlib
void check_suit(char suit)
{
    switch(suit)
    {
        case 'S':
        case 's':
        case 'H':
        case 'h':
        case 'D':
        case 'd':
        case 'C':
        case 'c':
            break;
        default:
            std:: cout << "Error. Illegal suit of card.\n";
            exit(1);
    }
}

//Используем библиотеку cstdlib
int transform(char ch_value)
{
    switch(ch_value)
    {
        case '2':
            return 2;
        case '3':
            return 3;
        case '4':
            return 4;
        case '5':
            return 5;
        case '6':
            return 6;
        case '7':
            return 7;
        case '8':
            return 8;
        case '9':
            return 9;
        case 'T':
        case 't':
            return 10;
        case 'J':
        case 'j':
            return 11;
        case 'Q':
        case 'q':
            return 12;
        case 'K':
        case 'k':
            return 13;
        case 'A':
        case 'a':
            return 1;
        default:
            std::cout << "Error. Illegal card value.\n";
            exit(1);
    }
}