• ベストアンサー

c言語 三角形

三つの実数a,b,cを入力して、それらを三辺とする三角形がつくれるかどうかを判定するプログラムをつくる(float型)のですが、 三角形が作れる場合、その三角形は鈍角三角形か鋭角三角形か、または直角三角形かを判断するものに発展させなくてはいけない、 らしいのです。どうやったらいいのかわかりません。教えてください。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

1.三角形であるかの判定 三角形の1辺は他の2辺の和より小さいこと つまり a<b+c かつ b<a+c かつ c<a+b であることが条件です。 2.直角三角形の場合は、 ピタゴラスの定理(別名三平方の定理) 斜辺の2乗=底辺の2乗+高さの2乗が成立します。 すなわち aの2乗=bの2乗+cの2乗 又は bの2乗=aの2乗+cの2乗 又は cの2乗=aの2乗+bの2乗 が成立すれば直角三角形です。 3.鋭角三角形の場合は、 全ての3辺について 1辺の2乗<他の1辺の2乗+もう1辺の2乗 が成立します。 4.上記の何れにもあてはまらないのが、鈍角三角形です。

tiktak010
質問者

お礼

回答ありがとうございました!! すごく詳しく書いていただいて…早速やってみたいと思います!

その他の回答 (2)

  • Ki4-U2
  • ベストアンサー率81% (364/446)
回答No.3

蛇足かもしれませんが、先の回答者さんたちの回答を理解されたうえでお読みください。 実数(float、double)演算の落とし穴として、演算誤差のため if などの条件判定で条件式の "==" が意図したとおり働かない (左辺 == 右辺 が真になるはずなのに真にならない) ことがあります。 そのため、直角三角形の判定でつまづくかも知れません。 そんなときは「左辺==右辺」の代わりに、 「(左辺-右辺)がほとんどゼロ」つまり、たとえば 「(左辺-右辺)の2乗が0.00000001 未満」 のような条件式にすると良いでしょう。 ※課題の回答としては、そこまで考えなくてよいかとは思いますが、実際にプログラムを組んで試してみるときのアドバイスとして、です。

tiktak010
質問者

お礼

回答ありがとうございました!! プログラムの方も本当に難しくて困っていたので回答していただけて本当に嬉しいです!  本当にありがとうございました!!

  • poohron
  • ベストアンサー率59% (574/971)
回答No.1

最初にお断りしておきますが、 私はプログラムは組めません。 なので、具体的なプログラム例は提示できません。 「考え方は分かってるからプログラムの書き方を教えてくれ~!」 という趣旨のご質問でしたら無視してくださいね。 「三角形がつくれるかどうか」は (一番長い辺の長さ)<(他の2辺の長さの合計) です。 『三平方の定理』は覚えてらっしゃいますか? a^2+b^2=c^2(cは一番長い辺) これが成り立てば直角三角形です。 さて、それでは a^2+b^2<c^2 だったらどんな三角形になると思いますか? この辺りを考えてみれば、鈍角三角形・鋭角三角形の 判断の仕方が分かってくるのではないかと思います。

tiktak010
質問者

お礼

回答ありがとうございました!! 参考にしてがんばってみます!!

関連するQ&A