Бьет ли карта 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
. - Если первая или вторая карта является мастью, выводится соответствующее сообщение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д