樹形図2

「樹形図2」の編集履歴(バックアップ)一覧はこちら

樹形図2 - (2016/02/01 (月) 15:42:18) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

============================================= 樹形図03   16.01.25 jyukeizu03.cdy 異なる4文字(a,b,c,d)から3文字を選んで並べる 場合の数に対する樹形図. プログラムの概要は次の様になる. 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((pL_#+pL_(#+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文字を書き込む );

表示オプション

横に並べて表示:
変化行の前後のみ表示:
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|