コンピュータ基礎および演習II

演習問題

解答は

に提出しなさい。ソースファイル (〜.java) のみを提出。 提出は gFTP 等の ftp ソフトを用いて行ってください。

問題1

問題1と同様に、int 型の配列を用意し適当な数を複数用意しておく。
(例: int[] a = new int[] {15, 9, 12, 10, 6, 8, 16, 5, 13, 14};)

これらの数の平均を求め、 平均以下のものだけ出力するプログラムを書きなさい。 ファイル名は AverageAndLess.java とする。

問題2

20 人の受講生に対して行われた、 10 点満点の小テストの点数は次のようであった。

8 6 5 9 10 5 3 8 9 7 7 4 7 8 4 10 9 9 3 2

このテストの点数ごとの頻度分布を出力するプログラムを書きなさい。 ファイル名は Frequency.java とする。

ここでの頻度分布とは、 各点数ごとにその点数をとった人が何人いるかを示す表である。 このプログラムを実行した結果の最初の数行は次のようになるはずである。 左の数字が点数の分布、右の数字がその点数をとった人数である。

0: 0
1: 0
2: 1
3: 2
4: 2
5: 2

この問題では、 20 人分の点数を格納する配列と、 0 点から 10 点のそれぞれの値が何回現れたかを数える配列の 2 つを用いるのが適当である。

何回現れたかを数える配列を仮に count とすると、 count は 0 から 10 までの 11 個の要素からなる配列となる。 点数 v (0 ≦ v ≦ 10) の出現した回数を count[v] で数えればよい。

問題3

3 のべき乗 3k を k=1 から k=40 の範囲で すべて表示するプログラムを書きなさい。 ファイル名は Power3.java とする。 べきごとに行を分けて出力すること。

整数型 int を用いた計算結果と 浮動小数点型 double を用いた計算結果を対照させて表示するようにすること。 また、 int 型の場合何乗でオーバフローが発生するか、 double 型の場合何乗で誤差が発生するかを確かめなさい。

問題4

サイコロを3つふり、少なくとも2つのサイコロの目が一致する確率を求めなさい。 ファイル名は Sai.java とする。

繰り返しによってすべての場合の目の並びを求め、 問題文の条件を満たす目の並びの数を数えることにより求めることができる。

サイコロ 1 個をふって出る目は 1 から 6 の 6 通りである。 これを 1 つの for 文で生成する。 for 文を 3 重にすれば、 すべての目の並びが繰り返しの中に現れるようにすることができる。 この中から、少なくとも 2 つの目が一致する回数を求めればよい。

なお、これを数学の問題として解くなら以下のようになる。

すべての目の並び - 目がすべて異なる場合の並び
1 - 1 x (5 / 6) x (4 / 6) = 1 - 20 / 36 = 1 - 120 / 216 = 96 / 216 = 0.44