みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

プログラミングの質問です

下のプログラムは入力した4つ数字を円グラフで表示するものでこのプログラムをもとに棒グラフで表示するように変換しなくてはならないのですがHgwBoxFill関数を使うらしいのですがいろいろ試行錯誤してみてもできないのでどなたか教えてくれませんか?

1: /* プログラム始め */ 
2: #include <stdio.h> 
3: #include <math.h> 
4: #include "handy.h" 
5: 
6: /* プロトタイプ宣言 */ 
7: void draw_graph(int w, double start, double val, char *str); 
8: 
9: int main(void) 
10: { 
11:  int w; /* ウィンドウID */ 
12:  int c; /* 文字入力用 */ 
13:  double XBASE = 100.0; /* ウィンドウ設定 */ 
14:  double YBASE = 100.0; 
15:  double WINSIZE = 500.0; 
16:  int in1, in2, in3, in4; /* グラフ表示する数値 */ 
17:  int total; /* グラフ表示する数値の総和 */ 
18:  double sum; /* グラフ表示する数値の累積 */ 
19:  double d1, d2, d3, d4; /* グラフ表示する数値の割合 */ 
20: 
21:  /* グラフ表示する数値の読み込み */ 
22:  printf("四つの正整数を入力してください >> "); 
23:  scanf("%d %d %d %d", &in1, &in2, &in3, &in4); 
24: 
25:  /* 各項がグラフ内で占める割合の計算 */ 
26:  total = in1 + in2 + in3 + in4; /* 総和の計算 */ 
27:  d1 = (double)in1 / (double)total; /* 割合の計算 */ 
28:  d2 = (double)in2 / (double)total; 
29:  d3 = (double)in3 / (double)total; 
30:  d4 = (double)in4 / (double)total; 
31: 
32:  /* ウィンドウの生成 */ 
33:  w = HgWOpen(XBASE, YBASE, WINSIZE, WINSIZE); 
34: 
35:  /* 線の幅指定 */ 
36:  HgWWidth(w, 3.0); 
37: 
38:  /* グラフの表示 */ 
39:  sum = 0.0; /* 1項目めの表示 */ 
40:  HgWColor(w, HG_RED); 
41:  draw_graph(w, sum, d1, "A"); 
42: 
43:  sum += d1; /* 2項目めの表示 */ 
44:  HgWColor(w, HG_BLUE); 
45:  draw_graph(w, sum, d2, "B"); 
46: 
47:  sum += d2; /* 3項目めの表示 */ 
48:  HgWColor(w, HG_GREEN); 
49:  draw_graph(w, sum, d3, "C"); 
50: 
51:  sum += d3; /* 4項目めの表示 */ 
51:  HgWColor(w, HG_ORANGE); 
53:  draw_graph(w, sum, d4, "D"); 
54: 
55:  /* 最後に円表示 */ 
56:  HgWColor(w, HG_BLACK); 
57:  HgWCircle(w, 250.0, 250.0, 200.0); /* 外側の円 */ 
58: 
59: 
60:  printf("Push Any Key "); 
61:  c = getchar( ); 
62:  c = getchar( ); 
63: 
64:  printf("Goodby!\n"); 
65: 
66:  return 0; 
67: } 
68: 
69: /* */ 
70: /* グラフ表示する関数 */ 
71: /* */ 
72: void draw_graph(int w, double start, double val, char *str) 
73: { 
74:  double x, y; /* 座標 */ 
75:  double rad; /* 角度 */ 
76: 
77:  /* グラフの表示 */ 
78:  rad = 2.0 * M_PI * (start + val); /* 角度計算 */ 
79:  x = sin(rad) * 200.0 + 250.0; /* 座標計算 */ 
80:  y = cos(rad) * 200.0 + 250.0; 
81:  HgWLine(w, 250.0, 250.0, x, y); /* グラフ表示 */ 
82: 
83:  /* 項目名の表示 */ 
84:  rad = 2.0 * M_PI * (start + val / 2.0); /* 角度計算 */ 
85:  x = sin(rad) * 120.0 + 250.0; /* 座標計算 */ 
86:  y = cos(rad) * 120.0 + 250.0; 
87:  HgWColor(w, HG_BLACK); 
88:  HgWText(w, x, y, str); /* 項目名表示 */ 
89: 
90:  return; /* void型関数なので返り値なし */ 
91: } 
92: /* プログラム終わり */ 

投稿日時 - 2013-06-18 21:59:13

QNo.8139820

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

開発環境や実行環境くらい書きませんか?
「HgwBoxFill関数」などいわれても、どの環境にもあるような関数ではありませんので知らない人にとっては何の事かわかりません。

私は「HgwBoxFill関数」のある環境は存じませんが、円で角度でパーセンテージを表してたのを棒で高さであらわせるようにすればよいだけではないですか?

投稿日時 - 2013-06-18 23:45:10

あなたにオススメの質問