樹形図2

異なる4文字(a,b,c,d)から3文字を選んで並べる場合の数に対する樹形図.

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (title=)

jyukeizu02.zip

プログラムの概要は次の様になる.
1.aを固定して,b,c,d を並べる部分樹形図を作成する
2.始めの部分樹形図を基に他の3つの部分樹形図を作る.

Addax(0);
// 座標軸は描かない
Parm(j,k,Lst):=(regional(x,X);X=Lst;x=X_j;X_j=X_k;X_k=x;X);
// シンディスクリプトによるユーザー関数定義である
// 与えられたリスト Lst のj番目の要素とk番目の要素を入れかえたリストを返す.Lst は変更しない
// regional(x,X) は2つの局所変数の宣言.
// 局所変数は関数の中だけで通用する変数で,関数の外で同じ名前の変数があっても影響を与えない
// 次の1ブロックは種々の初期値の設定
vr1=[0, 0.3];
// 右6本の線分の右端点間距離0.3
vr2=[-0.8, 0];
// 左3本の線分の右端点の相対x座標-0.8
// 右6本の線分の右端点x座標を0とする相対座標
vr3=[-0.5, 0];
// 各線分長のx方向成分0.5
vr4=[0.3, 0];
// 左線分の右端点と右線分の左端点のx方向距離0.3
vr5=vr4/2;
// 各端点と文字間の距離0.15
va=[0, -1.85];
// 部分樹形図全体の平行移動ベクトル
sL0=["a","b","c","d"];
// 樹形図に書き込む文字の定義
// 次の行からブロックの最後まで,リスト pL の初期値の設定
// pL は各線分の13個の端点の座標を成分に持つ.成分の順序は
// 第1に左端点,次に左3線分の右端点が上から順に,残りも同様
pL=0, 0;
// 13番目の端点の座標を初期値とする
forall(1..5, pL=prepend(pL_1+vr1, pL));
// prepend(<expr>,<リスト>) は <expr> を <リスト> の前方に付加したリストを返す
tmp=[(pL_5+pL_6)/2+vr2];
// pLの5番目と6番目の中点をvr2だけ平行移動した座標のリスト
forall([3,1], tmp=prepend*1/2+vr2, tmp));
pL=[tmp_2+vr3]++tmp++pL;
// <リスト1>++<リスト2> は2つのリストの連結,
// concat(<リスト1>,<リスト2>) の省略形
// <リスト1>++<リスト2>++<リスト3> はOKだが
// <リスト1>++<リスト2>++<リスト3>++<リスト4> はエラー
// 最後のforallのブロックで4つの部分樹形図を上から順に書く
forall(1..4, k,
 if(k>1, pL=apply(pL,#+va));
// apply(pL,#+va)) はplの全ての要素にvaを加えてできるリストを返す.部分樹形図をvaだけ平行移動している
 Setcolor([0.8,0,0,0]);
 forall(2..4, Listplot(text(#-1+9*(k-1)),[pL_1, pL_#]));
 forall(2..4,
   Listplot(text(2*#+9*(k-1)), [pL_#+vr4, pL_(2*#+1)]);
   Listplot(text(2*#+1+9*(k-1)), [pL_#+vr4, pL_(2*#+2)])
 );
 Setcolor("black");
// Setcolorで挟まれた5行で樹形図の線分を描く.
// 先ず左3本,次に右6本.生成される線分は9本ずつだから,各部分樹形図ごとに番号をずらしして4X9=36本できる
 sL=Parm(1,k,sL0);
// k=1のときParmは恒等変換
 sL0=sL;
// sLが以下で変化する前に記憶しておく
 tmp1=Parm(2,3,sL);
 tmp2=Parm(2,4,tmp1);
 sL=sL++sL_[3,4]++tmp1_[3,4];
// sL_[3,4] はsLの3,4番目の要素を要素とするリストを返す
// 例:a,a],[b,b],[c,c],[d,d_[3,4]=c,c],[d,d
 sL=sL++tmp2_[3,4];
 Letter([pL_1-vr5,"c",sL_1]);
// 先頭文字の書き込み
 forall(2..10, Letter([pL_#+vr5,"c",sL_#]));
// 残りの9文字を書き込む
);
最終更新:2016年10月30日 13:29
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|

*1 pL_#+pL_(#+1