FOR文で不連続な範囲でLoopしたい
FOR文で不連続な範囲でLoopしたい
例えば
For(i=220;i<250,i++) {処理式}
を実行してから同じ処理式で、更に
For(i=0;i<50,i++){処理式}
と続けたいばあいにはどうすれば良いでしょうか?
処理の順番も大事です。
一つのFor文の中で、「i=220;i<250,i++)」と「i=0;i<50,i++)」の両方を記載できれば良いのですが、方法が分かりません。
教えてください。
For(i=220;i<250,i++) {処理式}
を実行してから同じ処理式で、更に
For(i=0;i<50,i++){処理式}
と続けたいばあいにはどうすれば良いでしょうか?
処理の順番も大事です。
一つのFor文の中で、「i=220;i<250,i++)」と「i=0;i<50,i++)」の両方を記載できれば良いのですが、方法が分かりません。
教えてください。
Re: FOR文で不連続な範囲でLoopしたい
int begin[] = {220, 0};
int end[] = {250, 50};
for (int k = 0; k < 2; k++) {
for (int i = begin[k]; i < end[k]; i++) {
処理式
}
}
【追記】i < 2 → k < 2 に訂正しました
最後に編集したユーザー みけCAT on 2017年5月27日(土) 16:33 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: FOR文で不連続な範囲でLoopしたい
回答のどの場合でも、処理時間はそう変わらんと思うので、素直に と書くのがよいと思います。後でそのコードを見たときに「何をしているか」が一目瞭然なはず。kaoruh さんが書きました: For(i=220;i<250,i++) {処理式}
を実行してから同じ処理式で、更に
For(i=0;i<50,i++){処理式}
と続けたいばあいにはどうすれば良いでしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: FOR文で不連続な範囲でLoopしたい
「何かの処理」が 30行ぐらいあったとしたらどうでしょうか?
後でそのコードを見たとき、同じことが書かれているのか、
どこかに違いがあるのかが一目瞭然ではないはず。
同じ記述が複数あると、後でそのコードに修正があった時、
一方だけ修正して、もう一方の修正を忘れることがあります。
Re: FOR文で不連続な範囲でLoopしたい
もう少し改良してみました。
この方が範囲の始点と終点の対応がわかりやすいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: FOR文で不連続な範囲でLoopしたい
確かに正攻法ですが、for文の前に、複数の変数の設定があって、
処理式がそれらを参照する場合ならどうでしょうか?
すべての変数を関数 sub に引き渡すのが煩雑になるでしょう。
みけCATさんの方法が一番良いように思いますが、
構造体になじみのない方は、配列にする手もあります。
.begin/.end が [0]/[1] になります。
#include <stdio.h>
int main(void)
{
int range[4][2] = { {220, 250}, {0, 50}, {90, 100}, {0,10} };
for (int k = 0; k < 4; k++) {
for (int i = range[k][0], j = range[k][1]; i < j; i++) {
printf(" %d", i); // 処理式
}
}
return 0;
}
質問者さんには、コメントや解決などの返信をお願いします。
Re: FOR文で不連続な範囲でLoopしたい
白い変人さま、Noirさま、かずまさま、たいちうさま、boxさま、みけCATさま、お返事ありがとうございます。
週末、プログラムは測定を行っていて、今テストができないので(やり方はあるのでしょうが^^;)試してからまたお返事させてください。
「処理文」はかずまさまのおっしゃる通り非常に長いので、同じ事を繰り返し記載はしたくありませんでした。
今現在は、Noirさまの案で急場を凌ぎました。
ただ、「int id[ 80 ] = { 220, 221, ... 」のこの「...」が長いと、やはり小変更したい場合などに困るので、もっと良い方法を探していました。
他の方法を試してみてからお返事します。
週末、プログラムは測定を行っていて、今テストができないので(やり方はあるのでしょうが^^;)試してからまたお返事させてください。
「処理文」はかずまさまのおっしゃる通り非常に長いので、同じ事を繰り返し記載はしたくありませんでした。
今現在は、Noirさまの案で急場を凌ぎました。
ただ、「int id[ 80 ] = { 220, 221, ... 」のこの「...」が長いと、やはり小変更したい場合などに困るので、もっと良い方法を探していました。
他の方法を試してみてからお返事します。
Re: FOR文で不連続な範囲でLoopしたい
白い変人さんのこの書き方がもっとも短くて、ミスが少ないように思いました。
実際にやってみて所望になりました。
この方式を今後使ってみます。
今回の問題では、0~250の中で数字がぐるぐる回る想定だったので、私の背景にぴったりでした。
⇒
for(i=220;i>=220 || i<50;i++,i%=250) {処理式}
実際にやってみて所望になりました。
この方式を今後使ってみます。
今回の問題では、0~250の中で数字がぐるぐる回る想定だったので、私の背景にぴったりでした。
⇒
for(i=220;i>=220 || i<50;i++,i%=250) {処理式}
Re: FOR文で不連続な範囲でLoopしたい
すいません!下記、送信エラーを繰り返しているうちに、別の投稿に対してメッセージを送ってしまいました。ごめんなさい!
Noirさんのアイディアは理解できます。
ありがとうございました。
Noirさんのアイディアは理解できます。
ありがとうございました。