Report4


 制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題(なるべく短い行数で)を作成し、
模範解答例を示せ。併せて、同様な動作を行うC言語のソースコードを示せ。


あ〜した天気にな〜れのプログラム

<java>
import java.util.Random;         //乱数を使用

public class rep4a {

    public static void main(String[] args) {

        String a = "晴れになる!";
        String b = "曇りになる!";
        String c = "雨になる!";
        String d = "台風になる!";

        String i[] = { a, b, c, d};

        Random j = new Random();


        for(int e=0; 0<=e; e++){        //無限ループ

            int f = j.nextInt();

            if(0 < f){
        System.out.println("あ〜した天気にな〜れ!!");
                System.out.println(i[f % 4]);

                break;           //結果を表示したらループ終了
            }
        }
    }
}


 実行結果

(1回目)

曇りになる!


(2回目)

雨になる!

(3回目)

曇りになる!

(4回目)

晴れになる!


<C言語>
#include #include /*乱数を使用*/ #include main() { char i[10][10] = {"晴れになる!","曇りになる!","雨になる!","台風になる!"}; /*2次元配列でそれぞれの文字列を格納*/ int f; srand(time(NULL));    /*時間を引数にした乱数*/ f = rand(); printf("%s\n",i[f % 4]);          /*0~3の場合分け*/ } 実行結果 [nw0423:~/prog2/report4] j04023% cc -o report4.c [nw0423:~/prog2/report4] j04023% ./report4 晴れになる! [nw0423:~/prog2/report4] j04023% ./report4 曇りになる! [nw0423:~/prog2/report4] j04023% ./report4 曇りになる! [nw0423:~/prog2/report4] j04023% ./report4 雨になる!

考察
 まず、始めにjavaプログラムの考察からしたいと思います! String で宣言した変数に、それぞれの天候を格納します!
a 晴れになる!
b曇りになる!
c雨になる!
d台風になる!
これらを、配列 i に格納します。 String i[] = { a, b, c, d}; これによって、
i[0]晴れになる!
i[1]曇りになる!
i[2]雨になる!
i[3]台風になる!
後は、i[f] の f を0~3の間でランダムにしたら完成です。 それには、乱数fの f % 4 とすることで、fを4で割った余り を考えると0~3の間でランでムな値が出る事が分かります。 Random j = new Random(); int f = j.nextInt(); System.out.println(i[f % 4]); しかし、javaの乱数 nextInt() は int型 の乱数であり 負の数も含まれる。 i[f] の f に負の数が入るとエラー がでるため、 if文 で正の数の場合だけ上の処理を行う ようにします。 if(0 < f)   System.out.println(i[f % 4]); これだけだと、乱数が負の数のとき結果が出ずに終了して しまうので、この処理を結果が表示されるまで繰り返します。 ここで for文 と break を用います。 for(int e=0; 0<=e; e++){   int f = j.nextInt();   if(0 < f){     System.out.println(i[f % 4]);     break;   } } for文は条件が満たされない事がない為、無限に操作を繰り返す ことになります。だが乱数が正の数となったとき、結果を表示して break を使用します。これを用いる事により、現在繰り返している 処理(for文の処理)を強制的に終了させることができます。 以上の操作をもって、 i[f] の f の部分を0~3のランダムな値にしています。  次に、C言語のプログラムを見ると Cでは文字を1文字ずつ配列に格納して文字列とします。またその文字列を java のプログラムと同様に、配列に格納するので2次元配列を用いる。 C言語で用いる乱数 srand() は、引数が固定された場合に毎回同じ 結果を出してしまう。そこで、引数に現在の時刻を与えてランダムな 値にする。 int f; srand(time(NULL));    /*時間を引数にした乱数*/ f = rand(); またこの乱数は、0以上RAND_MAX以下の値を取る。 よってこの場合は、乱数が負の数の時の場合分けが必要ない。 なので直接 f % 4 を行うと、i[f] の f の部分は0~3のランダムな 値になる。

反省・感想
 今回の課題はいまいちやる気が起きなかったので、かなり時間をおいてしまっ た。次からはきちんと進めたいです。

参考文献
独習Java ジョゼフ・オニール著 http://www.ie.u-ryukyu.ac.jp/~j04015/rep4.html