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

以下のソースコードを使って次の2つの問題に答えよ。というものです。
#include<stdio.h>
#include<math.h>
struct cartes{
double x,y; /*x-axis,y-axis*/
};

struct polar{
double r,th; /*radius,theta*/
};

struct cartes p2c(struct polar a)
{
struct cartes d;
d.x=a.r*cos(a.th);
d.y=a.r*sin(a.th);
return d;
}

struct polar c2p(struct cartes b)
{
struct polar e;
e.r=sqrt(b.x*b.x+b.y*b.y);
e.th=atan(b.y/b.x);
return e;
}

void main(void)
{
struct cartes c;
struct cartes c1={1,1},c2={1,1.7320508},c3={1.7320508,1};
struct polar p1,p2,p3;
struct polar p={1.41421356,0.7853982};
p1=c2p(c1);
p2=c2p(c2);
p3=c2p(c3);
c=p2c(p);
printf("radius=%lf, theta=%lf(radians)\n",p.r,p.th);
printf("x-axis=%lf, y-axis=%lf\n",c1.x,c1.y);
printf("radius=%lf, theta=%lf(radians)\n",p2.r,p2.th);
printf("x-axis=%lf, y-axis=%lf\n",c.x,c.y);
}

1.2次元直行座標における2点の座標を与えられて、2点間の距離を求める関数を作り、正しく動作するようにせよ。
2.複素数を構造体として定義せよ。次に2つの複素数変数を受けてその和、差、積、商を求める関数を作り、正しく動作するようにせよ。

以上2つの問題についてソースコードを書いてご説明いただければ幸いです。

A 回答 (6件)

わざわざ自分で作らなくても hypot は標準でありますけどね>#5.

    • good
    • 0

>#4


浮動小数点数指数桁あふれにまで配慮するなら、どんな実装になっているかわからない標準関数よりも、参照URLにあるようなMoler-Morrisonのアルゴリズムを使って
double hypot(double p, double q)
{
double r, s;
if (p < 0) p = -p;
if (q < 0) q = -q;
if (p < q) { r = p; p = q; q = r; }
if (p == 0) return 0;
for (;;) {
r = q / p;
r *= r;
s = r + 4;
if (s == 4)
return p;
r /= s;
p += 2 * r * p;
q *= r;
}
}
double distance( struct cartes c1, struct cartes c2 )
{
return hypot(c1.x-c2.x, c1.y-c2.y);
}
ではどうでしょうか。

参考URL:http://steve.hollasch.net/cgindex/math/pythag-ro …
    • good
    • 0

/* いろいろ省略 */


#include <float.h>
int main(void)
{
struct cartes c1 = { DBL_MAX/2, DBL_MAX/2 }, c2 = { 0, 0 };
double len = distance(c1, c2);
printf("%f\n", len);
return 0;
}
が, たぶん正しく動かんのよ>#3.

その辺も含めて壊れてるんで.
    • good
    • 0

1.


double distance( structr cartes c1, struct cartes c2 ) {
cartes c={c1.x-c2.x,c1.y-c2.y};
if (c.x==0.0) return fabs(c.y);
else return c2p(c).r;
}
説明:x座標に差がないとき、「正しく動作するように」とのことなので、ゼロでの除算を避けるためにc2pを使わないようにしました。それ以外のときは2つのベクトルの差の絶対値を求めています。
    • good
    • 0

3. このプログラムに含まれる問題点を挙げ, 解消する方法を示せ



ってのがあったりして.
    • good
    • 0

で、どこがわからないの?


C言語以前に数学がわからないのでは?
    • good
    • 0

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