ページ 11

ネストforについて教えて下さい(入門

Posted: 2018年7月31日(火) 07:13
by ああああっ
ネスト構造について今ひとつ読んでる入門書だけじゃ理解できないので教えて下さい
これってどういう順番で実行されてるんですか?

for (int i = 0; i <= 5; i++) {
for (int j = 0; j < i; j++) {
cout << '*';
}
cout << endl;
}

Re: ネストforについて教えて下さい(入門

Posted: 2018年7月31日(火) 10:01
by box
ループの中で、*のかわりに
iとjの値を出力してみたらどうですか?

Re: ネストforについて教えて下さい(入門

Posted: 2018年7月31日(火) 10:25
by かずま
ああああっ さんが書きました:
11ヶ月前
ネスト構造について今ひとつ読んでる入門書だけじゃ理解できないので教えて下さい
これってどういう順番で実行されてるんですか?
フォーラムルールに従って、codeタグを使用してください。

さて、実行順序ですが、次のコードで見てみましょう。

コード:

#include <iostream>

using namespace std;

int k = 0;
void p(const char *s) { cout << "   " << ++k << ": " << s << endl; }

int main()
{
	for (int i = (p("i = 0"), 0); p("i <= 5"), i <= 5; p("i++"), i++) {
		for (int j = (p("j = 0"), 0); p("j < i"), j < i; p("j++"), j++) {
			p("cout << '*'"), cout << '*';
		}
		p("cout << endl"), cout << endl;
	}
}
実行結果

コード:

   1: i = 0
   2: i <= 5
   3: j = 0
   4: j < i
   5: cout << endl

   6: i++
   7: i <= 5
   8: j = 0
   9: j < i
   10: cout << '*'
*   11: j++
   12: j < i
   13: cout << endl

   14: i++
   15: i <= 5
   16: j = 0
   17: j < i
   18: cout << '*'
*   19: j++
   20: j < i
   21: cout << '*'
*   22: j++
   23: j < i
   24: cout << endl

   25: i++
   26: i <= 5
   27: j = 0
   28: j < i
   29: cout << '*'
*   30: j++
   31: j < i
   32: cout << '*'
*   33: j++
   34: j < i
   35: cout << '*'
*   36: j++
   37: j < i
   38: cout << endl

   39: i++
   40: i <= 5
   41: j = 0
   42: j < i
   43: cout << '*'
*   44: j++
   45: j < i
   46: cout << '*'
*   47: j++
   48: j < i
   49: cout << '*'
*   50: j++
   51: j < i
   52: cout << '*'
*   53: j++
   54: j < i
   55: cout << endl

   56: i++
   57: i <= 5
   58: j = 0
   59: j < i
   60: cout << '*'
*   61: j++
   62: j < i
   63: cout << '*'
*   64: j++
   65: j < i
   66: cout << '*'
*   67: j++
   68: j < i
   69: cout << '*'
*   70: j++
   71: j < i
   72: cout << '*'
*   73: j++
   74: j < i
   75: cout << endl

   76: i++
   77: i <= 5

Re: ネストforについて教えて下さい(入門

Posted: 2018年8月01日(水) 23:51
by かずま
かずま さんが書きました:
11ヶ月前
さて、実行順序ですが、次のコードで見てみましょう。
「式」と「式と同じ文字列」を書くのは煩わしいので、
マクロを使って書き直してみました。

コード:

#include <iostream>

using namespace std;

int k = 0;
void p(const char *s) { cout << "   " << ++k << ": " << s << endl; }
#define v(s) (p(#s), (s))

int main()
{
	p("i = 0");
	for (int i = 0; v(i <= 5); v(i++)) {
		p("j = 0");
		for (int j = 0; v(j < i); v(j++)) {
			v(cout << '*');
		}
		v(cout << endl);
	}
}
実行結果は変わりません。

どういう順番で実行されてるのか、まだ分かりませんか?