- ベストアンサー
for分の最後の引数のみの変更プログラム
現在、for分の使い方について良いアイディアがありません。 やりたい事は、変数iが0以下のときは、forの最後のカウンタを"a++"を行い、0より上の場合は、"a--"の処理を行いたいのです。 もし、よいプログラミング方法がありましたら、ご教授よろしくお願いします。 以下に、プログラムを記述します。 if( i<= 0){ for(a=0;a<120 a++) //a++処理 { 処理(20ステップくらい) } else{ for(a=0;a<120 a--) //a--処理 { 処理(20ステップくらい) }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
三項演算子を理解されていれば、すでに蛇足かもしれませんが、 > if( i<= 0){ > for(a=0;a<120 a++) //a++処理 > { > 処理(20ステップくらい) > } > else{ > for(a=120;a>0 a--) //a--処理 > { > 処理(20ステップくらい) > } ですが、回答の一つとして、kenpatisanさんの言われる、 forの使い方のアイデアで、短いソースで、 と言う事を再優先すれば単純に、 for(a = (i<=0)?0:120 ; (i<=0)?(a<120):(a>0) ; a += (i<=0)?1:-1 ) { 処理(20ステップくらい) } で、どうでしょう? 見にくいかもしれませんがちゃんと動きますよ。
その他の回答 (4)
- nakashi
- ベストアンサー率51% (21/41)
わかり易く書くと #include "string.h" #include "stdio.h" void vfDump(int,char*); int main(int argc, char* argv[]) { char* sBuf = "abcdefg"; vfDump(0,sBuf); vfDump(-1,sBuf); return 0; } void vfDump(int iFlag,char* sBuf){ int iPtr; int iInc; if (iFlag < 0) { iPtr = strlen(sBuf)-1; iInc = -1; } else { iPtr = 0; iInc = 1; } for (unsigned int j=0; j<strlen(sBuf); j++) { printf("%d %c\n",j,sBuf[iPtr]); iPtr += iInc; } }
- you111111
- ベストアンサー率45% (20/44)
>質問なのですが、 >”for (a = 0 ; a < 120 ; (i <= 0) ? a++ : a--) ” >の"(i <= 0) ?"は、forの中のif文のようなものでしょうか? (条件式) ? 真のときの処理 : 偽のときの処理 三項演算子と呼ばれるものです。 動作としてはifステートメントと一緒。
- yatokesa
- ベストアンサー率40% (201/496)
ループは120回まわすだけのカウンタにして、初期値と増減の変数を用意して、for文の前で初期化する方法がスッキリするかもしれません。 if (i <= 0) { a = 0; p = 1; } else { a = 199; // 200? p = -1; } for (cnt = 0; cnt < 120; cnt++) { :(処理) a += p; }
- toysmith
- ベストアンサー率37% (570/1525)
わかりやすさと実行速度を考えればハッキリと2つに分ける方法が一番よいと思われます。 つまり、質問文にある方法です。 でも、こんなこともできるというレベルなら if (i <= 0) { b = 1 ; } else { b = -1 ; } for ( a = 0 ; a < 120 ; a += b) { もしくは for (a = 0 ; a < 120 ; (i <= 0) ? a++ : a--) {
お礼
ありがとうございました。ヒントにすることができました 三項演算子を使ってうまく対処できました。
補足
すみません。ソースの記述内容を間違えていました。 記述しなおします。 現在、for分の使い方について良いアイディアがありません。 やりたい事は、変数iが0以下のときは、forの最後のカウンタを"a++"を行い、0り上の場合は、"a--"の処理を行いたいのです。 もし、よいプログラミング方法がありましたら、ご教授よろしくお願いします。 以下に、プログラムを記述します。 if( i<= 0){ for(a=0;a<120 a++) //a++処理 { 処理(20ステップくらい) } else{ for(a=120;a>0 a--) //a--処理 { 処理(20ステップくらい) } 実は、”処理(20ステップくらい)”は、どちらも同じ処理ですので、なるべく無駄なソースコードを記述しないようにと思っていました。 質問なのですが、 ”for (a = 0 ; a < 120 ; (i <= 0) ? a++ : a--) ” の"(i <= 0) ?"は、forの中のif文のようなものでしょうか?
お礼
ありがとうございました。大変分かりやすかったです。 三項演算子を使ってうまく対処できました。