1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

(3)- for文の入れ子実験

1
Last updated at Posted at 2020-04-20

やりたかった事

for **{}**for **{}**と、for **{**for **{}}**は結果がどう違うのか?を確認する実験。
少なくとも入れ子の動きを見える化したい。

通常のfor文から

通常の for{}for{}

    void TestFor()
    {
        for (int i = 0; i <= 1; i++)
        { 
            Debug.Log(i+"アジ泳がせる");
        }
        for (int j = 0; j <= 1; j++)
        {
                Debug.Log(j+"イカが食べる"); 
        }
    }

丸は多いけど、回数増やすと下みたいな廻り方をする
009.jpg
上が廻り終わったら、下が廻る。

--
(結果)
001.JPG
普通に上が2回廻って、下2回廻った。

ここから本題

入れ子のやつ、役者2人、2回ずつ廻す

・通常は **for{}for{}**やけど、**for{for{}}**みたいにする
・iが最初0で1までやけん2回ずつ廻す作戦

    void TestFor()
    {
        //1廻り
        for (int i = 0; i <= 1; i++)
        { 
        Debug.Log(i+"アジ泳がせる"); 

            //2廻り
            for (int j = 0; j <= 1; j++)
            {
            Debug.Log(j+"イカが食べる"); 
            }
        }
    }

--
(結果)
002.JPG

・予想は、、、
1廻り目はアジ→イカ
2廻り目もアジ→イカ
だったけど

・結果は、予想と違くて
1廻り目はアジ→イカ×2
2廻り目もアジ→イカ×2

入れ子にすると下で「for」が吹き溜まる
それって、一番下だけ?

入れ子のやつ、役者3人(+1)2回ずつ廻す

・通常は **for{}for{}**やけど、**for{for{}}**みたいにする
・iが最初0で1までやけん2回ずつ廻すの変わらず
・一番下だけ吹き溜まるか確認のため「人間」を追加

    void TestFor()
    {
        for (int i = 0; i <= 1; i++)
        { 
        Debug.Log(i+"アジ泳がせる"); 

            for (int j = 0; j <= 1; j++)
            {
            Debug.Log(j+"イカが食べる"); 

                for (int k = 0; k <= 1; k++)
                {
                Debug.Log(k + "人が釣る");
                }
            }
        }
    }

--
(結果)
003.JPG

もう理解不能状態
でも諦めないで!!
・親の「アジを泳がせる」のは2回だけに着目、
・順番もアジ基準では同じ感じなので分けて1週目だけ考えると

004.jpg

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

005.jpg

  • アジ (1廻目)

    • イカ (1廻目)

      • 人 
      • 人 
    • イカ (2廻目)

      • 人 
      • 人 
  • アジ(2廻目)

    • イカ (1廻目)

      • 人 
      • 人 
    • イカ (2廻目)、、、

      • 人 
      • 人 

やっと気付く。これって同じ数ずつ廻ってないんじゃね?

「アジ」も「イカ」も「人」も2回ずつ廻るのかと思っていたよ。
  (思い) (結果)
アジ 2回  → 2回
イカ 2回  → 4回
人  2回  → 8回

「人」に至っては、もう8回も意図せず廻らせていた模様。
あれは、それでか-。

役者4人(+1)に増やすと

  • アジ (1廻目)

    • イカ (1廻目)

      • マグロ (1廻目)

         - 人 
         - 人 

      • マグロ (2廻目)

         - 人
         - 人

    • イカ (2廻目)

      • マグロ

         - 人
         - 人

      • マグロ

         - 人
         - 人

  • アジ (2廻目)、、、

まとめ

・結局、何回廻ったんな?

2回ずつ廻したかったのに、こんなに差が出るなんて。

for3回 for4回
アジ 2回 2回
イカ 4回 4回
マグロ 不在 8回
8回 16回

・for{for{}}で2回以上廻す場合のプログラムの流れ

→1)上から下までプログラムが下り

→2)下からforを処理してプログラムが上って行き

ここでなんで「人」廻すん?えっなんで次「マグロ」?ええ?ってなる。 

→3)上りついたらまた同じ事を繰り返す。

いつのまに、たどり着いてたん?ってなる。


ここから違う処理のメモ。。

  • アジ 0円(1廻目)

    • イカ 100円

      • マグロ 50円

         - 人 10円
         - 人 20円、、、

      • マグロ 100円、、

         - 人
         - 人

    • イカ 200円、、

      • マグロ

         - 人
         - 人

      • マグロ

         - 人
         - 人

  • アジ 500円、、、

(結論途中)

各役者を均等に廻し、同時に計算するプログラムを作るのは for{}for{}でも、for{for{}}でも不可能だった。

・例えば
 アジ×2廻す →イカ×2廻す →マグロ×2廻す →人×2廻す
 で、
 total(1)=アジ1+イカ1+マグロ1+人1;
 total(2)=アジ2+イカ2+マグロ2+人2;
 みたいな事は、for{}for{}でも、for{for{}}だけでは難しい。

・結局、この書き方for{for{}}は末尾の「アジ」しか思うように動かせていなかった。
・実現するなら多分forで良いけど、各役者を1つずつ関数にして計算する所も関数作ってやればいい気がする。

・でも
 total=アジ1-10匹+ イカ1-10匹+マグロ1-10匹+人1-10匹;
 を全て順に計算させるならfor{for{}}が最適解。
 うまくいかないけど。。

つづく

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?