Бьет ли карта 1 карту 2 - C (СИ)
Формулировка задачи:
Помогите пожалуйста с программой. Что-то не так, не могу понять, что именно.
struct card { /* масть карт */ enum {spades, clubs, diamonds, hearts} suit; /* достоинство карт */ enum {six, seven, eight, nine, ten, jack, queen, king, ace} value; } c1, c2;
Описать логическую функцию Kick(с1, с2, сs), проверяющую, бьёт ли карта с1 карту с2, с учётом того, что масть cs является козырной.
#include "stdafx.h" #include <stdio.h> #include <locale.h> #include <stdlib.h> #include <conio.h> struct card { /*масть карт */ enum { пики, трефы, бубны, червы } mast; /* достоинство карт */ enum { шесть, семь, восемь, девять, десять, валет, дама, король, туз } dost; } c1, c2; int Kick(card c1, card c2, char cs); /*--------------------------------------------------------------------*/ /*Основная часть программы*/ int main(void) { char cs=0; int k; setlocale(LC_ALL, "Russian"); printf("Введите масть 1 карты - "); scanf("%lf\n", &c1.mast); printf("Введите достоинство 1 карты - "); scanf("%lf\n", &c1.dost); printf("Введите масть 2 карты - "); scanf("%lf\n", &c2.mast); printf("Введите достоинство 2 карты - "); scanf("%lf\n", &c2.dost); printf("Введите масть козырной карты - "); scanf("%lf\n", &cs); Kick(c1,c2,cs); return 0; } int Kick(card c1, card c2, char cs) { char k; k = ((c1.mast == cs) && (c2.mast != cs)) || ((c1.mast == c2.mast) && (c1.dost < c2.dost)); if (c1.mast == c2.mast) //если масти одинаковые if (c1.dost > c2.dost) return 1; else { return 0; } else //если масти не одинаковые { if (c1.mast == cs) //если козырь return 1; else return 0; } }
Решение задачи: «Бьет ли карта 1 карту 2»
textual
Листинг программы
#include <stdio.h> #include <stdbool.h> struct card { enum {spades, clubs, diamonds, hearts} suit; enum {six, seven, eight, nine, ten, jack, queen, king, ace} value; } c1, c2; int enter_card_suite() { int suit; bool wrongSuit; do { char suitSymbol; printf("Please enter suit symbol for a trump (s, c, d or h): "); scanf("%c", &suitSymbol); getchar(); wrongSuit = false; switch (suitSymbol) { case 's': suit = spades; break; case 'c': suit = clubs; break; case 'd': suit = diamonds; break; case 'h': suit = hearts; break; default: printf("Wrong suit symbol '%c'.\n", suitSymbol); wrongSuit = true; } } while (wrongSuit); return suit; } int main() { c1.suit = clubs; c1.value = nine; c2.suit = hearts; c2.value = queen; int cs = enter_card_suite(); printf("Trump suit (as integer): %d\n", cs); if (c1.suit == cs) puts("First card is a trump."); if (c2.suit == cs) puts("Second card is a trump."); }
Объяснение кода листинга программы
- Структура
card
объявляет две переменные типаenum
для хранения масти и значения карты. - Функция
enter_card_suite
запрашивает у пользователя ввод масти и проверяет его с помощью оператораswitch
. - Если введенный символ масти соответствует одному из значений в
switch
, соответствующее значениеenum
присваивается переменнойsuit
. - Если введенный символ масти не соответствует ни одному из значений в
switch
, выводится сообщение об ошибке и продолжается циклdo-while
. - Ввод масти повторяется до тех пор, пока не будет введено правильное значение.
- После ввода правильного значения масти функция возвращает его в качестве возвращаемого значения.
- В функции
main
объявляются две переменные типаcard
для хранения карт. - Первая карта устанавливается на масть
clubs
и значениеnine
. - Вторая карта устанавливается на масть
hearts
и значениеqueen
. - Функция
enter_card_suite
вызывается для ввода масти. - Выводится введенная масть.
- С помощью условных операторов проверяется, является ли первая или вторая карта мастью, введенной с помощью функции
enter_card_suite
. - Если первая или вторая карта является мастью, выводится соответствующее сообщение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д