入力される親子の関係から家系図(もどき)を表示するプログラムを作成せよ.
ただし,以下の機能を持つこと.
(<親の名前> <第一子の括弧表記> <第二子の括弧表記> ... )
+- <親の名前>
+- <第一子の名前>
| +-- <第一子の第一子の名前>
| +-- ...
+- <第二子の名前>
| ...
+- <第n子の名前>
+-- <第n子の第一子の名前>
+-- <第n子の第二子の名前>
...
*どうしても枝の表示がうまくいかない場合は枝ではなく空白を表示してもよい.ただしその場合は枝の表記を実現するためにどのようにアルゴリズムを検討し,何故うまくいなかなったか考察すること.
実装には再帰的データ構造を用いること. また演習で作成したリスト構造のクラス(を変更したもの)またはArrayListクラスを使用してもよい.
親子の関係は以下の形式で与えられるものとする.
<親の名前> <子の名前>(改行)一組の親子関係が与えられる度に出力を行うこと.
入力は最初の一組をのぞき,親または子のどちらかに既に入力されている人物が指定されると仮定してよい(独立した家系を複数保持することは考慮しなくてよい). また,矛盾した関係についても入力されないものとしてよい. 兄弟の順序に関しては特に任意の順序で表示してよい.
入力の処理部分のプログラム例を以下に示すので参考にするとよい.
import java.io.*;
import java.util.StringTokenizer;
public class FamilyTreeTest {
public static void main(String args[]) {
try {
//自分で作成した家系図を表すクラスのインスタンス作成等の
//初期化の処理を記述
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while((line = br.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(line);
String parentName = tokens.nextToken();
String childName = tokens.nextToken();
//parentNameに親,childNameに子の名前が格納されるので
//ここで各自必要な処理を記述
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
基本的なレポートの構成については
レポートの書き方 (内容について)と
レポートの書き方 (体裁について)
を参考にすること.
また,以下の内容を含めること.
LETUSに提出する際はレポート本文をPDFファイルに変換し,ソースファイル,実行結果とともにひとつのzipファイルとして提出すること. 以下にその方法を示す.
いつものようにTeXで作成する.ここではreport.texとし,report.texからreport.dviを作成 $ platex report.tex 以下の2つのコマンドによってreport.dviからreport.pdfファイルを作成する. $ export CMAPFONTS=$(ls -d /usr/share/ghostscript/*/Resource/CMap) $ dvipdfmx report.dvi 以下のコマンドによってpdfファイルの内容を確認すること. $ evince report.pdf submitというディレクトリを作成してこの中に 提出するファイル(レポート本文のpdfファイル,ソースファイル,実行結果のテキストファイル等)をすべてコピーする. ファイル名は自由でよい. $ mkdir submit $ cp report.pdf submit/ $ cp *.java submit/ $ cp result.txt submit/ submitの内容を63yyxxx.zipというひとつのzipファイルにまとめる. submitディレクトリ以下の内容が変更された場合はその都度このコマンドを実行すること $ zip 63yyxxx.zip -r submit/ この63yyxxx.zipをLETUSにて提出する.