「割った余り」を使ってループを実現するについて

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

「割った余り」を使ってループを実現するについて

#1

投稿記事 by 中村 » 3年前

新・ゲームプログラミングの館にて、以下のサイトで「割った余り」を使ってループをさせています。割った余りを使ってなぜループするのか全く分かりません。初心者にもわかるように教えていただけると幸いです。
http://dixq.net/g/03_02.html
http://dixq.net/g/03_03.html
http://dixq.net/g/03_04.html

NakaTaka

Re: 「割った余り」を使ってループを実現するについて

#2

投稿記事 by NakaTaka » 3年前

ゲームプログラマーではないので正確なことは言えませんが、
あくまで参考として読んでください。
(理解しずらかったら申し訳ございません。)
1つ目の参考サイト(http://dixq.net/g/03_02.html)に下記のコードがありますが、

コード:

int x = 0;
 while( ... ){
  x++;
  if( x == 3 ){
    x = 0;
  }
 }

コード:

int x = 0;
 while( ... ){
  x = ( x + 1 ) % 4
 }
見てわかる通り、行数、インデントの深さが少なくなりコードが見やすくなっています。
例えば1000行と半分の500だとコードをスクロールする量が違いますし、
インデントも

コード:

void main(void)
{
	int a, b,c,d,e = 0;

	if (a == 0)
	{
		if (b == 0)
		{
			if (c == 0)
			{
				if (d == 0)
				{
					if (e == 0)
					{

					}
				}
			}
		}
	}
}
よりも

コード:

void main(void)
{
	int a, b,c,d,e = 0;

	if ((a == 0) && (b == 0) && (c == 0) && (d == 0) && (e == 0))
	{

	}
}
の方見やすいと思います。
このように行数、インデントの深さを減らすことで
可読性や処理速度の向上など様々な利点があります。

アバター
usao
記事: 1554
登録日時: 6年前

Re: 「割った余り」を使ってループを実現するについて

#3

投稿記事 by usao » 3年前

>割った余りを使ってなぜループするのか全く分かりません。

ちょっとこの文だと,

・「x = ( x + 1 ) % 4」なる処理を繰り返し行うことで,xの値が0,1,2,3,0,1,2,3,...になるという理屈 がわからない
・なぜその目的に剰余を用いた式を持ち出すのかという理由 がわからない (剰余を用いない方法でもできるのに)

のどちらを意図しているのか判断し難いです.

前者側であれば,
【xの値を,「{xの現在の値に1を足した結果}を4で割った余り」に変更する】
ということを繰り返すとxの値がどのように変化していくか を紙の上で計算してみればよいかと思います.

後者側な話なのであれば,
(真意はそのリンク先記事を書いた人にしかわからないということになりますが)
個人的には「実際にコーディングする人が把握できる方法」を用いればよいかと思います.
例えば

コード:

x = ( x==3 ? 0 : x+1 );
とかなら,ぱっと見でもわかりやすいし1行で書けて良いかな とか思います.


それはそれとして,1つ目のリンク http://dixq.net/g/03_02.html に書かれている 余りを使わない側の例

コード:

int x = 0;
while( ... ){
  x++;
  if( x == 3 ){
    x = 0;
  }
    //xの値はここで用いたいのだと思うが
}
だと,xの値は 0,1,2,0,1,2,... という繰り返しになり,記載されている説明と合致しないように見えますね.

アバター
Dixq (管理人)
管理人
記事: 1659
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「割った余り」を使ってループを実現するについて

#4

投稿記事 by Dixq (管理人) » 3年前

どこで分からないのか具体的に教えてください。
一応初心者にもわかりやすいように書いたつもりなので・・。
http://dixq.net/g/03_02.html
の内容が既に分からないですか?

> usaoさん

確かにx==4じゃないとおかしいですね・・。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 9年前
住所: 大阪府
連絡を取る:

Re: 「割った余り」を使ってループを実現するについて

#5

投稿記事 by Hiragi(GKUTH) » 3年前

Dixq (管理人) さんが書きました:どこで分からないのか具体的に教えてください。
一応初心者にもわかりやすいように書いたつもりなので・・。
http://dixq.net/g/03_02.html
の内容が既に分からないですか?
人によっては(?)理解するのが難しいかもしれません。
私も最初見たときは数日間わかりませんでした。
実際にループした時の値を紙などに書きだしていくとわかるかもしれません

コード:

x	÷4	あまり
0	0	0	
1	0	1
2	0	2
3	0	3
4	1	0
5	1	1
6	1	2
7	1	3
8	2	0
9	2	1
10	2	2
...

だいがくせい!

アバター
三郎
記事: 17
登録日時: 8年前

Re: 「割った余り」を使ってループを実現するについて

#6

投稿記事 by 三郎 » 3年前

確かに皆さんの云われるのは一理あると思うが私はそう思わない。
何故ならコンピュウターは日進月歩で性能が物凄い勢いで向上している。
ソフトOS等も多種多様になり技術が格段に向上している。
一方、人間の能力は今も昔も、あまり変っていない。
と云う事は、誰にもわかり、難しく考えなくても可能なプログラム(ソフト)の方が例えばコードの量が多少増えてもミスが少なくベストではないかと思う。(人間の弱点をカバーしてくれるソフトの書き方の方が最良?とも思えます)
今時、、ゲームソフトの場合、どこか違うのでしょうか。

閉鎖

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