- ベストアンサー
分岐数といえば
こんにちは。 作成したプログラムについての資料を作成しています。 ステップ数などを記述しますが、その中に「分岐数」があります。 そこで気になったのが、switch文の場合は、 一つのswitch文で1カウントアップでよいものでしょうか? それとも、case毎にカウントアップになるのでしょうか? ちなみに、if文の場合、 if~else~だったら、1カウントアップで、 if~elseif~だったら、2カウントアップするのかな、 と考えています。 一般的に、というか、皆さんでしたら、どのようにカウントしますか?? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
分岐数はプログラムの複雑さを表現する1方法だと思います。 テスト量も分岐数によって変化しますね。 私がその立場なら枝の数を分岐数にします。 if~else~だったら、2カウントアップで、 if~elseif~だったら、3カウントアップですね。 switch文の場合は、case数+1を使います。
その他の回答 (2)
- bloomers_daisuki
- ベストアンサー率14% (40/267)
switch ( 式 )文の「式」によって違います。 評価される「式」が8ビット程度であれば現在のコンパイラはテーブルを生成して全てのcaseに対して同じステップで分岐することが出来るでしょう。16ビット、32ビットでも連続した値であればテーブルを生成するかもしれません。 また、コンパイラの性能によっては、かなりの最適化をするのでソースレベレでのステップの判断はほぼ不可能でしょう。アセンブリ言語で出力してその部分見てみると好いでしょう。
お礼
そんなに厳密に算出しなければいけない資料でもないので、単純にソースレベルでカウントしたもので、OKと思っています。 ありがとうございました!
- nitscape
- ベストアンサー率30% (275/909)
どのレベルの"分岐"を考えるかによると思います。 フローチャートを書いてみて枝分かれがいくつになるかを考えるといいかと思います。とは言うもののどの"レベル"でフローチャートを書くかによっても枝分かれの数は大きく変わりますし。。。 結論的には資料としてどのレベルの"分岐"を求められているかによります。 例えば以下のようなプログラムがあったとします。単純にifを数えると相当な数になると思います。しかしmain()を見るとtest()が成功するか失敗するかによってexecute()が実行されるかどうかが決まっています。仮にこのプログラムの目的とする仕事がexecute()にあるのでしたらtest()内のifは無視してmain()内で分岐1つというカウントにした方がスマートです。 bool test() { if(aa) return false; if(bb) return false; if(cc) return false; if(dd) return false; return true; } int main() { if(test() == false) return -1; execute(); return 0; } ;;;;;; 私見ではステップ数とか分岐とか調べても意味がないと思うのですが。。。古い人ほど書かせたがるのですよね。MFCやATLなどのライブラリを使っているときは「どうやって計算するんだ!」って叫びたくなります。
お礼
古い人ほど・・・、確かにそうですねぇ。 「とりあえず、出しとけ」位のレベルの資料かと・・・。 なので、単純にNo.1さんの数え方でやってみようと思います。 ありがとうございました!
お礼
ありがとうございます。 case文をif文で書き直すことを考えると、case数で+1ですよね。 ありがとうございました!