掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.25755

面積
投稿者---asa(2006/01/27 02:09:45)


3点から三角形の面積を求めたいのですが、うまく結果がいきません。
問題はどこでしょうか?
#include<stdio.h>
#include<math.h>

struct point{
double x;
double y;
};

double triangle_area(struct point *r)
{
int i;
for(i = 0; i < 3; i++){
r[i].x - 1;
r[i].y - 2;
}
return fabs(r[2].x * r[3].y - r[2].y * r[3].x) / 2.0;
}
int main()
{
struct point p[3] = {
1,2,
5,4,
-2,3
};
printf("%.2lf", triangle_area(p));
return 0;
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:面積 25757 ぽへぇ 2006/01/27 05:42:38


No.25757

Re:面積
投稿者---ぽへぇ(2006/01/27 05:42:38)


>問題はどこでしょうか?

>ソースの添付は「HTML変換ツール」で字下げします。
が守られていません。元のソースで字下げしていなかったら、
字下げする癖をつけましょう。

triangle_area(struct point *r) 関数が無茶苦茶です。
1.for文の中は何もしていない
2.配列の領域外 r[3] を参照している
3.return 文の中って何?





この投稿にコメントする

削除パスワード

No.25758

Re
投稿者---asa(2006/01/27 07:01:09)


triangle_area(struct point *r) 関数が無茶苦茶です。
1.for文の中は何もしていない
2.配列の領域外 r[3] を参照している
3.return 文の中って何?

ようするに一つ目の座標を原点として三角形の面積をもとめようとしているのですが・・・。どうすればいいんでしょうか?


この投稿にコメントする

削除パスワード

No.25759

Re:Re
投稿者---επιστημη(2006/01/27 07:05:19)


>triangle_area(struct point *r) 関数が無茶苦茶です。
>1.for文の中は何もしていない
>2.配列の領域外 r[3] を参照している
>3.return 文の中って何?
>
>ようするに一つ目の座標を原点として三角形の面積をもとめようとしているのですが・・・。どうすればいいんでしょうか?

1. p[0] = (0,0) となるように三角形を並行移動する。
2. p[1], p[2] より面積を求める。

ってことをやりたいのでしょう。
"思ったとおりに書いていない"のです。



この投稿にコメントする

削除パスワード

No.25760

Re
投稿者---asa(2006/01/27 07:53:43)


>>triangle_area(struct point *r) 関数が無茶苦茶です。
>>1.for文の中は何もしていない
>>2.配列の領域外 r[3] を参照している
>>3.return 文の中って何?
>>
>>ようするに一つ目の座標を原点として三角形の面積をもとめようとしているのですが・・・。どうすればいいんでしょうか?
>
>1. p[0] = (0,0) となるように三角形を並行移動する。
>2. p[1], p[2] より面積を求める。
>
>ってことをやりたいのでしょう。
>"思ったとおりに書いていない"のです。

そうです!え?思ったとおりに書いたつもりなんですが。
もしよろしければ教えていただけないでしょうか?


この投稿にコメントする

削除パスワード

No.25761

Re:Re
投稿者---kz3(2006/01/27 09:14:33)



>>1. p[0] = (0,0) となるように三角形を並行移動する。
>>2. p[1], p[2] より面積を求める。
>>
>>ってことをやりたいのでしょう。
>>"思ったとおりに書いていない"のです。
>
>そうです!え?思ったとおりに書いたつもりなんですが。
>もしよろしければ教えていただけないでしょうか?

# 私がソースの装飾やっておきますよ´ロ`


#include<stdio.h> #include<math.h> struct point{ double x; double y; }; double triangle_area(struct point *r) { int i; /* ここは何をやっているんですか? * どうして1とか2といった定数が出てくるんですか? */ for(i = 0; i < 3; i++){ r[i].x - 1; r[i].y - 2; } /* r[3]は在るんですか? */ return fabs(r[2].x * r[3].y - r[2].y * r[3].x) / 2.0; } int main() { struct point p[3] = { 1,2, 5,4, -2,3 }; printf("%.2lf", triangle_area(p)); return 0; }



この投稿にコメントする

削除パスワード

No.25762

Re:Re
投稿者---Blue(2006/01/27 09:19:07)


C言語では

int array[ 3 ];

としたとき、使えるのは
array[ 0 ], array[ 1 ], array[ 2 ]
となり、添え字は 0 から 2(3-1=2) までとなります。

ということは
>return fabs(r[2].x * r[3].y - r[2].y * r[3].x) / 2.0;
はどうでしょうか?

# for(i = 0; i < 3; i++){
# ではきちんとできているんですが。。。


この投稿にコメントする

削除パスワード

No.25767

Re
投稿者---asa(2006/01/27 15:40:41)


>C言語では
>
>int array[ 3 ];
>
>としたとき、使えるのは
>array[ 0 ], array[ 1 ], array[ 2 ]
>となり、添え字は 0 から 2(3-1=2) までとなります。
>
>ということは
>>return fabs(r[2].x * r[3].y - r[2].y * r[3].x) / 2.0;
>はどうでしょうか?
>
># for(i = 0; i < 3; i++){
># ではきちんとできているんですが。。。

引くところがまだいまいちわからないんですが、


この投稿にコメントする

削除パスワード

No.25768

Re:Re
投稿者---Blue(2006/01/27 15:46:42)


> 引くところがまだいまいちわからないんですが
int array[ 3 ];

としたら array[ 3 ] が上限ではなく、 0 から始まっているので、
array[ 0 ],array[ 1 ],array[ 2 ] で 使えるのは3つ分で、
最大の添え字は 2 です。

単純に考えると 3 - 1 = 2 ということになるということです。

int array[ 10 ] なら 0 から 10 - 1 = 9 で array[ 0 ]〜array[ 9 ] まで
int array[ 1 ] なら 0 から 1 - 1 = 0 で array[ 0 ] ということです。


この投稿にコメントする

削除パスワード

No.25770

Re:Re
投稿者---Blue(2006/01/27 15:52:12)


>> 引くところがまだいまいちわからないんですが
あれ?
誤爆しているっぽいかな?

>>return fabs(r[2].x * r[3].y - r[2].y * r[3].x) / 2.0;
のこといってる?


この投稿にコメントする

削除パスワード

No.25769

Re:Re
投稿者---nop(2006/01/27 15:48:02)


>引くところがまだいまいちわからないんですが、

「わからないんですが、」なんですか?
「いまいち」とは、どう判らないのですか?

そもそも、母国語でどの様な処理をすべきか、
をしっかり考えているのですか?
考えているのでしたら、言葉で詳細な処理手順を書いて考えましたか?
考えていないのでしたら、言葉で詳細な処理手順を書いて考えて下さい。


この投稿にコメントする

削除パスワード

No.25781

Re
投稿者---asa(2006/01/28 18:36:44)


triangle関数内で(1,2)を原点に移動するために全ての点から
(1,2)をひくようにしたいんですが、

デバックした結果引けてないみたいです。

どう変更したらよいのでしょうか?


この投稿にコメントする

削除パスワード

No.25782

Re:Re
投稿者---επιστημη(2006/01/28 18:53:30)


>どう変更したらよいのでしょうか?

"valueから3を引く" が書けますか? それと同じです。

int value = 100;
/* value から3を引く */ ←ここに何と書く?
if ( value == 97 ) printf("正解!");




この投稿にコメントする

削除パスワード

No.25783

Re:Re
投稿者---επιστημη(2006/01/28 18:55:39)


>triangle関数内で(1,2)を原点に移動するために全ての点から
>(1,2)をひくようにしたいんですが、

(1,2)を引くんじゃない。(p[0].x, p[0].y) を引くんだ。


この投稿にコメントする

削除パスワード

No.25784

Re:Re
投稿者---ぽへぇ(2006/01/28 18:56:55)


>triangle関数内で(1,2)を原点に移動するために全ての点から
>(1,2)をひくようにしたいんですが、

ここからやりなおし。
http://www9.plala.or.jp/sgwr-t/c/sec03.html



この投稿にコメントする

削除パスワード

No.25785

Re
投稿者---asa(2006/01/28 19:53:53)


あー!!!
お恥ずかしい。
すみません。どうしてこんなバカなことにきづかなかったんでしょう。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧