原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面積を出力

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

原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面積を出力

#1

投稿記事 by amiami » 8年前

#include<stdio.h>


int main(void)
{
int x1, y1, x2, y2;
float a = x1 * y2;
float b = x2 * y1;
float c = a - b;
float d = 2;
float s;

printf("点Aの座標を入力してください。\n");
scanf("%f%f",&x1,&y1);

printf("点Bの座標を入力してください。\n");
scanf("%f%f",&x2,&y2);

s = c * (1/2);
printf("三角形OABの面積は%fです。\n", s);

return 0;
}

amiami

Re: 原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面

#2

投稿記事 by amiami » 8年前

何回やってもエラーしか出なくて焦ってます。
どこがおかしいとか教えてほしいです。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 13年前
住所: 大阪府
連絡を取る:

Re: 原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面

#3

投稿記事 by Hiragi(GKUTH) » 8年前

言語は何か、開発環境、それと現状何ができなくて、どのようなエラーが出ているのかを書いておかないと回答し辛いです。
加えてコードタグで括ってソースコードは投稿するようお願いします。

パッと見た感じ
・6-9行目で初期化されていない変数が計算に利用されていたり代入されている。
・14,17行目で書式指定子には実数型が使用されているのにかかわらず整数値の変数を指定している。

ぐらいでしょうか。
だいがくせい!

プログラムって難しいよね

Re: 原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面

#4

投稿記事 by プログラムって難しいよね » 8年前

三角形の面積の計算公式を計算して、その結果を出力するということはなんとなくわかりますが、
先にa=x1*y2やb=x2*y1を定義+計算してしまっていることが原因だと思われます。
その後にコンソールからx1,x2,y1,y2の値を入力しようとしているので、順番を変えるとよいと思います。
あとdは使っていないのでいらないと思います。

なので以下のような形にすればとりあえず値は出力されるような気はします。


int main(void)
{
int x1, y1, x2, y2;

printf("点Aの座標を入力してください。\n");
scanf("%f%f",&x1,&y1);

printf("点Bの座標を入力してください。\n");
scanf("%f%f",&x2,&y2);

float a = x1 * y2;
float b = x2 * y1;
float c = a - b;
float s;

s = c * (1/2);
printf("三角形OABの面積は%fです。\n", s);

return 0;
}

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

Re: 原点をOとするx-y平面内の点A(x1,y1)と点B(x2,y2)の座標をキーボードから入力し、三角形OABの面

#5

投稿記事 by box » 8年前

こんな感じ?
データ入力→計算→結果出力の順に行ないましょう。
どんな値が入っているかわからない数値を用いて計算した後に当該の計算で用いる値を入力するのは手順が逆です。

コード:

#include <stdio.h>

typedef struct {
    double x;
    double y;
} POINT;

void input(POINT *a, POINT *b)
{
    printf("点Aの座標を入力:"), scanf("%lf%lf", &(a->x), &(a->y));
    printf("点Bの座標を入力:"), scanf("%lf%lf", &(b->x), &(b->y));
}

double area(POINT a, POINT b)
{
    double d = (a.x * b.y - a.y * b.x) / 2;

    return d > 0 ? d : -d;
}

int main(void)
{
    POINT a, b;

    input(&a, &b);
    printf("三角形の面積は、%f\n", area(a, b));
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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