構造化プログラミング

演習参考資料

演習の達成目標

授業時間内提出課題(2問)

授業時間内提出課題 問1, 2 ※提出必須 授業時間内に提出すること
コメントとインデントを参考に、各プログラムは正しくインデントすること。

課題説明

構造化プログラミングとは、大きな問題を分解し、分解された処理ごとに設計・実装し、分解された処理を繋げることでプログラムを完成するプログラミング手法である。
構造化プログラミング課題として、以下に説明する簡単な商品在庫管理システムを取り上げる。
課題の商品在庫管理システム (図1) は、1)在庫データの初期化 2)在庫データの更新処理 3)最終在庫データの表示 の処理に分割する。
さらに、2)在庫データの更新処理は、2.1)在庫変更の入力 2.2)在庫データの更新 2.3)最新在庫データの表示に分割する。
在庫データは、0から始まる商品番号毎の在庫数を1次元整数配列 (図2) で管理する。配列は商品種類分の長さを持つ。商品が5種類の場合、配列の長さは5であり、要素0には商品0の在庫数、要素1には商品1の在庫数、要素2には商品2の在庫数と続く。
在庫変更データは、0から始まる商品番号と在庫の増減の組を要素数2の1次元整数配列 (図3) として表す。変更データ{0,2}は商品0が2個増えることを表し、変更データ{1,-1}は商品1が1個減ることを表す。

モジュール図
図1. 課題の商品在庫管理システムのモジュール図

商品在庫管理配列
図2. 課題の商品在庫管理配列

在庫変更データ配列
図3. 課題の商品変更データ配列


  1. 標準入力から在庫変更データを読み込むメソッド input() を作成したい。
    メソッド input()は標準入力から商品番号と増減値を読み込み、在庫変更データとして要素数2の1次元整数配列に書き込み、戻り値として在庫変更データの配列を返す。
    下記例題1では、 メソッド input() の中で商品番号と増減を標準入力から読み込んでいるが、正しく戻り値を設定できていない。
    例題1
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Kadai12_1 {
        public static void main(String[] args) throws Exception{
    
            int[] item = input();
    
            System.out.println("商品 "+item[0]+" 増減= "+item[1]);
    
        }
    
        //課題1 在庫変更データの入力
        static int[] input() throws Exception{
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("商品番号?");
            int itemnumber = Integer.parseInt(buf.readLine());
    
            System.out.print("個数増減?");
            int itemchange = Integer.parseInt(buf.readLine());
    
            //ここで要素数2の1次元整数配列を生成し
            //在庫変更データを設定した後
            //戻り値として配列を返したい
        }
    
    }
    
    
    上記例題を参考に、標準入力から読み込んだ商品番号と増減を要素数2の1次元整数配列に設定し、戻り値として返すようにメソッド input()を修正したプログラム Kadai12_1.javaを作成せよ。

    実行例(修正後)
    商品番号?0
    個数増減?2
    商品 0 増減= 2
    
    水色はキーボード(標準入力)からのユーザ入力

  2. 在庫データを表示するメソッド output(int[]) を作成したい。
    メソッドoutput(int[])は引数として、在庫データの1次元整数配列を取る。
    下記例題2では、メソッドoutput(int[])は未完成で、引数で渡した在庫データがまだ表示されない。

    例題2
    public class Kadai12_2 {
        public static void main(String[] args){
            int[] inventory = { 1, 0, 3, 2, 4 };  //在庫データ生成
            output(inventory);                    //在庫データ表示
        }
    
        //課題2 在庫データの表示
        static void output(int[] inventory){
            System.out.println("商品在庫:");
    
            //ここで配列 inventory を forループで巡回し
            //在庫にある商品番号(要素番号)と個数を全て表示する
        }
    }
    
    
    上記例題を参考に、引数で渡された在庫データの1次元整数配列を巡回し、商品番号(要素番号)と個数を全て表示するようにメソッド output(int[])を修正し、プログラム Kadai12_2.javaを完成させよ。

    実行例(修正後)
    商品在庫:
    商品 0 個数= 1
    商品 1 個数= 0
    商品 2 個数= 3
    商品 3 個数= 2
    商品 4 個数= 4
    

課題の提出方法

課題の提出方法は、各クラス担当者の指示に従う。 正しく実行できることを確認の上、授業時間内提出課題のプログラムを提出せよ。

印刷提出の場合

プログラムが正しく実行できることを確認の上、担当者の指示に従い Kadai12_1.java Kadai12_2.java のプログラムソースコードを印刷して提出せよ。
印刷方法
nkf -e Kadai12_1.java | mpage -2f -bA4 | lpr -Pプリンタ名
上記がうまくいかない場合は mpage を省く
nkf -e Kadai12_1.java | lpr -Pプリンタ名

WebClass提出の場合

提出手順
  1. WebClassのプログラミング基礎演習コースを開く
  2. 教材から本日の日付の 提出課題(問1) をクリック
  3. [開始] をクリック
  4. 問1の回答記入欄に Java で作成したKadai12_1.javaプログラムソースコードをコピーペーストで貼り付ける
  5. [回答を保存] をクリック
  6. [終了] をクリック
同じ手順で提出課題(問2)Kadai12_2.javaを提出する。


<mackin>