| 目次| 1234567891011121314
| 資料| 予定| 課題| 宿題|

第8回課題回答例

課題

  1. スタック・連結リストのプログラムを完成し,動作を確認しなさい.
    スタックの利用例
    import java.util.*;
    
    public class StackTest {
        public static void main(String[] args) {
    	Stack stack = new Stack();
    
    	stack.push("Huyu");
    	stack.push("Nabe");
    	stack.push("Nihonn-shu");
    
    	System.out.println(stack.pop());
    	System.out.println(stack.pop());
    	System.out.println(stack.pop());
        }
    }
    	
    連結リストの利用例
    class LinkedList {
        private Object data = null;
        private LinkedList next = null;
    
        public void setData(Object obj) {
            data = obj;
        }
    
        public Object getData() {
            return(data);
        }
    
        public void setNext(LinkedList list) {
            next = list;
        }
    
        public LinkedList getNext() {
            return(next);
        }
    }
    
    public class LinkedListTest {
        public static void main(String[] args){
    	
    	// それぞれデータを作成
    	LinkedList Number1 = new LinkedList();
    	LinkedList Number2 = new LinkedList();
    	LinkedList Number3 = new LinkedList();
    
    	Number1.setData("Midorikawa");
    	Number2.setData("Koshino Kanbai");
    	Number3.setData("Secchuu Bai");
    
    	// データを連結
    	Number1.setNext(Number2);
    	Number2.setNext(Number3);
    	Number3.setNext(null);
    
    	// データにアクセスして出力
    	System.out.println(Number1.getData());
    	System.out.println(Number1.getNext().getData());
    	System.out.println(Number1.getNext().getNext().getData());
        }
    }
    	
  2. 階乗 (factorial) の計算を再帰を用いて行うプログラムを作成せよ. ここで n の階乗とは,n × (n - 1) × … … × 2 × 1 のことで ある.factorial(n) = n × factorial(n - 1) であり,0 の階乗は 1 と定義されている.
    public class FactorialNum {
        public static int factorial(int n) {
          if (n == 1)
             return 1;
          else
             return (n * factorial(n - 1));
       }
    
       public static void main(String[] args) {
          int num = KeyboardInput.askInt("Enter a number: ");
          System.out.println("The answer: " + factorial(num));
       }
    }
    	
  3. 整列アルゴリズムを考える
    来週は,ランダムな数字が入った配列を昇順に並べ替える方法(整列アル ゴリズム)を取り上げる.詳細なプログラムは次週以降に解説するが,今 までに説明したJava言語の機能を使って整列を実現する方法を考えな さ い.

    詳細なプログラムでなくてもかまわない.「繰り返す」「判断する」「x 番目の配列に変数yの内容を覚える」などの表現でよい

    今週の解説参照.

  4. 上述の台形公式の代わりに,以下の中点公式を用いて関数 f(x) = 4 / (1 + x * x) の積分値を求めるプログラムを作成してみよ.そして 区間 [ 0, 1 ] における f(x) の積分値を求め,台形公式を用いた場 合と比較せよ.なお,この関数の区間 [ 0, t ] におる積分値は arctan t に等しい.従って区間 [ 0, 1 ] に おける関数 f(x) の 積分値はπ(= 3.141592653 …)に等しい.
    	(b - a)f((a + b) / 2)
    	
    public class IntegralMidpoint {
       public static double func(double x) {
          return (4 / (1 + x * x));
       }
    
       public static double midpoint(double a, double b) {
          int i, n = 32;
          double h, integral = 0.0;
    
          h = (b - a) / n;
          for (i = 0; i < n; i++) {
             double s = i * h + a;
             double t = (i + 1) * h + a;
             integral += (t - s) * func((s+t)/2);
          }
          return integral;
       }
    
       public static void main(String[] args) {
          double a = KeyboardInput.askDouble("開始点:");
          double b = KeyboardInput.askDouble("終了点:");
    
          System.out.println("積分値:" +  midpoint(a, b));
       }
    }
    	

| 目次| 1234567891011121314
| 資料| 予定| 課題| 宿題|