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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 22:44   #1
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию игра в карты

задана логическая структура
struct card{
//масть карт
enum{spades,clubs,diamonds,hearts} suit;
//достоинство карт
enum{six,seven,eight,nine,ten,jack, queen,king,ace} value;
}c1,c2; //масть и домтоинство карт
описать логическую функцию kick (c1, c2, cs), проверяющую, бьёт ли карта с1 карту с2, с учётом того, что масть сs является козырной.
Вот код. Компилятор естественно не выдаёт ошибки. Но при работе программы результат выводится, только если брать карты одной масти. Как сделать так, чтобы с картами разных мастей программа работала правильно?
Вот сам код: (visual studio)

//программа проверяет, бьёт ли карта с1 карту с2, с учётом того, что масть сs является козырной
#include<stdio.h>
struct card{
//масть карт
enum{spades,clubs,diamonds,hearts} suit;
//достоинство карт
enum{six,seven,eight,nine,ten,jack, queen,king,ace} value;
}c1,c2; //масть и домтоинство карт
void kick();
void main() {
printf("Масти:");
printf("\nПики = 1");
printf("\nТрефы = 2");
printf("\nБубны = 3");
printf("\nЧервы = 4");
printf("\n\nДостоинство: (6, 7, 8, 9, 10, валет = 2, дама = 3, король = 4, туз = 1");

printf("\nВведите масть первой карты: ");
scanf("%d",&c1.suit);
printf("Введите достоинство первой карты: ");
scanf("%d",&c1.value);
printf("Введите масть второй карты: ");
scanf("%d",&c2.suit);
printf("Введите достоинство второй карты: ");
scanf("%d",&c2.value);

kick();
}
void kick()
{
int cs;
printf("Введите козырь: ");
scanf("%d",&cs);
if(c1.suit==c2.suit) //масть первой карты равна масти второй карты
{
printf("%d",c1.value>c2.value); //достоинство первой карты равно достоинству второй карты
}
if(c1.suit!=c2.suit) //масть первой карты не равна достоинству второй карты
{
printf("%d",c1.suit==cs); //масть является козырной
}
}
imperceptible4462 вне форума Ответить с цитированием
Старый 17.09.2010, 18:31   #2
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

Ну что, никто не может помочь?
imperceptible4462 вне форума Ответить с цитированием
Старый 17.09.2010, 18:41   #3
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

if(c1.suit==c2.suit) //масть первой карты равна масти второй карты
ZaRDaK вне форума Ответить с цитированием
Старый 17.09.2010, 19:06   #4
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

И что в этой строчке?
imperceptible4462 вне форума Ответить с цитированием
Старый 17.09.2010, 19:07   #5
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Ошибка, внезапно! Я просто так строчки не цитирую.
Вобще лучше перепиши функцию полностью.
ZaRDaK вне форума Ответить с цитированием
Старый 17.09.2010, 20:08   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А что не так? Насколько я могу судить (не знаю язык C), но всё написано верно (ну, кроме комментариев - там неверно )

В чём выражается неработоспособность программы?
Для каких значений c1 c2 и cs программа работает неверно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2010, 21:20   #7
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Вся функция неправильная.
Оно выводит результат сравнения c1.value>c2.value если масти карт равны.
И выводит результат сравнения c1.suit==cs если масти не равны. А вот прокомментировано почти верно.
Да, еще - в задаче kick (c1, c2, cs) (скорее всего с результатом типа bool)
А в коде void kick().
ZaRDaK вне форума Ответить с цитированием
Старый 17.09.2010, 22:05   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

простите, уважаемый, а Вы в "дурака" играете?...

Имхо, всё верно.
Цитата:
Оно выводит результат сравнения c1.value>c2.value если масти карт равны.
Логично. Если масти карт одинаковы, тогда, если значение (величина) карты c1 больше, чем величина карты c2, тогда карта c1 "бьёт" карту, если же масти равны, а величина с1 < c2, тогда карта c1 не бьёт карту с2

Цитата:
выводит результат сравнения c1.suit==cs если масти не равны.
Точно. Если масти не равны, тогда, если карта c1 козырная, тогда карта c2 не козырная, и c1 "бьёт" её НЕЗАВИСИМО от величин карт c1 и с2 (козырная шестёрка бьёт любого (некозырного) туза!)
А если c1 не козырная и их масти не равны, то c1 не бьёт c2.
я не вижу тут косяков...


а вот насчёт того, что kick должна быть логической функцией, я с Вами полностью согласен:
Цитата:
описать логическую функцию kick
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2010, 22:18   #9
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Цитата:
Но при работе программы результат выводится, только если брать карты одной масти. Как сделать так, чтобы с картами разных мастей программа работала правильно?
И, да - не выражайтесь двусмысленно.

Последний раз редактировалось ZaRDaK; 17.09.2010 в 22:24. Причина: оформил теги
ZaRDaK вне форума Ответить с цитированием
Старый 17.09.2010, 22:22   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
>>Но при работе программы результат выводится, только если брать карты одной масти. Как сделать так, чтобы с картами разных мастей программа работала правильно?
и? что Вы этой цитатой хотели сказать?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контрольные карты Умпут Microsoft Office Excel 0 07.07.2010 09:37
Карты изображений Syltan HTML и CSS 1 06.04.2010 01:48
вытягивание карты Superlotles Общие вопросы C/C++ 2 28.03.2010 17:49
Карты - начинающий Scheres HTML и CSS 7 22.07.2009 10:30
игра про карты например (дурак) alex@x Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.12.2007 15:53