Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2013, 23:16   #11
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

намекните чем-то незнаю что и где добавить??????????????
mixon-21 вне форума Ответить с цитированием
Старый 13.06.2013, 23:24   #12
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Тебе показали ошибочный фрагмент кода, исправили его, просто посмотри внимательно, и сам поймешь что и чем заменить.
RussDragon вне форума Ответить с цитированием
Старый 13.06.2013, 23:56   #13
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
Сообщение от RussDragon Посмотреть сообщение
Тебе показали ошибочный фрагмент кода, исправили его, просто посмотри внимательно, и сам поймешь что и чем заменить.
Нет с сравнением кто выиграл кто проиграл понятно.
Я имею в виду что програма выдает одинаковые карты.
сразу не досмотрел. Вот по этому мне и нада Ваша помрщь.........
mixon-21 вне форума Ответить с цитированием
Старый 14.06.2013, 00:13   #14
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Ну так хоть самым простым образом, int массив на количество видов карт, к каждому элементу присвойте значение 4, и при выдаче проверяйте, не равен ли этот элемент нулю — нет, выдавайте и вычитайте 1 из него. (Не надо мне говорить, что можно сделать лучше. Я знаю, но это один из самых простых способов)
RussDragon вне форума Ответить с цитированием
Старый 14.06.2013, 00:24   #15
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
Сообщение от RussDragon Посмотреть сообщение
Ну так хоть самым простым образом, int массив на количество видов карт, к каждому элементу присвойте значение 4, и при выдаче проверяйте, не равен ли этот элемент нулю — нет, выдавайте и вычитайте 1 из него. (Не надо мне говорить, что можно сделать лучше. Я знаю, но это один из самых простых способов)
НА ПРИМЕРЕ МОЖНО плиз.
mixon-21 вне форума Ответить с цитированием
Старый 14.06.2013, 00:38   #16
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Предположим что мы играем колодой в 54 карты, там 12 видов карт, значит, массив будет такой:
cards[12] = {4,4,4,4,4,4,4,4,4,4,4,4}
0 индекс это тройки.
Проверка будет такой:
if (cards[0] != 0)
{
Do something
Cards[0]--;
}
Сейчас 0:40, я пишу с телефона, так что прошу не ругаться другим программистам за плохое решение или ошибку в коде. Для автора этого хватит с головой.
RussDragon вне форума Ответить с цитированием
Старый 14.06.2013, 00:45   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Ладно, ругаться не буду
Предложу свой вариант:
Код:
void
swap(unsigned char *a, unsigned char *b)
{
    unsigned char c = *a;
    *a = *b;
    *b = c;
}
...
unsigned char cards[4 * s];
int i, j;
for (i = 0; i < 4; ++i)
    for (j = 0; j < s; ++j)
        cards[s * i + j] = j << 2 + i;
for (i = 0; i < 4 * s; ++i)
    swap(&cards[i], &cards[rand() % (4 * s)]);
Таким образом получим массив из 4 * s перемешанных карт.
Карта: 2 младших бита - номер масти от 0 до 3
остальные биты - номер карты от 0 до 12

Игроку и компьютеру остается последовательно брать карты из этой колоды.
Если игра предполагается бесконечной, то нужно после того, как будет выбрана последняя карта из этого массива, заново его построить.

В последнем цикле, а именно перемешивании, не уверен.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
... существует всего два рабочих способа/алгоритм получить набор данных с гарантией неповторения:
- запоминать все выпавшие значения и на каждом шаге цикла сравнивать очередное случайное число с выпавшими ранее
- заполнить массив неповторяющимися числам (можно прямо подряд), правильно его перемешать (на форуме неоднократно рассказывалось, как правильно тасовать числа с пруфлинком), потом просто брать числа из перемешанного массива по одному.

опять таки, оба этих способа неоднократно обсуждались на форуме, и, очевидно, что выбор того или иного способа явно зависит от конкретной задачи (ну, например, если есть база на 60000 тыс.слов и нужно достать из неё 100 случайных неповторяющихся слов, то желательно брать первый алгоритм, а если дана колода карт и нужно реализовать игру в "21", то нужно брать второй алгоритм (первый в данном случае не подходит, по крайней мере, без модификаций)..
Ищу пруфлинки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.06.2013 в 00:59.
BDA вне форума Ответить с цитированием
Старый 14.06.2013, 01:02   #18
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Боюсь, у автора сейчас будет куча вопросов, а точнее, куда это вставить.
Кстати, младшие биты это 0000 0000?
RussDragon вне форума Ответить с цитированием
Старый 14.06.2013, 01:05   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от RussDragon Посмотреть сообщение
Боюсь, у автора сейчас будет куча вопросов, а точнее, куда это вставить.
Посмотрим
Цитата:
Сообщение от RussDragon Посмотреть сообщение
Кстати, младшие биты это 0000 0000?
Ага, в данном случае (не вдаваясь в подробности об архитектуре - Порядок байтов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.06.2013 в 01:08.
BDA вне форума Ответить с цитированием
Старый 18.06.2013, 16:27   #20
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Опираясь на пост, цикл перемешивания нужен такой:
Код:
for (i = 0; i < 4 * s - 1; ++i)
    swap(&cards[i], &cards[i + rand() % (4 * s - i)]);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
игра 21 "очко" mixon-21 Общие вопросы C/C++ 3 10.06.2013 20:05
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
игра "worms", доработка игры "косынка". C# den790 Фриланс 11 09.12.2011 10:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Игра "четный" "нечетный" bigcat Помощь студентам 1 01.03.2008 00:24