電子書籍の厳選無料作品が豊富!

よろしくお願いします。
プログラミングの勉強をしています。
座標上にx1、x2、y1、y2をとり、この2点間の距離が表示されるプログラムを作っています。
最終的には自分で座標を入力し、以下のように表示されることが目標です。
x1:0
y1:0
x2:1
y2:1
この2点間の距離は1.414214です。

次のように作ってみましたが、1.414・・・となるところが、0.0000・・・となってしまいます。どこを直したらよいでしょうか、お願いいたします。

#include <stdio.h>
#include <math.h>

main()
{
int x1 = 0,
y1 = 0,
x2 = 0,
y2 = 0;
double A = 0.0,
dx = 0.0,
dy = 0.0;
A = sqrt(dx * dx + dy * dy);

dx = x1-x2;
dy = y1-y2;


printf("x1:");
scanf("%d",&x1);

printf("y1:");
scanf("%d",&y1);

printf("x2:");
scanf("%d",&x2);

printf("y2:");
scanf("%d",&y2);

printf("この2点間の距離は%lfです\n", A);

}

A 回答 (3件)

#include <stdio.h>


#include <math.h>

void main()
{

/* 俺はこの改行の方が落ち着く*/
int x1 = 0,y1 = 0,x2 = 0,y2 = 0;
double A = 0.0,dx = 0.0,dy = 0.0;



printf("x1:");
scanf("%d",&x1);

printf("y1:");
scanf("%d",&y1);

printf("x2:");
scanf("%d",&x2);

printf("y2:");
scanf("%d",&y2);

/* 処理順が滅茶苦茶。*/
dx = x1-x2;
dy = y1-y2;
A = sqrt(dx * dx + dy * dy);


printf("この2点間の距離は%lfです\n", A);

}
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
処理の順が違うんだろうと察しはついたのですが、いまいちそこがまだ理解できなくて、A = sqrt(dx * dx + dy * dy);だけをあちこち移動させてました。おかげさまで、今回も解決することができました。ありがとうございます。

お礼日時:2007/06/27 10:26

>無意味な初期化



http://oshiete1.goo.ne.jp/qa3114398.html

あー前回初期化したの、俺なんだよな、実は(汗

#警告出てても何かないと落ち着かなくてさ(汗
#でも根本的なところは前回から何も成長してないように見える
    • good
    • 0
この回答へのお礼

すみませんね・・・
なるべく自分で作るようにと思って前回のを参照して作ってみましたが、やはり一人では限界がありまして・・・皆さんが親切に教えてくださるのでとても助かっています。

お礼日時:2007/06/27 10:33

Aを計算するのにdxとdyを使っているが,dxとdyの値はAの計算より後で行っている.


そのため,dx,dyの初期値に対してAを計算している.

変数宣言の際に無意味な初期化をするからいけない.
初期化していなければ,コンパイルの際に警告が出た筈のコード.
    • good
    • 0
この回答へのお礼

早々と回答いただき、ありがとうございます。
計算の順をいつも間違えてしまいます。いまいちまだ順番を理解していないようで、これからきちんと勉強して行きたいと思います。
ありがとうございました。

お礼日時:2007/06/27 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!