アプリ版:「スタンプのみでお礼する」機能のリリースについて

【C言語教えてください】sin波について

角度を0度から360度の範囲におけるsin(x)のグラフを'*'を使って表示するプログラムを書きたいのですがどなたか教えてください。

角度は10度刻み、正弦波の振幅は10でお願いします。

A 回答 (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]);
}
}
    • good
    • 4
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2010/11/13 21:57

#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を変化させて繰り返すには?
    • good
    • 3
この回答へのお礼

ありがとうございます。

お礼日時:2010/11/13 21:57

丸投げするよりも ご自身で何処まで理解なさっているのかを示しましょう



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;
}

といった具合でしょう
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2010/11/13 21:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています