• ベストアンサー

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ステップくらい) }

質問者が選んだベストアンサー

  • ベストアンサー
  • gaastra
  • ベストアンサー率80% (4/5)
回答No.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ステップくらい) } で、どうでしょう? 見にくいかもしれませんがちゃんと動きますよ。

kenpatisan
質問者

お礼

ありがとうございました。大変分かりやすかったです。 三項演算子を使ってうまく対処できました。

その他の回答 (4)

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.4

わかり易く書くと #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)
回答No.3

>質問なのですが、 >”for (a = 0 ; a < 120 ; (i <= 0) ? a++ : a--) ” >の"(i <= 0) ?"は、forの中のif文のようなものでしょうか? (条件式) ? 真のときの処理 : 偽のときの処理 三項演算子と呼ばれるものです。 動作としてはifステートメントと一緒。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

ループは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)
回答No.1

わかりやすさと実行速度を考えればハッキリと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--) {

kenpatisan
質問者

お礼

ありがとうございました。ヒントにすることができました 三項演算子を使ってうまく対処できました。

kenpatisan
質問者

補足

すみません。ソースの記述内容を間違えていました。 記述しなおします。 現在、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文のようなものでしょうか?

関連するQ&A