• 締切済み

角度の計算(C++)

Theta cos(theta) sin(theta) 0.0    1.00     0.00 .    .     . .    .     . 上のような表示ができるプログラムを書いてます。角度は0度、5度、10度、15度、、、と5度毎に表示させないといけません。表示角度は角度は0-360度までです。 下のように書いてみましたがエラーが出てしまいます。何が問題なんでしょうか? int main(){ const double PI = 3.1415; double r = PI /180; cout<<setw(5)<<"theta"<<setw(13)<<"cos(theta)"<<setw(13)<<"sin(theta)"<<endl; for( int theta=0; theta<=360; <<theta += 5) cout<<setw(5)<<setprecision(1)<<(double)theta <<setw(14)<<setprecision(2)<<sin(theta * r) <<setw(10)<<cos(theta * r)<<endl; return 0; }

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

> 私としては、0,5,10,15,20...って表示したいのですが ってことは、theta を double にキャストする必要ないのでは? また、ストリーム出力での桁数の指定には setprecision を使用しますが、常に小数形式で表示したければ fixed と併用します。 (デフォルトでは桁数や表示幅から、もっとも正確に表示できる形式(小数形式/指数形式)が自動的に選択されます。) というわけで、出力を次のようにしてみて下さい。   cout << fixed << setprecision(2);  // 浮動小数の表示を、小数形式/小数精度2桁に指定   cout << setw(5) << theta      // 整数なので、↑の指定の影響はない      << setw(13) << cos(theta * r)      << setw(13) << sin(theta * r) << endl; ちなみに、cos と sin の位置が逆でしたよ^^。 また、浮動小数の表示制御では、Shindo_ さんのおっしゃる通り stdio.h の printf を使った方がはるかに簡単です。 が、小数精度の指定は、「%f6.2」ではなく「%6.2f」ですので、一応補足しておきます。

  • Shindo_
  • ベストアンサー率100% (1/1)
回答No.2

すんません。確認するのに時間がかかりまして・・・。 大分忘れてるなC言語・・・。 追加質問の件ですが、出力する桁数とかをいじりたいときは coutではなくprintfを使います。(対象ヘッダは <stdio.h> ) 上記のプログラムではだいたい下の通りかな?スペースとかはええかげんですけど。 printf("%d %f6.2 %f6.2\n",theta,sin(theta * r),cos(theta * r)); 使い方がcoutとだいぶと違うのでちょっととまどうかもしれません。 ちなみに、%dが整数形式で、という意味。%fが実数で、と言う意味です。%fの後の6.2は全体を6桁そのうちの小数点を2桁にしなさいという意味です。他にもいろいろあるのでヘルプを見てくださいね。 最後に、プログラム中によけいな文字が入ってて気づかないことはよくありますよね。特に全角スペースとか・・・。VisualStudioのエラーって何言うてるんかわからへん時多いし・・・。慣れると解ってくるので頑張ってくださいね。

  • Shindo_
  • ベストアンサー率100% (1/1)
回答No.1

お困りのソースですが、8行目の for( int theta=0; theta<=360; <<theta += 5) の部分で、tehtaの前の「<<」が入っているためにエラーになっているようです。 また、これはvisualC++の話ですけど、ヘッダで<valarray>を指定している場合はSTL用のsin関数ですので、これもエラーになってしまいます。<math.h>でないとダメですね。 ちょっとエラーの内容が解らないのでこの程度しか言えないです。 あとforループは中括弧でくくった方がいいですよ。一行とはいえ。

lilno
質問者

補足

私って、超大ばか者!!すいません。たしかに<<入ってました。ヘッダに、それこそiomanip.hを抜かしてました。だから、、、。 ついでにもう1つ聞いていいでしょうか? これを実行すると、画面にのthetaの部分が、0,5,1e+001, 2e+001, 3e+001......と表示されます。私としては、0,5,10,15,20...って表示したいのですが、それはどうしたらできるのですか? ---------------------------------------------- theta cos(theta) sin(theta) 0 5 1e+001 2e+001 3e+001 4e+001 . . . . .

関連するQ&A