1. ホーム
  2. c

[解決済み] cでヒストグラムを生成する

2022-02-10 16:49:47

質問

C言語でこのヒストグラムを作成するのに行き詰っています。課題は、すべてのユーザー入力が発生する頻度を数えることです。

についてです。 1 0 6 1 5 0 7 9 0 7 --> 3x 0, 2x 1, などがあります。

そうすると、出現回数ではなく、星に変換する必要があります。1番目と3番目のステップはカバーできたと思うのですが、数を星に変換するところで苦労しています。新たにループを作る必要があるのか、それとも現在のネストされたループを使うのか、教えてください。何かヒントを与えてくれる人がいたら、一生感謝します。

というわけで、私の練習は

  1. ユーザーに入力を求め、配列に格納する
  2. 配列を処理し,ヒストグラム配列を生成します.
  3. ヒストグラムを星で表示する

私のコード

#include <stdio.h>

void printHistogram ( int *hist, int n );

int main() {
   int i, j;
   int inputValue;

   printf("Input the amount of values: \n");  
   scanf("%d", &inputValue);
   int hist[inputValue];

   printf("Input the values between 0 and 9 (separated by space): \n");
   for (i = 0; i < inputValue; ++i) {
    scanf("%d", &hist[i]);  
   }

    int results[10] = {0};

    // Processing data to compute histogram, see 5.17
    for (i = 0; i < 10; ++i) {   
      for(j = 0; j < inputValue; j++) {
         if ( hist[j] == i){
            results[i]++;
         }
      } 
   }

    printf("\n");
    printHistogram(hist, 10);

    return 0;
}

void printHistogram(int *hist, int n) {
      int i, j;
      for (i = 0; i < n; i++) {
      printf("[%d] ", i);
      for ( j = 0; j < hist[i]; ++j) {
      printf("*");
      }
      printf("\n");
   }
}

入力

10
1 0 6 1 5 0 7 9 0 7

出力

Input the amount of values: 
Input the values between 0 and 9 (separated by space): 

[0] *
[1] 
[2] ******
[3] *
[4] *****
[5] 
[6] *******
[7] *********
[8] 
[9] *******

出力する必要があります。

Input the amount of values: 10
Input the values between 0 and 9 (separated by space):

[0] ***
[1] **
[2] 
[3] 
[4] 
[5] *
[6] *
[7] **
[8] 
[9] *

解決方法は?

rafix07 がコメントしているように、単に printHistogram(results, 10) の代わりに printHistogram(hist, 10) .

すでにコンパイルしてテスト済み...動作します。