
お世話になります。
タイトル通り、階層図作成処理を作ろうとして
行き詰っています。
1階層 2階層
○┬○ ○┬○┬○
├○ │ ├○
└○ │ └○
├○┬○
│ ├○
│ └○
└○┬○
├○
└○
という感じで、階層毎に3つに分岐させようと
しています。
階層が可変になっており、できれば階層数を
関数の引数として渡せば、上記の様な図が
できればいいと思っているのですが、
どの様な処理を書けばいいでしょうか?
#多次元ループですかね?やはり・・・・
ヒントなりともいただけるとありがたいと思います。
また、上記階層図よりも、こっちの方が見やすいなどの
方法がありましたら教えていただきたいと思います。
No.2ベストアンサー
- 回答日時:
あんまり綺麗ではないが以下のようなものかな。
#! /usr/bin/perl
push @str, "○";
push @str, "○";
push @str, "○";
printf("○┬");
push @sp, " ";
ppp(1);
sub ppp
{
my ($lvl) = @_;
my ($i);
$lvl--;
for($i = 0; $i <= $#str; $i++){
if($lvl > 0){
if($i == $#str){
printf("%s└○┬",join('',@sp));
push @sp, " ";
} elsif($i == 0) {
printf("○┬");
push @sp, "│ ";
} else {
printf("%s├○┬",join('',@sp));
push @sp, "│ ";
}
ppp($lvl);
pop @sp;
} else {
if($i == 0){
printf("$str[$i]\n");
} elsif($i == $#str){
push @sp, "└";
printf("%s$str[$i]\n", join('',@sp));
pop @sp;
} else {
push @sp, "├";
printf("%s$str[$i]\n", join('',@sp));
pop @sp;
}
}
}
}
こんにちわ。
お~、すごいですね(^^
思い通りの動きをしています。
やはり複雑な処理にせざるを得ないのですね・・・
あとは、この処理を利用させてもらって
確率を表示させる事ができる様にしたいと思います。
ありがとうございました。(^^
No.1
- 回答日時:
多次元ループというより「再帰」なのかな・・・
具体的に何の階層図なのかとか使用方法とかがあると読む側がイメージし易くなるかも。
趣旨を理解できていませんがJavascriptのちょっとした(?)サンプルを書いてみました。明らかに描画される図は違いますが参考になれば。
(数値を変え、描画ボタンを押して動作させてみてください。あまり大きな数値を入れるとブラウザが固まるかもしれませんので1-4ぐらいで。)
<html>
<head>
<title>再帰でリストを描く</title>
<script type="text/javascript">
<!--
var DepthCounter;
function show_tree(depth) {
oTOP = document.getElementById('tree');
if(oTOP.firstChild)oTOP.removeChild(oTOP.firstChild)
makelist(oTOP,'',depth);
}
function makelist(oOwner,str,depth) {
depth--;
var oUL = document.createElement('UL');
for(var i=0;i<3;i++) {
var oLI = document.createElement('LI');
var Text = str + '-' + (i+1);
var tNode = document.createTextNode(Text);
oLI.appendChild(tNode);
if(depth) makelist(oLI,Text,depth);
oUL.appendChild(oLI);
}
oOwner.appendChild(oUL);
}
//-->
</script>
</head>
<body>
<p>階層数<input type="text" size="3" value="2" id="depth">
<input type="button" value="描画" onclick="show_tree(document.getElementById('depth').value)"></p>
<div id="tree"></div>
</body>
</html>
この回答への補足
ありがとうございます。
確かにイメージが掴みにくいですね・・・
簡単に言うと
1.ある物に対して数種類の行動を起こす事ができる。
2.その行動は最大10回まで行う事ができる。
3.その行動によって、成功、失敗、破壊という結果になる。
4.行動の種類によってそれぞれの確率が異なる
という動きが基本としてあります。
これをふまえて、あるユーザーがそれぞれの行動によって
起こる結果の確率、例えば全て成功する確率とか、
1回目失敗した後、全部成功する確率などを一覧で
表示したいのです。
#破壊された場合、次の行動が起こせなくなるのですが
#そのあたりを考えると余計にわかりにくいかと、今回は
#そのまま続けられるという事で書いていました。
流れを考えると、階層図がふさわしいのかなと思い、
階層図の描画処理という事で書かせていただきましたが
実際は階層図でなくても問題はありません。
教えていただいた方法は、参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascript画面を自動で切り替...
-
onchangeイベントを使ってspan...
-
innerHTML実行後のイベント
-
ActiveXobjectが作成できない
-
javascriptで、表示されている...
-
onclickとonkeypressの重複
-
javascriptで文字挿入でtoggle...
-
関数でy=g(x)のgとは何の略です...
-
undefinedを表示させない方法は...
-
jspからjavascriptの変数引継ぎ
-
C#で、ContextMenuStripに動的...
-
C#OpenCv V4にのエラーに関する...
-
ASP+アクセスでのSQLコメントに...
-
functionから別のfunctionを実...
-
JavaScriptの日付の比較
-
webページ上のTabキーの動き
-
食材の期限を管理するためにGAS...
-
C#テキストボックスの文字を配...
-
ジャバスクリプトで空白(スペー...
-
なぜmatchメソッドがエラーにな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
onchangeイベントを使ってspan...
-
appendChildがieだとできない??
-
innerHTML実行後のイベント
-
RadioButtonListの表示制御
-
javascript 特定のタグのidの存...
-
【Tabキー】特定の範囲内だけで...
-
onclickとonkeypressの重複
-
javascriptで編集可能不可能の...
-
画像上のクリックした場所が分...
-
配列の大括弧と丸括弧はどう違う?
-
IE8でdivのcontenteditable=tru...
-
画像の一部を表示
-
問題はbind の付いたリスナーを...
-
WordPressのコンタクトフォーム...
-
日本語入力の禁止
-
「nullまたはオブジェクトでは...
-
div要素内の全input要素をdisable
-
javascriptでCSVを呼出しvlookup
おすすめ情報