3

2 つの配列から c でヒストグラムをプロットするにはどうすればよいですか?

4

4 に答える 4

2

横に並べたヒストグラムの場合...

各インクリメントに printf("*") を使用し、新しい行の出力を開始するには printf("\n") を使用することをお勧めします。(向きの変更は、読者の演習です)。

于 2010-10-01T07:18:03.437 に答える
1

この問題について少し考えてみると、コメントで特定した「重複」が本当に反応が良いとは思えません。だから私はいくつかの言葉を言います。

ASCII アート アプローチに落ち着いた場合は、あと 1 つだけ決定を下す必要があります。それは、縦棒または横棒です。水平方向は簡単です。スケーリングを決定し、bin_contents*scale各ビンのシンボルを出力するだけです。コードとゴルフのリンクは、書き方の良い例ではありませんが、をすべきかのモデルとして本当に役立ちます。

ただし、多くのフィールドでは、ヒストグラムの表示で垂直バーが期待されています。それは少し難しいですが、疑似コードを考えてみましょう

sacle = find_scale(input_array)
max_height = find_max(input_array) * scale
for (i=max_height; i>=0; i--) 
   if (some condition)
      print_in_N_digits(round(i/scale)) // to label the scale
   else
      print_in_N_digits()               // lines with no labels
   print " |"                           // set up the vertical axis
   for (j=first_bin to lat_bin)
      if (input[j]*scale >= i)
         print("#")
      else
         print(" ")
      print_new_line
print_in_N_digits(0)
print(" +")
for (j=first_bin to last_bin)
   print("-")
print_new_line
print_in_N_digits()
print(" 0")
for (j=first_bin to last_bin)
   if (some other condition)
      print_bin_label

これは、ビンごとに列を使用し、各レベルでまたは各列のいずれ" "かを印刷して、ページを横切るだけです。"#"ヒストグラムの印刷部分は本当にとても簡単です。すべての複雑さは、軸とラベルの管理から生じます。

于 2010-10-01T15:58:38.973 に答える
1

そのためにアスキーアートを使用できます

于 2010-10-01T06:41:20.420 に答える