複雑なプログラムを作る練習

偶奇の判定

 キー入力された整数が偶数か奇数かを判定するプログラムを作ってみよう。

 開発手順

  1. 要求定義を確認する
    キー入力された整数が偶数か奇数かを判定する
  2. 仕様を決める
     外部仕様・・・利用者から見たプログラムの振る舞い
    1. 整数をキー入力(入力要求のメッセージを出す)させ、偶数か奇数に応じてメッセージを表示する
    2. 各メッセージ
      入力要求整数を入力して下さい。
      偶数の時○○は偶数です。
      奇数の時○○は奇数です。
      (但し、○○は入力された整数)
    3. (整数以外のものが入力された時に実行時エラーとなっても良しとする。)
     内部仕様・・・アルゴリズムの選択やフローチャート(各ブロック)の実現方法
    1. 偶奇の判定は剰余演算子を用い、
    2. 分岐構造としてはif文を使う
  3. アルゴリズム(問題を解決する手法)を決める
    剰余演算と条件分岐で実現する(今回のような簡単な問題では考えるまでもない)
  4. フローチャート(流れ図)を描く


      → → → → →  
    判定結果によって、
    表示が異なるから、
      → → → → →  
    詳細化する
  5. コーディングする(Java言語のソースプログラムを書く)
    // 入力整数の偶奇を判定し、メッセージを画面に表示するプログラム
    import java.io.*;
    
    class EvenOdd1
    {
    	public static void main(String[] args) throws IOException
    	{
    		System.out.println("整数を入力して下さい。");
    
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		String str = br.readLine();
    		int num = Integer.parseInt(str);
    
    		if( num%2 == 0 )
    			System.out.println( num + "は偶数です。");
    		else
    			System.out.println( num + "は奇数です。");
    	}
    } // end of EvenOdd1.java
    
  6. コンパイルしてテストする
    1. 分岐している2つの流れの両方をテストする為に、テストデータとして偶数と奇数を与え、
    2. 仕様通りのメッセージがそれぞれ表示されるかどうかを確認する。

閏年の判定

 キー入力された西暦年が閏年か平年かを判定するプログラムを作ってみよう。

  1. 閏年が4年毎であれば、4の剰余だけで判断できるので、偶奇の判定と同じ手法で実現できる
    
    
    	if( year%4 == 0 )
    		System.out.println( num + "年は閏年です。");
    	else
    		System.out.println( num + "年は平年です。");
    
  2. しかし、実際には閏年の判定はもう少し複雑な論理になっている。
  1. 複雑な論理をif文を組み合わせて実現する・・・Moodle資料
  2. 複雑な論理を論理演算子を活用して実現する・・・Moodle資料
  3. 閏年がどうかを判定して真偽を返すメソッドを別に実現して使う→練習問題

素数の判定

 キー入力された(2以上の)自然数が素数かどうかを判定するプログラムを作ってみよう。(ちなみに1は素数でも合成数でもない。)

  1. 素数とは、1とその数以外の約数を持たない数であるから、
  2. 2から順番に割り切れるかどうかを調べればよい
  3. 素数の列挙問題に対してはエラトステネスの篩というアルゴリズムが知られている
  1. 素数の判定は1つの論理式で書き表すことはできず
    のような条件分岐では実現できないので、反復の構造を使って実現する
  2. 素数かどうかを判定しで真偽を返すメソッドを別に実現して使う・・・練習問題