レポート3

11/()

課題
Javaアプリケーションによるオリジナル問題作成と解答例
多くのJava制御文を用いてオリジナルのJavaアプリケーションによる初級問題 を作成し,模範解答例を示せ.
実行プログラム
[Mitsuhisa-KINJO:~/java] j03017% cat report3.java
class report3 {
    public static void main(String argv[]){
        Sin();
        System.out.println("-------------------------------");
        Cos();
        System.out.println("-------------------------------");
        Tan();
        System.out.println("-------------------------------");
        WHILE();
    }
    public static void Sin(){
        double a,sin;
        for(int i=0;i<345;i+=15){
            if(i/15%2==1 && i/15%3==1 || i/15%3==2 ){
                i=i+15;}
        a = Math.toRadians(i);
        sin = Math.sin(a);
        System.out.println("sin"+i+"'="+sin);
        System.out.println();
        }
    }
    public static void Cos(){
        double b,cos;
        for(int j=0;j<345;j+=15){
            if(j/15%2==1 && j/15%3==1 || j/15%3==2){
                j=j+15;}
            b = Math.toRadians(j);
            cos = Math.cos(b);
            System.out.println("cos"+j+"'="+cos);
            System.out.println();
        }
    }
    public static void Tan(){
        double c,tan;
        for(int k=0;k<75;k+=15){
            if(k/15%2==1 && k/15%3==1 || k/15%3==2 )
                k=k+15;
            c = Math.toRadians(k);
            tan = Math.tan(c);
            System.out.println("tan"+k+"'="+tan);
            System.out.println();
        }
        for(int l=120;l<255;l+=15){
            if(l/15%2==1 && l/15%3==1 || l/15%3==2)
                l=l+15;
            c = Math.toRadians(l);
            tan = Math.tan(c); 
            System.out.println("tan"+l+"'="+tan);
            System.out.println();
        }
        for(int m=300;m<345;m+=15){
            if(m/15%2==1 && m/15%3==1 || m/15%3==2 )
                m=m+15;
            c = Math.toRadians(m);
            tan = Math.tan(c); 
            System.out.println("tan"+m+"'="+tan);
            System.out.println();
        }
    }
    public static void WHILE(){
        int atai[] = {123,4649,0,340,100};
        for(int h=0;h<5;h++){
        switch(atai[h]){
        case 123:
            System.out.println(atai[0]);
            do{
                int rem,sum=0;  
                    rem=atai[0]%10;
                    sum += rem;
                    System.out.println("reverse --> "+sum);
                    sum*=10;
                    atai[0]=atai[0]/10;
                }while(atai[0] != 0);
            System.out.println();
                break;
        case 4649:
            System.out.println(atai[1]);
            do{
                int rem,sum=0;
                rem=atai[1]%10;
                sum += rem;
                System.out.println("reverse --> "+sum);
                sum*=10;
                atai[1]=atai[1]/10;
            }while(atai[1] != 0);
                System.out.println();
            break;
        case 0:
            System.out.println(atai[2]);
                System.out.println("reverse1 -->"+atai[2]);
                System.out.println();
                break;
        case 340:
            System.out.println(atai[3]);
            do{
                int rem,sum=0;
                rem=atai[3]%10;
                sum += rem;
                System.out.println("reverse --> "+sum);
                sum*=10;
                atai[3]=atai[3]/10;
            }while(atai[3] != 0);
            System.out.println();
            break;
        case 100:
            System.out.println(atai[4]);
            do{
                int rem,sum=0;
                rem=atai[4]%10;
                sum += rem;
                System.out.println("reverse --> "+sum);
                sum*=10;
                atai[4]=atai[4]/10;

            }while(atai[4] != 0);
            System.out.println();
            break;
        }
        }
    }
}
実行結果
[Mitsuhisa-KINJO:~/java] j03017% javac report3.java
[Mitsuhisa-KINJO:~/java] j03017% java report3
sin0'=0.0

sin30'=0.49999999999999994

sin45'=0.7071067811865475

sin60'=0.8660254037844386

sin90'=1.0

sin120'=0.8660254037844387

sin135'=0.7071067811865476

sin150'=0.49999999999999994

sin180'=1.2246467991473532E-16

sin210'=-0.5000000000000001

sin225'=-0.7071067811865475

sin240'=-0.8660254037844385

sin270'=-1.0

sin300'=-0.8660254037844386

sin315'=-0.7071067811865477

sin330'=-0.5000000000000004

-------------------------------
cos0'=1.0

cos30'=0.8660254037844387

cos45'=0.7071067811865476

cos60'=0.5000000000000001

cos90'=6.123233995736766E-17

cos120'=-0.4999999999999998

cos135'=-0.7071067811865475

cos150'=-0.8660254037844387

cos180'=-1.0

cos210'=-0.8660254037844386

cos225'=-0.7071067811865477

cos240'=-0.5000000000000004

cos270'=-1.8369701987210297E-16

cos300'=0.5000000000000001

cos315'=0.7071067811865474

cos330'=0.8660254037844384

-------------------------------
tan0'=0.0

tan30'=0.5773502691896257

tan45'=0.9999999999999999

tan60'=1.7320508075688767

tan135'=-1.0000000000000002

tan150'=-0.5773502691896257

tan180'=-1.2246467991473532E-16

tan210'=0.577350269189626

tan225'=0.9999999999999997

tan240'=1.7320508075688754

tan315'=-1.0000000000000004

tan330'=-0.5773502691896264

-------------------------------
123
reverse --> 3
reverse --> 2
reverse --> 1

4649
reverse --> 9
reverse --> 4
reverse --> 6
reverse --> 4

0
reverse1 -->0

340
reverse --> 0
reverse --> 4
reverse --> 3

100
reverse --> 0
reverse --> 0
reverse --> 1
考察
始めは,sin,cosで,角度が0'以上360'未満のあいだの, 0',30',45',60',90',120'135',150',180',210',225',240',270',300',315',330' を,tanで, 0',30',45',60',120',135',150',180',210',225',240',300',315',330'の値 を表示しました.sin,cosでは,for文より角度0'から15をたしていき,これ 角度が345'になったら繰り返しを止めます,その間,もし,角度に15を割り, その商を2で割った余りが1で,かつ,角度に15を割り,その商を3で割った 余りが1,または2,のとき,その角度に15をたします.この条件は,角度を 15でわったときの商が素数であるときを意味していて,そのようになる角度 は,15',75',105'165',195',255',285',(345')のときで,この角度のときの 値は省くようにしました.tanでは,さらに,90',270'を省くようにしてあ ります.そして,角度をMath.toRadains()でラジアンの形にして, Math.sin(),Math.cos(),Math.tan()で,値をだします.ここで, sin180',cos90',cos270'tan180'の値が,0のはずなのにそう表示されないの 丸め誤差のせいです. もう一つは,配列の数字を逆にして表示するようにしたものです.配列atai[0]か ら順に表示するようにし,atai[2]==0になったら,そのまま表示し,それ以 外の場合,引数remにatai[]の1の位をいれます.そして,remをsumにいれ, sumは*10をします.atai[]に10を割った商をatai[]にいれ,それが0になる までループします.ここで,なぜか表示するときには一つずつ表示してしま うので,do〜while文内でrem,sumを宣言したからではと思い,最初の配列と いっしょに宣言したら,3219464004........と,つながって表示してしまっ たので,始めの表示した形にしました.
反省/感想
課題で,多くのJava制御文を使えといっていたのに,あんまり使ってなく てすみません.オリジナル問題というのでどうしようかと考えてたら,いつ のまにか〆切ぎりぎりになっていたので,てあたりしだいの制御文を使いま した.
参考文献
世界で一番簡単なJavaのe(イー)本:堀江幸生

<トップ>