このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1309076891/908
#  【 課題 】ttp://www.dotup.org/uploda/www.dotup.org2712711.txt.html 
#  【 形態 】1. Javaアプリケーション(main()で開始)  
#  【 GUI  】制限なし 
#  【 期限 】3/8 0:00 
#  【 Ver  】java version "1.7.0_02-ea" 
#  【 補足 】3/8が提出期限なので、それまでにどうかお願いいたします。 
# 
# 

#  専門学校での課題です。
#  課題1については自力でできたのですが、ところどころわからないので、課題1から3をお願いします
#  
#  
#  
#  課題1.
#  以下の仕様に従ってクラスを作った後、長方形グラフ、三角グラフ、放物線グラフの逆さと幅を設定し、グラフを描くプログラムを作りなさい。プロジェクト名は「kadai1」、mainを持つクラス名は「GraphTest」とする。
#  
#  ・クラス1からクラス3まで全てのクラスを実装すること。
#  ・全てのクラスは、カプセル化を行い、フィールドは完全に隠蔽すること。ただし、サブクラスは親クラスのフィールドは見えてもいいとする。
#  ・自分自身のフィールドを設定できるコンストラクタも作ること。
#  ・三角クラス及び放物線クラスは長方形クラスから継承すること。
#  ・"グラフを描く"メソッドはオーバーライドを使うこと。
#  
#  なお、グラフは*(半角)を用いて以下のようなものをテキストで描くとする。
#  
#  長方形 高さ5 幅4の場合
#  ****
#  ****
#  ****
#  ****
#  ****
#  
#  三角 高さ5 幅4の場合
#  幅優先で描かれて幅が0の状態(*がない状態)から1つずつ増える、高さは無視
#  
#  *
#  **
#  ***
#  ****
#  
#  放物線 高さ5 幅4の場合
#  幅優先で描かれて幅が4の状態から1つずつ減った後、0まで行ったところでまた高さまで1ずつ増えていく、幅は無視
#  ****
#  ***
#  **
#  *
#  
#  *
#  **
#  ***
#  ****
#  
#  クラス1
#  (クラス名)
#  長方形グラフ
#  
#  (フィールド)
#  高さ
#  幅
#  
#  (メソッド)
#  高さの設定をする
#  幅の設定をする
#  グラフを描く
#  
#  クラス2
#  (クラス名)
#  三角グラフ
#  
#  (メソッド)
#  グラフを描く
#  
#  クラス3
#  (クラス名)
#  放物線グラフ
#  
#  (メソッド)
#  グラフを描く
#  
#  

'長方形グラフ、三角グラフ、放物線グラフの逆さと幅を設定し、グラフを描く' :-
        長方形(5,4),
        三角形グラフ(4),
        放物線グラフ(4).

長方形(_高さ,_幅) :-
        幅分の星文字列(_幅,_星文字列),
        for(1,_行,_高さ),
        writef('%t\n',[_星文字列]),
        _行 = _高さ.

幅分の星文字列(_幅,_星文字列) :-
        length(L,_幅),
        all(L,'*'),
        concat_atom(L,S).

三角グラフ(_幅) :-
        部分三角グラフ(_幅,L,L0,_星文字列),
        L = L0

部分三角グラフ(_幅,L,L0) :-
        length(L,_幅),
        append(L0,_,L),
        length(L0,_行の幅),
        幅分の星文字列(_行の幅,_星文字列),
        writef('%t\n',[_星文字列]).

倒置した三角グラフ(_幅) :-
        倒置した部分三角グラフ(_幅,L,L1,_星文字列),
        L1 = [].

倒置した部分三角グラフ(_幅,L,L1) :-
        length(L,_幅),
        append(_,L1,L),
        length(L1,_行の幅),
        幅分の星文字列(_行の幅,_星文字列),
        writef('%t\n',[_星文字列]).

放物線グラフ(_高さ) :-
        _幅 is _高さ - 1,
        倒置した部分三角グラフ(_幅,L,L1),
        L1 = [_],
        部分三角グラフ(_幅,L,L0),
        L = L0.