質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1208閲覧

グラフを書き出す他のプログラム

FET.35

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/30 02:54

編集2020/07/30 03:30

sin<2Θのグラフを、角度Θが0度から180度の範囲で、5度刻みで、値の大きさを記号*の個数で表現するプログラムを作りたいです。

#include <stdio.h> #define _USE_MATH_DEFINES 1 #include <math.h> int main(void) { int i, j, delta = 5; double rad, value; printf("角度\t値\tイメージ\n"); for (i = 0; i < 60; i++) printf("-"); for (rad = 0; rad <= 180; rad += delta) { value = pow(sin((rad / 180) *M_PI), 2); printf("\n%d\t%f\t", (int)rad, value); for (j = 0; j< (int) (value / 0.025); j++) printf("*"); printf("\n"); } return 0; }
下の部分を変えて出力結果が同じになる他のコードを書いて教えてほしいです。お願いします。 ``` ``` for (rad = 0; rad <= 180; rad += delta) { value = pow(sin((rad / 180) *M_PI), 2); printf("\n%d\t%f\t", (int)rad, value); for (j = 0; j< (int) (value / 0.025); j++) printf("*"); printf("\n"); } ``` ```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/07/30 03:03 編集

>printf("\n%d\t%f\t", (int)(value / 0.025); j++) printf("*"); コンパイル通りませんが…
FET.35

2020/07/30 03:31

すいません、直しました。
episteme

2020/07/30 07:28

出力結果が同じなら書き換える必要を感じません。質問の意図は?
guest

回答2

0

書き換える必要が無いわけではありません。
元のコードにはいろいろ問題点があります。

  • 角度Θがとあるのに、theta ではなく rad という変数名を使っている。
  • 0度から 180度の範囲と度数(degree)なのに、rad という変数名を使っている。
  • int delta、double rad と型が異なるので、rad += delta で型変換が毎回発生する。
  • 2乗するのに、わざわざ関数の pow を呼び出すのは効率が悪い。
  • value / 0.025 と書くより value * 40 のほうが分かりやすい。
  • '-'を60個表示、''を(value40)個表示は関数かマクロにしてもよいのでは。

全体の書き換えになりますが、

C

1#include <stdio.h> 2#define _USE_MATH_DEFINES 1 3#include <math.h> 4 5#define put(c, n) for (int k = n; --k >= 0; putchar(c)) 6 7int main(void) 8{ 9 printf("角度 値\tイメージ\n"); 10 put('-', 60); 11 for (double delta = 5, theta = 0; theta <= 180; theta += delta) { 12 double value = sin(theta * (M_PI / 180)); 13 value *= value; 14 printf("\n%4.0f %f\t", theta, value); 15 put('*', value * 40); 16 } 17 putchar('\n'); 18 return 0; 19}

「sin<2Θのグラフを」とありますが、変な表記です。
「sinθの 2乗のグラフを」と書いたほうが誤解が無いと思います。
角度を表すθは普通小文字を使います。

投稿2020/07/30 16:08

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

確かにこんなことする必要ないと思いました。お騒がせしました。

投稿2020/07/30 14:22

FET.35

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問