c言語です。 配列の中にintデータが入っています。 その数値の変化によって出力を変えたいです。 例えば int[0]=3,int[1]=2,int[2]=1.

ベストアンサー

0

その他の回答(3件)

0

単純に、(数列)微分すればいいのでは。 n + 1 番目のデータと、n 番目のデータの差分を取ったデータについて、調べればいいのです。 その差分が、すべて0なら、「変化なし」 そうでなくて、すべて0以上なら、「増加」 そうでなくて、すべて0以下なら、「減少」 そうでなくて、ある位置まではすべて0以上で、それ以降、すべて0以下なら、「増加から減少」 そうでなくて、ある位置まではすべて0以下で、それ以降、すべて0以上なら、「減少から増加」 それ以外なら、「評価なし」? とすれば良いです。 これをプログラムにするには、状態遷移が必要になります。 #include <stdio.h> #include <stdbool.h> #define length_of(ARRAY) (sizeof(ARRAY) / sizeof(*ARRAY)) typedef enum fluctuation_type {     Constant,     Increasing,     Decreasing,     IncreasingThenDecreasing,     DecreasingThenIncreasing,     Other } fluctuation_type; static const char* const messages[] = {     [Constant] = "変化なし",     [Increasing] = "増加",     [Decreasing] = "減少",     [IncreasingThenDecreasing] = "増加から減少",     [DecreasingThenIncreasing] = "減少から増加",     [Other] = "評価なし" }; // 差分を計算する関数 void adjacent_difference(int* dst, const int* src, size_t length); // 状態遷移の実装 fluctuation_type judge(fluctuation_type state, int diff); int main(void) {     // お好きなデータで     int data[] = {1, 2, 3, 4, 5};     const size_t data_length = length_of(data);     int diff[data_length];     adjacent_difference(diff, data, data_length);     fluctuation_type state = Constant;     for (size_t i = 1; i < data_length && state != Other; ++i) {         state = judge(state, diff[i]);     }     puts(messages[(size_t)state]); } fluctuation_type judge(fluctuation_type state, int diff) { switch(state) { case Constant:     return diff > 0 ? Increasing :                 diff < 0 ? Decreasing :                 Constant; case Increasing:     return diff < 0 ? IncreasingThenDecreasing :                 Increasing; case Decreasing:     return diff > 0 ? DecreasingThenIncreasing :                 Decreasing; default:     return diff != 0 ? Other : state; } } void adjacent_difference(int* dst, const int* src, size_t length) {     if (length > 0) {         dst[0] = src[0];     }     for (size_t i = 1; i < length; ++i) {         dst[i] = src[i] - src[i - 1];     } }

不適切な内容が含まれている可能性があるため、非表示になっています。

0

#include <stdio.h> #include <string.h> int main(void){     int a[3];     for(a[0] = 1; a[0] <= 3; a[0]++){         for(a[1] = 1; a[1] <= 3; a[1]++){             for(a[2] = 1; a[2] <= 3; a[2]++){                 switch (a[0] * 100 + a[1] * 10 + a[2]){                 case 111:                 case 222:                 case 333:                     printf("%d→%d→%d : 変化なし\n", a[0], a[1], a[2]);                     break;                 case 123:                     printf("%d→%d→%d : 増加\n", a[0], a[1], a[2]);                     break;                 case 321:                     printf("%d→%d→%d : 減少\n", a[0], a[1], a[2]);                     break;                 case 121:                 case 131:                 case 232:                 case 132:                     printf("%d→%d→%d : 増加から減少\n", a[0], a[1], a[2]);                     break;                 case 212:                 case 213:                 case 323:                 case 313:                 case 312:                     printf("%d→%d→%d : 減少から増加\n", a[0], a[1], a[2]);                     break;                 default:                     break;                 }                             }         }     }     return 0; } ー 実行結果 ー 1→1→1 : 変化なし 1→2→1 : 増加から減少 1→2→3 : 増加 1→3→1 : 増加から減少 1→3→2 : 増加から減少 2→1→2 : 減少から増加 2→1→3 : 減少から増加 2→2→2 : 変化なし 2→3→2 : 増加から減少 3→1→2 : 減少から増加 3→1→3 : 減少から増加 3→2→1 : 減少 3→2→3 : 減少から増加 3→3→3 : 変化なし パターンに漏れがあったら、そこは自分で補ってください。