重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

タイトル通り、階層図作成処理を作ろうとして
行き詰っています。

1階層  2階層
○┬○  ○┬○┬○
 ├○   │ ├○
 └○   │ └○
      ├○┬○
      │ ├○
      │ └○
      └○┬○
        ├○
        └○

という感じで、階層毎に3つに分岐させようと
しています。

階層が可変になっており、できれば階層数を
関数の引数として渡せば、上記の様な図が
できればいいと思っているのですが、
どの様な処理を書けばいいでしょうか?
#多次元ループですかね?やはり・・・・

ヒントなりともいただけるとありがたいと思います。

また、上記階層図よりも、こっちの方が見やすいなどの
方法がありましたら教えていただきたいと思います。

A 回答 (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;
}
}
}
}
    • good
    • 0
この回答へのお礼

こんにちわ。

お~、すごいですね(^^
思い通りの動きをしています。

やはり複雑な処理にせざるを得ないのですね・・・

あとは、この処理を利用させてもらって
確率を表示させる事ができる様にしたいと思います。

ありがとうございました。(^^

お礼日時:2005/04/23 19:20

多次元ループというより「再帰」なのかな・・・



具体的に何の階層図なのかとか使用方法とかがあると読む側がイメージし易くなるかも。

趣旨を理解できていませんが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回目失敗した後、全部成功する確率などを一覧で
表示したいのです。
#破壊された場合、次の行動が起こせなくなるのですが
#そのあたりを考えると余計にわかりにくいかと、今回は
#そのまま続けられるという事で書いていました。

流れを考えると、階層図がふさわしいのかなと思い、
階層図の描画処理という事で書かせていただきましたが
実際は階層図でなくても問題はありません。

教えていただいた方法は、参考にさせていただきます。
ありがとうございました。

補足日時:2005/04/23 00:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!