- ベストアンサー
C言語の文法についての質問
- for文を使用して長い文を一つにまとめる方法
- 上記のコードを修正して一つのfor文で計算を行う方法
- C言語の配列を使用して数値の差を計算する方法
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
途中の抜けてる部分があるから質問してんだよね? とりあえず規則性を見出してつくってみたけど、 カウンタの範囲チェックとか抜けてる上に汚いので自分で修正して。 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)
この質問者のところでは sizeof は使用禁止 らしいので (cf. http://okwave.jp/qa/q6916438.html )>#5, loopIndex の最後に {0, 0, 0} でも追加し, struct loopIndexDef * で for をまわす方法を提案しておこう. abs がなければ ?: を使えばいいのに. まあ, 「本当にわかっていてベストアンサーをつけた」かどうかは上のリンクを見れば一目瞭然でしょう>#6.
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
ちなみに、本当にわかっていて、 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; } }
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
万能なやり方。 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]); }
- soraneko34
- ベストアンサー率33% (2/6)
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]); } とすれば一応要求どおりにはなると思います あまり美しくはないですが、、、
大本のソースに n[ 5]-n[6] n[ 9]-n[10] n[12]-n[13] がぬけてるからループはむりですな。
- soraneko34
- ベストアンサー率33% (2/6)
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()関数は数値の絶対値を返します。 以上
補足
abs関数を習ってないので他の方法はありませんか? 宜しくお願いします。