Бьет ли карта 1 карту 2 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с программой. Что-то не так, не могу понять, что именно.
Листинг программы
  1. struct card
  2. {
  3. /* масть карт */
  4. enum {spades, clubs, diamonds, hearts} suit;
  5. /* достоинство карт */
  6. enum {six, seven, eight, nine, ten, jack, queen, king, ace} value;
  7. } c1, c2;

Описать логическую функцию Kick(с1, с2, сs), проверяющую, бьёт ли карта с1 карту с2, с учётом того, что масть cs является козырной.

Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. struct card
  7. {
  8. /*масть карт */
  9. enum { пики, трефы, бубны, червы } mast;
  10. /* достоинство карт */
  11. enum { шесть, семь, восемь, девять, десять, валет, дама, король, туз } dost;
  12. } c1, c2;
  13. int Kick(card c1, card c2, char cs);
  14. /*--------------------------------------------------------------------*/
  15. /*Основная часть программы*/
  16. int main(void)
  17. {
  18. char cs=0;
  19. int k;
  20. setlocale(LC_ALL, "Russian");
  21. printf("Введите масть 1 карты - ");
  22. scanf("%lf\n", &c1.mast);
  23.  
  24. printf("Введите достоинство 1 карты - ");
  25. scanf("%lf\n", &c1.dost);
  26. printf("Введите масть 2 карты - ");
  27. scanf("%lf\n", &c2.mast);
  28. printf("Введите достоинство 2 карты - ");
  29. scanf("%lf\n", &c2.dost);
  30. printf("Введите масть козырной карты - ");
  31. scanf("%lf\n", &cs);
  32. Kick(c1,c2,cs);
  33. return 0;
  34. }
  35. int Kick(card c1, card c2, char cs)
  36. {
  37. char k;
  38. k = ((c1.mast == cs) && (c2.mast != cs)) || ((c1.mast == c2.mast) && (c1.dost < c2.dost));
  39. if (c1.mast == c2.mast) //если масти одинаковые
  40. if (c1.dost > c2.dost) return 1;
  41. else
  42. {
  43. return 0;
  44. }
  45. else //если масти не одинаковые
  46. {
  47. if (c1.mast == cs) //если козырь
  48. return 1;
  49. else
  50. return 0;
  51. }
  52. }

Решение задачи: «Бьет ли карта 1 карту 2»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3.  
  4. struct card
  5. {
  6.     enum {spades, clubs, diamonds, hearts} suit;
  7.     enum {six, seven, eight, nine, ten, jack, queen, king, ace} value;
  8. } c1, c2;
  9.  
  10. int enter_card_suite()
  11. {
  12.     int suit;
  13.     bool wrongSuit;
  14.  
  15.     do
  16.     {
  17.         char suitSymbol;
  18.         printf("Please enter suit symbol for a trump (s, c, d or h): ");
  19.         scanf("%c", &suitSymbol);
  20.         getchar();
  21.         wrongSuit = false;
  22.  
  23.         switch (suitSymbol)
  24.         {
  25.             case 's':  suit = spades; break;
  26.             case 'c':  suit = clubs; break;
  27.             case 'd':  suit = diamonds; break;
  28.             case 'h':  suit = hearts; break;
  29.             default:
  30.                 printf("Wrong suit symbol '%c'.\n", suitSymbol);
  31.                 wrongSuit = true;
  32.         }
  33.     }
  34.     while (wrongSuit);
  35.  
  36.     return suit;
  37. }
  38.  
  39. int main()
  40. {
  41.     c1.suit = clubs; c1.value = nine;
  42.     c2.suit = hearts; c2.value = queen;
  43.  
  44.     int cs = enter_card_suite();
  45.  
  46.     printf("Trump suit (as integer): %d\n", cs);
  47.  
  48.     if (c1.suit == cs) puts("First card is a trump.");
  49.     if (c2.suit == cs) puts("Second card is a trump.");
  50. }

Объяснение кода листинга программы

  1. Структура card объявляет две переменные типа enum для хранения масти и значения карты.
  2. Функция enter_card_suite запрашивает у пользователя ввод масти и проверяет его с помощью оператора switch.
  3. Если введенный символ масти соответствует одному из значений в switch, соответствующее значение enum присваивается переменной suit.
  4. Если введенный символ масти не соответствует ни одному из значений в switch, выводится сообщение об ошибке и продолжается цикл do-while.
  5. Ввод масти повторяется до тех пор, пока не будет введено правильное значение.
  6. После ввода правильного значения масти функция возвращает его в качестве возвращаемого значения.
  7. В функции main объявляются две переменные типа card для хранения карт.
  8. Первая карта устанавливается на масть clubs и значение nine.
  9. Вторая карта устанавливается на масть hearts и значение queen.
  10. Функция enter_card_suite вызывается для ввода масти.
  11. Выводится введенная масть.
  12. С помощью условных операторов проверяется, является ли первая или вторая карта мастью, введенной с помощью функции enter_card_suite.
  13. Если первая или вторая карта является мастью, выводится соответствующее сообщение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы