課題 [13] 構造体(7/8)

問 7(提出プログラム名:ex1307a.h)

まず,このプログラム(ex1307a.c)ヘッダ(ex1307a.h)をダウンロードしなさい.
そして,ex1307a.hを編集して(.c の方は触らない)次の処理を行うプログラムとして仕上げなさい.

【目的の処理:トランプの強弱を判定】
このプログラムはトランプのカードを構造体 CARD で表している.
構造体 CARD には次の 2 つのメンバがある
  ・ mark: 0 ~ 3 の整数であり,順にスペード,ハート,ダイヤ,クラブを意味する.
  ・ number: 1 ~ 13 の整数であり,そのカードの数字を表している.

ここで次のルールで 2 枚のカードの強弱を定義する:
 (1)2 枚のカードの数字が異なる場合は,
   数字 1(エース)が最強であり,それ以外は数字の大きい方が強いものとする.
   (つまり,1 > 13 > 12 > 11 > …. > 3 > 2 )
 (2)数字が同じ場合はスペード,ハート,ダイヤ,クラブの順に強いものとする.
   (つまり,スペード > ハート > ダイヤ > クラブ)

【このプログラムでやりたいこと】
2 枚のカードの情報を読み込み,関数 judge を使って 2 枚のカードのどちらが強いかを判定する.
プログラム中の関数 judge を完成させ,この動きを実現しなさい.
なお,関数 judge は 2 つの CARD 型変数を受け取り,1 番目の方が強ければ 1 を,さもなくば -1 を返す関数とする.

【ヒント】
(1)数字として特殊なのは 1 (エース)だけなので,まずはどちらかが 1 でもう一方が 1 でない場合の処理を行う(その場合は return 1 または return -1 を行うことが確定する.)

(2)そうでない場合は,両者の数字を比較して,大きい方に応じて return 1 または return -1 を行えばよい.

(3)いずれでもない場合は数字が同じなので,マークを比較する.
上のルールではマークを表す数字が小さい方が強いという設定になっているのでこれを利用する.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
1 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 0 1
2 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 0 2
スペード の A
スペード の 2
これらのカードのうち,強い方は:スペード の A
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
1 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 0 1
2 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 1 1
スペード の A
ハート の A
これらのカードのうち,強い方は:スペード の A
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
1 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 3 13
2 枚目のカードのマークと数字を入力して下さい
(スペード 0,ハート 1,ダイヤ 2,クラブ 3)
> 0 2
クラブ の K
スペード の 2
これらのカードのうち,強い方は:クラブ の K

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力の内容が上の例と違うきちんと確認していない).
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問 8 (ex1308a.c) ]