- 締切済み
linuxでc言語でのプログラミングについて
下のプログラムは入力した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: /* プログラム終わり */ gnome端末がデスクトップ環境です
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
>gnome端末がデスクトップ環境です もうちょっとまともに環境書きましょうや。 Linuxだっていうならディストリビューションはなんです? 少なくとも、CentOS6.xでは標準リポジトリにHandyGraphicsはないみたいですが……。 「HgWLine」で検索したら、 http://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program2012/C/HandyGraphic.html こんなページを見つけた。 「HgWText」で検索したら、 http://sml.me.es.osaka-u.ac.jp/jse/kadai/sample05.c とか引っかかった。 大学関連でないとHandyGraphicsのライブラリとか入手できない…んじゃないですかね? であれば、関係する大学生以外には回答もできないワケで……。 # だいたいHgwBoxFill関数の仕様すら不明なんですよ。 # ヘッダファイル掲示されれば、もしかしたら予想くらいは出来るかも知れませんが。(私はする気ありませんが)