新・ゲームプログラミングの館にて、以下のサイトで「割った余り」を使ってループをさせています。割った余りを使ってなぜループするのか全く分かりません。初心者にもわかるように教えていただけると幸いです。
http://dixq.net/g/03_02.html
http://dixq.net/g/03_03.html
http://dixq.net/g/03_04.html
「割った余り」を使ってループを実現するについて
Re: 「割った余り」を使ってループを実現するについて
ゲームプログラマーではないので正確なことは言えませんが、
あくまで参考として読んでください。
(理解しずらかったら申し訳ございません。)
1つ目の参考サイト(http://dixq.net/g/03_02.html)に下記のコードがありますが、 見てわかる通り、行数、インデントの深さが少なくなりコードが見やすくなっています。
例えば1000行と半分の500だとコードをスクロールする量が違いますし、
インデントも
よりも
の方見やすいと思います。
このように行数、インデントの深さを減らすことで
可読性や処理速度の向上など様々な利点があります。
あくまで参考として読んでください。
(理解しずらかったら申し訳ございません。)
1つ目の参考サイト(http://dixq.net/g/03_02.html)に下記のコードがありますが、 見てわかる通り、行数、インデントの深さが少なくなりコードが見やすくなっています。
例えば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))
{
}
}
このように行数、インデントの深さを減らすことで
可読性や処理速度の向上など様々な利点があります。
Re: 「割った余り」を使ってループを実現するについて
>割った余りを使ってなぜループするのか全く分かりません。
ちょっとこの文だと,
・「x = ( x + 1 ) % 4」なる処理を繰り返し行うことで,xの値が0,1,2,3,0,1,2,3,...になるという理屈 がわからない
・なぜその目的に剰余を用いた式を持ち出すのかという理由 がわからない (剰余を用いない方法でもできるのに)
のどちらを意図しているのか判断し難いです.
前者側であれば,
【xの値を,「{xの現在の値に1を足した結果}を4で割った余り」に変更する】
ということを繰り返すとxの値がどのように変化していくか を紙の上で計算してみればよいかと思います.
後者側な話なのであれば,
(真意はそのリンク先記事を書いた人にしかわからないということになりますが)
個人的には「実際にコーディングする人が把握できる方法」を用いればよいかと思います.
例えば とかなら,ぱっと見でもわかりやすいし1行で書けて良いかな とか思います.
それはそれとして,1つ目のリンク http://dixq.net/g/03_02.html に書かれている 余りを使わない側の例 だと,xの値は 0,1,2,0,1,2,... という繰り返しになり,記載されている説明と合致しないように見えますね.
ちょっとこの文だと,
・「x = ( x + 1 ) % 4」なる処理を繰り返し行うことで,xの値が0,1,2,3,0,1,2,3,...になるという理屈 がわからない
・なぜその目的に剰余を用いた式を持ち出すのかという理由 がわからない (剰余を用いない方法でもできるのに)
のどちらを意図しているのか判断し難いです.
前者側であれば,
【xの値を,「{xの現在の値に1を足した結果}を4で割った余り」に変更する】
ということを繰り返すとxの値がどのように変化していくか を紙の上で計算してみればよいかと思います.
後者側な話なのであれば,
(真意はそのリンク先記事を書いた人にしかわからないということになりますが)
個人的には「実際にコーディングする人が把握できる方法」を用いればよいかと思います.
例えば とかなら,ぱっと見でもわかりやすいし1行で書けて良いかな とか思います.
それはそれとして,1つ目のリンク http://dixq.net/g/03_02.html に書かれている 余りを使わない側の例 だと,xの値は 0,1,2,0,1,2,... という繰り返しになり,記載されている説明と合致しないように見えますね.
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 「割った余り」を使ってループを実現するについて
どこで分からないのか具体的に教えてください。
一応初心者にもわかりやすいように書いたつもりなので・・。
http://dixq.net/g/03_02.html
の内容が既に分からないですか?
> usaoさん
確かにx==4じゃないとおかしいですね・・。
一応初心者にもわかりやすいように書いたつもりなので・・。
http://dixq.net/g/03_02.html
の内容が既に分からないですか?
> usaoさん
確かにx==4じゃないとおかしいですね・・。
- Hiragi(GKUTH)
- 記事: 167
- 登録日時: 13年前
- 住所: 大阪府
- 連絡を取る:
Re: 「割った余り」を使ってループを実現するについて
人によっては(?)理解するのが難しいかもしれません。Dixq (管理人) さんが書きました:どこで分からないのか具体的に教えてください。
一応初心者にもわかりやすいように書いたつもりなので・・。
http://dixq.net/g/03_02.html
の内容が既に分からないですか?
私も最初見たときは数日間わかりませんでした。
実際にループした時の値を紙などに書きだしていくとわかるかもしれません
だいがくせい!
Re: 「割った余り」を使ってループを実現するについて
確かに皆さんの云われるのは一理あると思うが私はそう思わない。
何故ならコンピュウターは日進月歩で性能が物凄い勢いで向上している。
ソフトOS等も多種多様になり技術が格段に向上している。
一方、人間の能力は今も昔も、あまり変っていない。
と云う事は、誰にもわかり、難しく考えなくても可能なプログラム(ソフト)の方が例えばコードの量が多少増えてもミスが少なくベストではないかと思う。(人間の弱点をカバーしてくれるソフトの書き方の方が最良?とも思えます)
今時、、ゲームソフトの場合、どこか違うのでしょうか。
何故ならコンピュウターは日進月歩で性能が物凄い勢いで向上している。
ソフトOS等も多種多様になり技術が格段に向上している。
一方、人間の能力は今も昔も、あまり変っていない。
と云う事は、誰にもわかり、難しく考えなくても可能なプログラム(ソフト)の方が例えばコードの量が多少増えてもミスが少なくベストではないかと思う。(人間の弱点をカバーしてくれるソフトの書き方の方が最良?とも思えます)
今時、、ゲームソフトの場合、どこか違うのでしょうか。