レポート提出課題 応用情報処理V(2007)

以下の課題のうち、任意のものを2つを行うこと。できれば、3つやってください。

そして、作成結果のプログラムをNetBoxで提出をすること。

送付するファイルは次の要件を満たしていることを原則とする。

提出したことは、メールでも知らせてください。メールは以下のように記載します。

JBuilder以外での提出も認めますが、その場合は作成したソースファイルなどを、必ず、学籍番号-課題番号 という形式のフォルダに入れ、そのフォルダを部分パスとして含むように圧縮をした結果を添付するのを基準とします。なお、JBuilder以外の開発ツールでの提出の場合には、事前に相談してください。

課題の締め切りは:2008年1月26日(土曜日)とします

日本時間で1月26日中であればいいとします。もちろん、それ以前に提出してもらってもかまいません。遅れた場合は採点ができず、原則として不合格となります。

提出結果については、指導が入ることがあります。指導はメールで送ります。ない場合もあります。

受け取ったかどうかは、講義のホームページで随時公開します。

課題1

整数の配列を定義しいくつかの数値を代入しておく。そして、それらの中の最大値、最小値を求めるプログラムを作成すること。そして、配列の内容を大きい順、小さい順に並べ替えること。結果は、それぞれ標準出力への書き出しでよい。

課題2

ある整数numberに数値を代入する。そして、1からその数値までに存在するすべての整数の合計を求めて標準出力に書き出す。たとえば、number = 4なら、1+2+3+4=10を求める。もちろん、numberがどんな数でも(とは言っても上限があるが)きちんと求められるようにする。

そして、プログラムを発展させて、numberとして与えてられるいちばん大きな数値はいくつかを求めるプログラムを作成してみること。1からその数までの合計についても、numberと同じ型の変数を使って計算を求めることにする。とりあえず、numberが、short型でやってみてほしいが、そのほかの整数型でもチャレンジしてもらいたい。たとえば、byte型だと、1〜15の合計は120、1〜16の合計は136となるため、16までの数の合計をbyte型の変数では計算できないことになる。byte型の上限が127であることを思い出そう。

ならば、1から順に数値を増やして行って、たとえば16までの合計が、1つ前の数値、つま15までの合計の数値に16を加えたものかどうかを判断すると、どこかでおかしくなるはずだ。そのときの数値が、上限ということになる。これがヒントであるが、ちょっと複雑な問題なので頭をひねってもらいたい。

課題3

Chapter 8では、ひとりの人間をオブジェクトとして扱うPersonalityクラスを定義した。このやり方に従って、1冊の書籍を扱うBookというクラスをプログラムをとして作成すること。インスタンス変数として、書籍名、著者名、出版社名、定価、ページ数を定義すること。そして、インスタンス変数の「定価」は税抜き価格だとして、税込み価格を得るメソッドを定義すること。

次のようなプログラムに仕上げる。このBookクラスを使って、手近にある5冊分の本のインスタンスを生成し、その5冊のプログラムの税込み価格の合計を求めて標準出力に表示する。また、書籍名、著者名、税込み価格を、それぞれ「/」で区切って1行に書き、5冊分書籍の一覧表を標準出力に表示する。

課題4

ウインドウにテキストフィールド(JTextFieldあるいはJTextAreaクラスを使う)が配置されていて、さらにボタンが1つあるようなものを作っておく。そして、ボタンをクリックすると、テキストフィールドにある文字列の文字数と、英語で判断した場合の単語数を求めて表示するようにすること。文字数と単語数の表示のために、JTextFieldあるいはJLabelを使用するとよいだろう。単語数の判断は厳密には相当難しいが、「スペース」「ピリオド」「カンマ」「セミコロン」「コロン」があれば、単語が区切られていると判断する程度のものでかまわない。

課題5

ウインドウ内に、テキストフィールド(JTextField)が2つ、ドロップダウンリスト(JComboBox)が1つ、ボタンが1つ、ラベル(JLabel)が1つあるようにします。

ドロップダウンリストでは、四則演算の記号、+−×÷を選択できるようにしておく。

そして、テキストフィールドに数字を入れて、ボタンをクリックすると、ドロップダウンリストで選択している演算記号に応じて、それぞれ2つのテキストフィールドの値に対して演算を行った結果をラベルに表示するようにすること。(たとえば、テキストボックスにそれぞれ10と3という数値があって、ドロップダウンリストで×が選択されていれば、ボタンをクリックすると、ラベルに30が表示されるようにする。)

ヒント:JComboBoxで何番目が選択されているかを知るには、getSelectedIndex()メソッドを使えばいい。また、選択されている項目は、getSelectedItem()メソッドを使う。いずれも、引数は指定しない。

画面表示をわかりやすくするために、それ以外のコンポーネントを設定してもいい。

課題6

ウインドウに年と月を入力するためのJTextFieldをそれぞれ配置する。そして、ボタンをクリックすると、その月のカレンダーを表示するようなアプレットを作成すること。

カレンダーの表示では、シンプルな方法は、1つのJTextAreaを作り、そこにテキストで作ったカレンダーを表示すればよい。

別の方法としては、JTextFieldを7列5行にわたってきれいに縦横にならべて、その1つ1つに数字を埋めていけばいいだろう。

いずれにしても、凝ってくれてもいいのだけど、とにかく文字が出ればいいです。あまりきれいにレイアウトされていなくてもOKとします。

ウインドウに出すのが難しいと思ったら、標準出力に書き出すのでもかまいません。

この課題にはヒントが必要だと思うので、必要に応じてリクエストをください

ある月の1日が何曜日かを求める方法

プログラムの最初に「import java.util.*;」を書いておく。そして、2001年11月1日の曜日を求めたいのであれば、次のようなプログラムを作成する。2行目で、なぜか(笑〜計算がしやすいなどの理由はあるけど)、月だけは1を引いた数値を与える点に注意をしてほしい。

Calendar cal = Calendar.getInstance();
cal.set(2001,10,1);
int w = cal.get(Calendar.DAY_OF_WEEK);

以上のようにすると、変数wの値から、2行目のsetメソッドの引数で指定した日付の曜日がわかる。wが1なら日曜日、2なら月曜日・・・・というわけで、7なら土曜日となる。