- ベストアンサー
【C言語教えてください】sin波について
【C言語教えてください】sin波について 角度を0度から360度の範囲におけるsin(x)のグラフを'*'を使って表示するプログラムを書きたいのですがどなたか教えてください。 角度は10度刻み、正弦波の振幅は10でお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <memory.h> #include <math.h> #define PI 3.1415 void main() { int x, y; int ival; double dval; char graph[21][38]; memset(graph, ' ', sizeof(graph)); for (x=0; x<=36; x++) { dval = 10.0 * sin(((double)x * 10.0 * PI) / 180.0); if (dval < 0) ival = (int)(dval - 0.5); else ival = (int)(dval + 0.5); graph[ival+10][x] = '*'; } for (y=20; y>=0; y--) { graph[y][37]='\0'; puts(graph[y]); } }
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
#include <stdio.h> int main() { printf("000 .....*....\n"); printf("010 .....*....\n"); printf("020 ......*...\n"); printf("030 .......*..\n"); printf("040 ........*.\n"); printf("050 ........*.\n"); printf("060 .........*\n"); printf("070 .........*\n"); printf("080 .........*\n"); printf("090 .........*\n"); printf("100 .........*\n"); printf("110 .........*\n"); printf("120 .........*\n"); printf("130 ........*.\n"); printf("140 ........*.\n"); printf("150 .......*..\n"); printf("160 ......*...\n"); printf("170 .....*....\n"); printf("180 .....*....\n"); printf("190 ....*.....\n"); printf("200 ...*......\n"); printf("210 ..*.......\n"); printf("220 .*........\n"); printf("230 .*........\n"); printf("240 *.........\n"); printf("250 *.........\n"); printf("260 *.........\n"); printf("270 *.........\n"); printf("280 *.........\n"); printf("290 *.........\n"); printf("300 *.........\n"); printf("310 .*........\n"); printf("320 .*........\n"); printf("330 ..*.......\n"); printf("340 ...*......\n"); printf("350 ....*.....\n"); printf("360 ....*.....\n"); return 0; } まず、1行を考えます。 ・数字の桁を揃えて表示するには? ・x度のときの振幅10のsinの値の求め方は? ・C言語でsin関数を使うには、どうすればいい?また、角度の単位は何になってますか?度からその単位に変換するには? ・そのsin(x)の位置に"*"を置くなら、前後の"."(スペースとか別の文字でもいいですが)の数はそれぞれいくつ? ・その数だけ"."を表示するには?いろんな方法があるけど、「"."を表示」をその数だけ繰り返すには? ・以上の処理を、角度を0度から360度まで10度刻みでxを変化させて繰り返すには?
お礼
ありがとうございます。
- redfox63
- ベストアンサー率71% (1325/1856)
丸投げするよりも ご自身で何処まで理解なさっているのかを示しましょう SIN波を描きたいのであればCのランタイムライブラリのsin関数を使うのでしょうから #include <math.h> はとりあえず必須でしょうね ランタイム関数のsinですと引数はラジアンですので 円周率PI(パイ)の定数を記述しないといけないでしょう これは tan(1)*4 や 3.1415492などを使うことになると思います ラジアン = 角度*円周率/180 といった公式がありますので振幅の計算に使ってください 0から360まで 10刻みなら for( n = 0; n < 361: n+= 10 ) { // ココに振幅の計算処理 } とか n = 0; while( n < 361 ) { // ココに振幅の計算処理 n += 10; } といった具合でしょう
お礼
ありがとうございます。
お礼
ありがとうございます。 参考になりました。