Top > 疑問・質問 > 演習問題の解き方、プログラムロジックを教えて下さい。

演習問題の解き方、プログラムロジックを教えて下さい。

「競技の採点結果」ある競技において、選手の得点は8人の審判の採点(20点満点)より決める。8名の採点のうち、最高点と最低点をそれぞれ一つずつ除外した。残り6つの得点の平均点をその選手の得点とする。8人の審判の採点を入力して、選手の得点を計算するプログラムを作りなさい。なお、入力した得点のチェックを行うこと。

まず、この問題を分析してみましょう。

  1. 審判が採点する競技(たとえばフィギュアスケート)が対象
  2. 審判は8名
  3. 20点満点
  4. 8名の審判が採点した最高点と最低点を一つずつ削除
    同じ点数のことも考慮している
  5. 有効得点6つの平均点を得点とする
  6. 審判8名の得点を入力して、選手の得点を求める …これが目的ですね。

補足

入力した得点をチェックするとは…負数あるいは21点以上の得点はエラー?

計算だけなら単純ですが、こと入出力や人が介在すると様々な疑問がわいてきます。

  1. 入力方法は?
    8名の得点を一気に入力するのか、1名毎に入力するのか?
  2. 得点は0~20の正数?
    少数部はなし?
  3. 得点結果の少数部はある?
  4. 少数部があるとしたら、有効桁数は何桁?
    その際の丸め処理は?
  5. 少数部なしの場合の丸め処理は?
    切り捨て、切り上げ、四捨五入、…それ以外?
  6. 得点に間違いがあれば?
    チェックしてもその対処法が記載されていない

演習問題は、要求仕様です。問題からいきなりプログラムコードで考えないように注意します。演習問題を徹底的に追求し、どんな漏れや矛盾が潜んでいるかを洗い出すことで問題がより具体的に理解できます。

記載されていないことは、一つの仮説を立ててそれも含めて仕様にします。問い合わせできる場合は、確認するといいでしょう。

なお、プログラムを実装する場合、決めつけは危険です。変更ができるように柔軟な欲そう方法を心がけます。

プログラムロジック

  1. データ(8名の得点)入力
  2. 8名の得点から、最大点と最小点を一つずつ削除(無効に)する
  3. 6名の得点のから平均点を求める
  4. 平均点を出力する

仮説仕様(要求にない追加仕様)

  1. 入力方法は、1行で8名分の得点を入力する
    それぞれの得点の間は空白を区切り文字(セパレータ)とする
  2. 得点が間違っていたら、その旨を通知して再入力を促す
  3. 少数部の有効桁数は2桁とする
  4. 少数部3桁目を四捨五入する

ここまで整理できれば、プログラムは簡単です。

もし、プログラムが想像できない場合、どこがわからないのかを洗い出して、その点を調べる必要があります。 

あるいは、コードがうかばないという場合は、プログラムロジックと言語基礎を学習する必要があります。補助教材を使って学習して下さい。

以上、こんな感じです。

IT@NET塾
丸山

▲ページトップに戻る