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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Есть задачка. Необходимо подсчитать кол-во комбинаций карт на руках у игрока в 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;
}
Если структура содержит массивы, то через ссылку передать можно.
А когда это массив структур...

Хотелось бы узнать, реально ли и как это сделать.
Заранее спасибо за помощь.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Можно так:

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

void array_fill(Poker[] arrPoker);
Фактически, это тоже скрытая форма указателя, но отсутствие звёздочки должно тебя успокоить (ибо с указателями ты ещё не знаком).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Спасибо.

Правда там ошибки компилятора, собственно решил заполнять массив в основной программе (пока с указателями не знаком), а для передачи в функцию использую 2 временные переменные :)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Давай сюда код. Поругаем и наставим на путь истинный :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Немного переработал структуру.

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

#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);
    }
}
Ответить