c言語での三角形の面積の求め方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
iphon大好き

c言語での三角形の面積の求め方

#1

投稿記事 by iphon大好き » 5年前

初めまして。
最近c言語の勉強を始めました。
3日ほど考えているのですが完成せず困っています。

問題の内容は 三角形の3辺の長さa, b, cをキー入力し、その面積sを表示するプログラムを作れ。
 計算にはヘロンの公式を使い、小数値でも正しく面積が計算できること。
 平方根の計算には標準ライブラリを使用する。
 絶対値の計算は標準ライブラリを使わない場合と使う場合の2通り作成する。
 三角形ができないときはメッセージを表示する。
 ヘロンの公式以外の方法で計算した面積と一致すること。

 a, b, cで三角形ができるとき |a - b| < c < a + b
 三角形の面積は次の式で求められる p ← ( a + b + c ) / 2
s ← √p(p - a)(p - b)(p - c)

とゆうヘロンの公式をしようして面積を計算するものです
例えばa=1 b=1 c=6などと入力すると三角形はできないと思うのですがなぜかエラーメッセージが出ず
おかしな数値が出てきてしまいます。

最初に絶対値の計算をIF文で出力し、その後あてはめています。
どうしたら問題のように正しく出力できるでしょうか。
ご指南よろしくお願いします。


#include "pch.h"
#include <iostream>

#include <stdio.h>


int main(void)
{

//三角形の面積
float S, s;

//三角形の辺
float a, b, c, d;

//3辺の長さを入力
printf("三角形の3辺の長さを入力:\n");

printf("辺 a = ");
scanf_s("%f", &a);


printf("辺 b = ");
scanf_s("%f", &b);


printf("辺 c = ");
scanf_s("%f", &c);


if (-(a - b)) {
printf("三角形ができません");

}
else if (a - b); {
d = (a - b);
}


if( d < c < a + b){
s = (a + b + c) / 2.0;
S = sqrt(s*(s - a)*(s - b)*(s - c));

printf("%.3f",S);


}
else {
printf("三角形ができません");


return 0;
}

box
記事: 2002
登録日時: 13年前

Re: c言語での三角形の面積の求め方

#2

投稿記事 by box » 5年前

 a, b, cで三角形ができるとき |a - b| < c < a + b
この考え方と

コード:

if (-(a - b)) {
printf("三角形ができません");

}
else if (a - b); {
d = (a - b);
}
このコードで、同じことをしていますか?また、else ifの後ろにある謎のセミコロンは何でしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

iphone大好き

Re: c言語での三角形の面積の求め方

#3

投稿記事 by iphone大好き » 5年前

ありがとうございます。
絶対値をif文で処理する方法が分からなく悩んでいます。。
例文などでご教授いただけるとありがたいです。

;に関しましては、ビジュアルスタジオ2017でコンパイルしているのですが
なぜかエラーが出るので;をうっています。。。。

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: c言語での三角形の面積の求め方

#4

投稿記事 by へにっくす » 5年前

もう一度条件文の基礎からやり直せ。

コード:

// 条件文になってません。(この書き方だと0になるときだけ偽になります)
if (-(a-b)) ...
if (a-b) ...
// 下記のような書き方はできません。
if( d < c < a + b) ...
written by へにっくす

かずま

Re: c言語での三角形の面積の求め方

#5

投稿記事 by かずま » 5年前

絶対値の問題以外に気になるところがあります。

#include "pch.h" ですが、pch.h の中身が分からないと、
プログラムが正しいかどうか判定できません。

#include <iostream> ですが、これは C ではなく C++ のヘッダです。
ソースファイル名の拡張子を .c にしていますか?
.cpp にしていると、それは C++ でコンパイルしていることになります。

平方根を求めるために sqrt という関数を使用していますが、
そのためには、#include <math.h> が必要です。

main 関数の「{」に対応する「}」がありません。

フォーラムルールに従って、コードタグを使いましょう。

アバター
usao
記事: 1887
登録日時: 11年前

Re: c言語での三角形の面積の求め方

#6

投稿記事 by usao » 5年前

> 絶対値をif文で処理する方法が分からなく

・絶対値を計算すること
・計算した絶対値を用いた条件文

の2つに分けたら,少しは見通しが良くなったりしますかね.

コード:

//例:
//aとbの差が10以下なら何かする
//

//「aとbの差(絶対値)」を求め,一旦,その値を変数に格納する
float TheAbs = fabs( a - b );  //※標準ライブラリを使う
//「aとbの差(絶対値)」が10以下なら…
if( TheAbs <= 10 )
{ 何かする }

> なぜかエラーが出るので;をうっています。。。。

なんつーかもう,そういう姿勢がダメ.

littlestream
記事: 48
登録日時: 7年前

Re: c言語での三角形の面積の求め方

#7

投稿記事 by littlestream » 5年前

値が引き算によって絶対値を求めるやり方なら例えばa-bの場合、変数bの方が大きい場合、
負数になります。これではいくら引き算で絶対値を求めてもうまくいきません。
なので、if文で負数になりそうな場合を調べて以下のような感じでどうでしょうか?
if(aがbより大きければ)TheAbs=a-●; else if(aよりbが大きければ) TheAbs=●-●;

かずま

Re: c言語での三角形の面積の求め方

#8

投稿記事 by かずま » 5年前

iphone大好き さんが書きました:
5年前
絶対値をif文で処理する方法が分からなく悩んでいます。。
例文などでご教授いただけるとありがたいです。
次のコードの意味が分かりますか?

コード:

#include <stdio.h>

int main(void)
{
	double a, b, d;

	while (printf("a b? "), scanf("%lf%lf", &a, &b) == 2) {
		d = a - b;
		if (d < 0)
			d = -d;
		printf("|a - b| = %g\n", d);

		if (a > b)
			d = a - b;
		else
			d = b - a;
		printf("|a - b| = %g\n", d);
	}
}
実行例

コード:

a b? 3.3 4.4
|a - b| = 1.1
|a - b| = 1.1
a b? .

返信

“C言語何でも質問掲示板” へ戻る