[1]課題
制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題(なるべく短い行数で)を作成し、
模範解答例を示せ。併せて、同様な動作を行うC言語のソースコードを示せ。
[2]問題
1から10までの自然数をそれぞれ2乗した数をすべて足した数を配列をもちいて求めよ。
つまり、
10
Σ k^2 を求めよ
n=k
[3]javaプログラム
public class Repo4_1 { public static void main(String[] args) { int i,k,a=0; // 整数型のi,k,aを宣言します。 int n[] = new int[10]; // 配列の宣言をします。10個の要素を使用します。 for(i=0; i<10; i++){ k = i+1; // kのとる値を1から10までにします。 n[i] = k*k; // kの2乗をして配列nに格納していきます。 } for( i=0; i<10; i++) // ステートメントが1つしかないのでブロックは使用しません。 a = a+n[i]; // すべての配列の要素を足してゆきます。 System.out.println("answer = "+a); // 結果を表示させます。 } }実行結果
answer = 385
[4]考察
この実行結果は1から10までの自然数をそれぞれ2乗した数をすべて足した数をあらわしています。
プログラムは大きく分けて4つの働きをします。
まず、第一にプログラム内でつかわれる変数と配列の宣言です。
iはfor文のループ制御変数と配列の要素をさすときに使用されます。
この問題に「1から10までの自然数」という節があります。kはこの「1から10までの自然数」に相当します。
aはanswerのaです。プログラムの答えをいれます。
nは1次元配列で、n[0]からn[9]の10個の要素をもっています。
次にすることは、配列nの10個の要素に、自然数の2乗した数をそれぞれ いれていくことです。
iは0から9までを動き、kは1から10までを動きます。「k*k」はkの2乗を表しています。
それによってn[0]に1の2乗、n[1]に2の2乗、n[2]に3の2乗・・・
といったようにfor文で繰り返すことでつぎつぎに値を代入していきます。
そして次に、変数aに配列nのすべての要素を足して代入してます。
「a = a + n[i]」
これは左辺のaに これまでのaと配列nの要素の和を代入するという意味です。
for文をつかい10回繰り返して、配列nのすべての要素をaに足して代入します。
最後に答えである変数aを出力させるメソッドです。
System.out.printlnを使用して改行もしてます。
シグマの計算の考察
シグマは数列の和を求めるときにつかわれます。
シグマの計算は公式を利用して行うのが、はやくて分かりやすい。
この問題の場合の公式を以下に示します。
Σ n^2 = 1/6n(n+1)(2n+1)
この公式をつかって、問題を解いてみます。しかし、このプログラムは配列を含まないので、問題文をみたしていません。
よってこのプログラムは解答を確認するための副産物的なプログラムとしてみます。
プログラム_2
public class Repo4_2 { public static void main(String[] args) { int n,a; n = 10; // nは10です。 a = n*(n+1)*(2*n+1)/6; // 公式を算術演算子をもちいて書き直しました。 System.out.println("answer = "+a); // 答えを出力させます。 } }実行結果
answer = 385このプログラムの実行結果は4_1プログラムと同じ結果です。これで4_1プログラムに対する信用度があがったと思います。
[5]C言語プログラム
answer=385
考察
実行結果は同じです。javaとC言語でのちがいを考察します。
配列の宣言のしかたが微妙にちがいます。printlnメソッドとprintfの使い方がちがいます。
C言語はmain{}のなかにプログラムをすべてかけますが、javaはクラス{}のなかにメインメソッド{}をいれます。
[6]反省と感想
久しぶりにC言語をさわりました。コンパイルの仕方や、構文など忘れているところがあって焦りました。
javaプログラムはすこし簡単につくったが初級なのでこれくらいがちょうどいいのかな。
あまり、考察できなかった。時間をかけてもっと考察できたら良かったのにとおもいました。
[7]参考文献
ジョゼフ・オニール著 「独習Java 第3版」