2004 年度「計算機基礎論3B」 2005-01-21

来年度の「計算数学1」のための準備(続き)

来学期末までかかって、前回のプリントの後半に示したプログラムを元に、 順次、いろいろと書き足したり改良したりしてゆきます。 ソースファイル名は指定しませんので、適当に決めてください。 ファイル名をプリントにメモしておくと、 あとで探すときに楽かもしれません。

関数 void swap(int i, int j) を書き加えよ。 この関数は、a[i]a[j] の値を入れかえるものとする。 (ヒント:前に見せた、うまく動作しない swap() を参考にせよ。 最初は ij は等しくないと仮定して書いてみて、 書けたものが ij が等しいときも OK かどうかを考えよ。)

関数 int max(int i, int j) を書き加えよ。 この関数は、a[i], a[i+1], ..., a[j-1], a[j] のうちで最大の値をもつものの添字を返すものとする。 (たとえば、 もしも a[8] が最大でその値が 15 なら、8 を返す。 15 ではない。 最大の値をもつものが複数あるときはどれを返してもよい。 ij が等しいときも正しく動作しなければならないことに注意。 配列に格納されている値に上限・下限があることを利用してはいけない。)

ここまでに書いた関数を組み合わせて、 次のようにして配列をソートするプログラムを書いてみよ。

メールで提出する課題とはしませんが、 あとで私が諸君のホームディレクトリを見て調べ、 課題1や2と同じぐらいのウェイトで成績に加算します。 (全部やってなくても、それなりに取り組んだことがわかれば OK です。)


紙面が余りそうなので、以下には、 前に書いたけど配らなかったものを載せます。


岩瀬順一