反復行動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sousi

反復行動について

#1

投稿記事 by sousi » 17年前

ゲームでは、反復行動にはwhile文が使われている事が多いと思うのですが勉強している間にひとつ疑問が;
(以降、反復行動=ループ)

・ループの中にループは作れるのかどうか?

ループの中にループが入れれるのであればどのようにすればいいのでしょうか?
いま、考えているのは


・仮に一番外側のループをAと言ったとき
 そのループの中に1と言うループを入れる(添付参照)



このとき、一番外のループAの処理は

ループ1(条件を満たしたら)→処理1→ループ2(条件を満たしたら)→ループ1

となるのでしょうか?

へろりくしょん

Re:反復行動について

#2

投稿記事 by へろりくしょん » 17年前

言いたいことが今ひとつ分からないのですが。
とりあえず書いてみればいいんじゃないでしょうか?
int i = 0;

while(i++ < 10){
	int j = 0, k = 0;
	while(j++ < 10){
		printf("j = %d\r\n", j);
	}
	printf("処理\r\n");
	while(k++ <= 10){
		printf("k = %d\r\n", k);
	}
}

box

Re:反復行動について

#3

投稿記事 by box » 17年前

ループの中にループの中にループの中にループ…、
いくらでも作れます。

たかぎ

Re:反復行動について

#4

投稿記事 by たかぎ » 17年前

ブロック(繰返し文も含む)の入れ子は、少なくとも127段階まで保証されます。
ただし、C99に対応していない処理系の場合は15段階までです。

box

Re:反復行動について

#5

投稿記事 by box » 17年前

> ブロック(繰返し文も含む)の入れ子は、少なくとも127段階まで保証されます。
> ただし、C99に対応していない処理系の場合は15段階までです。

無限段階ではなかったのですね。
勉強になりました。

kazuoni

Re:反復行動について

#6

投稿記事 by kazuoni » 17年前

> ブロック(繰返し文も含む)の入れ子は、少なくとも127段階まで保証されます。
> ただし、C99に対応していない処理系の場合は15段階までです。

自分もしりませんでしたぁ~!昔友達に「いくらでも書ける」なんて堂々と言ってしまった記憶があるんですが・・・^^;

たかぎ

Re:反復行動について

#7

投稿記事 by たかぎ » 17年前

> 無限段階ではなかったのですね。

翻訳限界なので、あくまでも規格上保証される最低限のものです。
普通はもっと多いはずです。
メモリは有限なので、無限というのは原理的に無理ですね。

sousi

Re:反復行動について

#8

投稿記事 by sousi » 17年前

ちょっと休憩してる間にこんなに・・・・・ありがとうございます。(涙
ループの中にループは作れるんですね、勉強になりました^^

ところで、もうひとつの質問、

一番外のループ内の処理
ループ1(条件を満たしたら)→処理1→ループ2(条件を満たしたら)→ループ1

というような考えで合っているのでしょうか?

やそ

Re:反復行動について

#9

投稿記事 by やそ » 17年前

>一番外のループ内の処理
>ループ1(条件を満たしたら)→処理1→ループ2(条件を満たしたら)→ループ1

>というような考えで合っているのでしょうか?

添付の図をそのまま見た場合・・・残念ながら違います。

ループA

 ループ1
 ループ1終わり

 処理1

 ループ2
 ループ2終わり

ループA終わり

という構造になっているようです。

処理1をループ1に入れたい場合ループ1の枠線の中に処理1が入るような図になるはずです。

へろりくしょん

Re:反復行動について

#10

投稿記事 by へろりくしょん » 17年前

>一番外のループ内の処理
>ループ1(条件を満たしたら)→処理1→ループ2(条件を満たしたら)→ループ1

>というような考えで合っているのでしょうか?

添付の図をそのまま見た場合・・・残念ながら違います。


これはどうでしょうね。

sousiさんの言う(条件を満たしたら)というのは、ループの終了条件を満たしたら。
という意味で言っているのだと。
つまり、(条件を満たしたら)という部分でループが終了すると解釈できませんか。

これだと、sousiさんの認識で間違いではないはずです。


#ループは条件を満たしている限り回り続けるので、ここでちょっと噛み合ってないような気がします。

やそ

Re:反復行動について

#11

投稿記事 by やそ » 17年前

Whileについてだから「条件を満たしたら」というのは「ループの継続条件」のことだと思ってました。

その辺の意識のズレがあれば、意味が違ってきますね^^;

sousi

Re:反復行動について

#12

投稿記事 by sousi » 17年前

返信遅れてごめんなさい。モデムが故障してしまいまして^^;
言いたかったことは へろり さんの説明通りです。

ですが、これをゲームで使うとなるとものすごく処理が重くなってしまうようですね。
処理が軽く反復行動をやりたい場合にはやはりif文を使うほうがいいみたいです。

たくさんの解答ありがとうございました。困ったら、また助けてください^^

たいちう

Re:反復行動について

#13

投稿記事 by たいちう » 17年前

> ですが、これをゲームで使うとなるとものすごく処理が重くなってしまうようですね。
> 処理が軽く反復行動をやりたい場合にはやはりif文を使うほうがいいみたいです。

質問の背景が分かりませんが、勘違いしていませんか?

仮に100回同じ処理を行うとして、繰り返しの処理をループでしてもifでしても、
実行時間は変わらないでしょう。100回という回数を減らすことができたり、
多くなってしまうならば、実行時間は変わりますが、これは無駄な処理が
あるかどうかなので、ifの使用や多重ループとは別の話です。

閉鎖

“C言語何でも質問掲示板” へ戻る