Download presentation
Presentation is loading. Please wait.
1
プログラミング基礎I(再) 山元進
2
今日は課題を解くのメイン 指示をよく読むこと
まず、この PowerPoint の資料があったのと同じ Web page から、 Perm.class をダウンロードし、今日の課題プログラムを作成するディレクトリに置く。 同様に、Ex01.java をダウンロードし、同じディレクトリに置く。 Ex01.java の id=999; という行の999を、自分の学籍番号の下3ケタに書きかえる。
3
課題 class Ex01 { public static void main(String[] args){ int id=999; int[] test={0,1,2,3,4,5,6,7,8,9}; Perm.print(test); do{ Perm.permutation(id,test); }while(! Perm.isIdentity(test)); System.out.println("Finished."); }
4
付加説明 Perm.print(int[] input) Perm.permutation(int key,int[] inout)
長さ10の整数配列を画面に印字する Perm.permutation(int key,int[] inout) 長さ10の整数配列を並べ替える。 ただし、入力には制限があり、条件を満たさないと実行時エラーになる boolean Perm.isIdentity(int[] input) 長さ10の配列が、{0,1,2,3,4,5,6,7,8,9} と等しければ true そうでなければ false を返す これらの3つのメソッドは、Perm.class が同じディレクトリにあると使える。
5
以下、id=999; が書き換え済みであるとする。
問1 Ex01.java をコンパイル・実行し、結果を確認せよ。このプログラムで、 Perm. print, Perm.permutation, Perm.isIdentity の3つのメソッドは、どのような順序で実行されるか? 紙に書いて説明せよ。 図を併用しても良い。 問2 Ex01.java と同じ動作をするプログラムを、do を使わずに while のみを使って作れ。class 名は Report01 とする。 問3 Ex01.java と同じ動作をするプログラムを、do も while も使わずに、for を使って作れ。class 名は Report02 とする。
6
問4 Perm.permutation が行っている置き換えはどのような置き換えか、置き換え規則を明文化せよ。
この問の解答にはグレードがある。 良い解答は、2番目の引数の配列に蓄えられたデータの並びが、どのようなものであっても、Perm.permutation が行う置き換えの結果を再現する規則を書くことである。 普通の解答は、実行時に出力される 21 個のデータの並び方に対して置き換えの結果を再現する規則である。 1番目の引数が自分の学籍番号以外についてまで再現する必要はない。 理解を補助する目的で図を加えても良い。
7
問5 Perm.permutation の1番目の引数を自分の学籍番号の下3ケタに固定した場合と同じ動作をするメソッド permutation (int[ ] array)を作成し、permutation とPerm.permutation との動作比較をするプログラムを作れ。ただし、class 名は Report03 とすること。 この問の解答にも、問4と同様のグレードがある。 1番目の引数が自分の学籍番号以外についてまで再現する必要はない。→ 今回作る permutation の引数が 1 つしかないのは、そのため。
8
以下 参考資料
9
id=999; の場合の実行例 行目は、繰り返し処理の前に実行した print で印字されたもの 繰り返し処理 1 回目 繰り返し処理 2 回目 繰り返し処理 3 回目 繰り返し処理 21 回目 ここで元の並びに戻ったので繰り返し終了 Finished. 終わったしるしに "Finished." と印字
10
do~while 文 (Ex01) do { 継続条件がtrueの間、繰り返し行う処理 } while( 継続条件 ) ; 最低1回は { } 内の処理が行われる ※ 繰り返し行う処理が 1 文であるばあい、 { } で括る必要はない。しかし、形式を整えるため、いつでも { } を入れておいた方が良い。
11
do~while 文の実行順序 do while 繰り返し行う処理 ({ } の中の処理) true 継続条件 false
12
while 文 (Report1) while( 継続条件 ) { 継続条件がtrueの間、繰り返し行う処理 } while 文で継続条件が true である間、繰り返す処理が記述できる。 条件の記述に気をつける。 ※ 繰り返し行う処理が 1 文であるばあい、 { } で括る必要はない。しかし、形式を整えるため、いつでも { } を入れておいた方が良い。
13
while 文の実行順序 while 繰り返し行う処理 ({ } の中の処理) true 継続条件 false
一度も「繰り返し行う処理」を実行せずに終了 false while 文の次の文へ
14
for 文 (Report2) for ( 初期化 ; 継続条件 ; 更新処理 ) { 繰り返し行う処理 } 何回も繰り返す処理を簡単に記述できる ※ 繰り返し行う処理が 1 文であるばあい、 { } で括る必要はない。しかし、形式を整えるため、いつでも { } を入れておいた方が良い。
15
for 文の実行順序 for 初期化 更新処理 繰り返し行う処理 ({ } の中の処理) true 継続条件 false
一度も「繰り返し行う処理」を実行せずに終了 false for 文の次の文へ
16
id=999; の場合の変換規則 行目は、繰り返し処理の前に実行した print で印字されたもの 繰り返し処理 1 回目 繰り返し処理 2 回目 繰り返し処理 3 回目 規則の明文化の例 0→ → → → → → → → → → 繰り返し処理 21 回目 ここで元の並びに戻ったので繰り返し終了 Finished. 終わったしるしに "Finished." と印字
17
ただし… 前頁の規則は、入力する配列のデータの並びを、前頁に出てくる 21 種に限定すれば正しいが、例えば {0,1,2,3,4,5,6,7,9,8} を入れると正しくない どんな入力に対しても Perm.permutation と同じ変換をするのが良い解答 実行時エラーまで再現する必要はない
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.