スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ネストされた複数のfor文を1つにまとめる

プログラムにおいて、ネストされた複数の for 文を 1 つにまとめる方法。

プログラム例は JavaScript によるものですが、他のプログラミング言語にも簡単に適用できると思います。

以下、3 重にネストされた場合を述べますが、一般の場合も同様です。

<html>
<head>
<title>sample1.html</title>
</head>
<body>
<script type="text/javascript">
<!--
var iMax = 2;
var jMax = 3;
var kMax = 4;

for(var i=0; i<iMax; i++) {
  for(var j=0; j<jMax; j++) {
    for(var k=0; k<kMax; k++) {
      document.open();
      document.write(i+","+j+","+k+"<br>");
      document.close();
    }
  }
}
//-->
</script>
</body>
</html>

このプログラムを html ファイルとして保存し、ブラウザで開くと、実行結果は次のようになります。

0,0,0
0,0,1
0,0,2
0,0,3
0,1,0
0,1,1
0,1,2
0,1,3
0,2,0
0,2,1
0,2,2
0,2,3
1,0,0
1,0,1
1,0,2
1,0,3
1,1,0
1,1,1
1,1,2
1,1,3
1,2,0
1,2,1
1,2,2
1,2,3

上のプログラムは、次のように書き換えることができます。

<html>
<head>
<title>sample2.html</title>
</head>
<body>
<script type="text/javascript">
<!--
var iMax = 2;
var jMax = 3;
var kMax = 4;

var nMax = iMax * jMax * kMax;
for(var n=0; n<nMax; n++) {
  var k = n % kMax;
  var j = ((n-k) / kMax) % jMax;
  var i = (((n-k) / kMax - j) / jMax) % iMax;
  document.open();
  document.write(i+","+j+","+k+"<br>");
  document.close();
}
//-->
</script>
</body>
</html>

さらに、任意有限個の for 文のネストは、高々 2 重にネストされた for 文に書き換えることが可能です。

<html>
<head>
<title>sample3.html</title>
</head>
<body>
<script type="text/javascript">
<!--
var aMax = new Array(2, 3, 4);

var nMax = 1;
for(var i=0; i<aMax.length; i++) {
  nMax *= aMax[i];
}

var a = new Array(aMax.length);
for(var n=0; n<nMax; n++) {
  var q = n;
  for(var i=aMax.length-1; i>=0; i--) {
    a[i] = q % aMax[i];
    q = (q - a[i]) / aMax[i];
  }
  document.open();
  document.write(a.join(",")+"<br>");
  document.close();
}
//-->
</script>
</body>
</html>

【theme : プログラミング
【genre : コンピュータ

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。