• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の文法について質問です。)

C言語の文法についての質問

このQ&Aのポイント
  • for文を使用して長い文を一つにまとめる方法
  • 上記のコードを修正して一つのfor文で計算を行う方法
  • C言語の配列を使用して数値の差を計算する方法

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

  • ベストアンサー
回答No.4

途中の抜けてる部分があるから質問してんだよね? とりあえず規則性を見出してつくってみたけど、 カウンタの範囲チェックとか抜けてる上に汚いので自分で修正して。 int main() { int n[ 16 ] = { 0 }; int limit = 4; int kk = 1; int jj = 0; for( int ii = 6; ii < 16; ii++ ) { if( jj && !( jj % limit ) ) { if( 4 <= kk ) break; limit += 4 - kk; ++kk; } n[ ii ] = n[ jj + kk ] - n[ jj + kk + 1 ]; ++jj; if( n[ ii ] < 0 ) { n[ ii ] = -n[ ii ]; } } return 0; }

その他の回答 (6)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

この質問者のところでは sizeof は使用禁止 らしいので (cf. http://okwave.jp/qa/q6916438.html )>#5, loopIndex の最後に {0, 0, 0} でも追加し, struct loopIndexDef * で for をまわす方法を提案しておこう. abs がなければ ?: を使えばいいのに. まあ, 「本当にわかっていてベストアンサーをつけた」かどうかは上のリンクを見れば一目瞭然でしょう>#6.

回答No.6

ちなみに、本当にわかっていて、 http://okwave.jp/qa/q6917741.html にベストアンサーをつけたのなら、ここにあるソースがこの回答になっている。 for(i = maxStep - 1; i >= 1; i--) { int leftOfThisLine = doneCount; int leftOfLastLine = doneCount - i - 1; for (j = 0; j < i; j++) cell[leftOfThisLine + j] = abs(cell[leftOfLastLine + j] - cell[leftOfLastLine + j + 1]); doneCount += i; } }

回答No.5

万能なやり方。 struct loopIndexDef { int result; int from; int to; }; struct loopIndexDef loopIndex[] = { {6, 1, 2}, {7, 2, 3}, {8, 3, 4}, {9, 4, 5}, {10, 6, 7}, {11, 7, 8}, {12, 8, 9}, {13, 10, 11}, {14, 11, 12}, {15, 13, 14} }; for(i = 0; i < sizeof loopIndex / sizeof loopIndex[0]; i++) { struct loopIndexeDef *ptr = &loopIndex[i]; n[ptr->result] = abs(n[ptr->from] - n[ptr->to]); }

回答No.3

No2の方が言っているように 大元のソースに (n[5] - n[6]); (n[9] - n[10]); (n[12] - n[13]); が抜けています 回答したときに適当に気づかなかったので補足します (ちゃんと質問文読めよ。。。って話ですが) int i; int x; for(i=6,x=1; i<16; i++,x++){ if(x==5 || x==9 || x==12)x++; n[i]=abs(n[x]-n[x+1]); } とすれば一応要求どおりにはなると思います あまり美しくはないですが、、、

noname#147388
noname#147388
回答No.2

大本のソースに n[ 5]-n[6] n[ 9]-n[10] n[12]-n[13] がぬけてるからループはむりですな。

回答No.1

C触るのが久々なので間違ってるかも(?) xが1からで良いのか疑問ですが取り合えず(配列は0番目から始まるため) int i; int x; for(i=6,x=1; i<16; i++,x++){ n[i]=abs(n[x]-n[x+1]); } abs()関数は数値の絶対値を返します。 以上

dezaemon1120
質問者

補足

abs関数を習ってないので他の方法はありませんか? 宜しくお願いします。

関連するQ&A