入力数値は 0 - 100 までとします。
実行例(赤文字は入力を意味する): $ ./a.out 8 93 42 7 92 79 max = 93 $
作業手順:
これで繰り返してテストする場合に作業が簡単になる。
先の課題では結果しか見えず、本当に正しく最大のものが選べているかよくわかりません。 そこで入力したものを出して、最大のものに MAX と目印を付けて表示するようにします。
実行例(赤文字は入力を意味する): $ ./a.out < testdata.txt max = 93 8 93 = MAX 42 7 92 79 $
このプログラムはいったん入力をすべて配列に格納する必要がある。 なお出力結果の数値が右揃えになるように printf の変換文字を調整すること。
ところで最大の値となるものが複数データに含まれていた場合でも、プログラムが正しく動作するように作って下さい。 (実際にそのようなデータを作成して動作を確認すること)
先の課題では最大の値となるものが幾つあったのかわかりません。 そこで入力したものを出して、最大のものに MAX と目印を付けて、かつ、それが幾つ存在したかを表示するようにします。
実行例(赤文字は入力を意味する): $ ./a.out < testdataDup.txt max = 93 (count = 2) 8 93 (MAX) 42 7 93 (MAX) 79 $
上の例で用いた testdataDup.txt は、testdata.txt から複製して最大値(93)を二カ所に含むように修正したもの。 (別に名前はなんでもよいが)
最大だけでなく、最小の数についても同じく数を数え、目印を付けて表示するようにします。
実行例(赤文字は入力を意味する): $ ./a.out < testdataDup.txt max = 93 (count = 2) min = 7 (count = 1) 8 93 (MAX) 42 7 (MIN) 93 (MAX) 79 $
なお、最小と最大が同一の値になる場合がある。つまり全ての入力値が同じ値だった場合に、正しく MIN と MAX の目印が両方につくように作ってください。 これも必ず実際にそのようにして動作を確認すること。
全て同じ値であった場合の実行例(赤文字は入力を意味する): $ ./a.out < testdataAll10.txt max = 10 (count = 6) min = 10 (count = 6) 10 (MAX) (MIN) 10 (MAX) (MIN) 10 (MAX) (MIN) 10 (MAX) (MIN) 10 (MAX) (MIN) 10 (MAX) (MIN) $
先の課題のプログラムの最後に付け足す形で良いので、MIN, MAX のいずれにも該当しないデータだけを含む別の配列を作ります。
つまり、そのプログラムの最後の部分では、新しく作った配列 middle[ ] に、変数 middleCount の個数だけ、MIN, MAX 以外のデータが入っている、という状況にしてください。
下の実行例では、middle[0] = 8, middle[1] = 42, middle[2] = 92, middle[3] = 79 となり、変数 middleCount = 4 となるはずです。
実行例(赤文字は入力を意味する): $ ./a.out < testdataDup.txt max = 93 (count = 1) min = 7 (count = 1) 8 93 (MAX) 42 7 (MIN) 92 79 middle count = 4 8 42 92 79 $
この処理は「それ以降の処理に、前処理された配列を引き渡す」ことを想定したものです。