C言語関係掲示板

過去ログ

No.506.構造体を用いて複素数の和・差・積・商を計算したい

[戻る] [ホームページ]
No.3880

複素数の計算
投稿者---わたる(2002/12/15 17:37:33)


構造体を用いて複素数の和・差・積・商を計算したいのですが、こういったものはどこかに載っているのでしょうか?

No.3883

Re:複素数の計算
投稿者---かずま(2002/12/15 23:55:53)


> 構造体を用いて複素数の和・差・積・商を計算したいのですが、
> こういったものはどこかに載っているのでしょうか?

複素数の計算がしたいだけなら、C++ を使ってみてはいかがでしょうか。
#include <iostream>
#include <complex>
using namespace std;

typedef complex<double> Complex;

int main()
{
    Complex a(1, 2);   // a = 1 + 2i
    Complex b;
    b = Complex(3, -4);  // b = 3 - 4i

    Complex s, d, p, q;
    s = a + b;
    d = a - b;
    p = a * b;
    q = a / b;

    cout << "a + b = " << s << endl;
    cout << "a - b = " << d << endl;
    cout << "a * b = " << p << endl;
    cout << "a / b = " << q << endl;

    cout << "abs(a) = " << abs(a) << endl;
    cout << "sqrt(b) = " << sqrt(b) << endl;
}


No.3889

Re:複素数の計算
投稿者---わたる(2002/12/16 01:32:28)


わざわざ書いていただいて申し訳ないのですが、今自分では構造体の勉強をしていて、ちょっと興味を持ったもので書いてみたんです。誤解を招くようなことを書いてすいませんでした・・・

No.3890

Re:複素数の計算
投稿者---かずま(2002/12/16 03:09:03)


> 今自分では構造体の勉強をしていて、ちょっと興味を持ったもので書いてみたんです。

どんな風に書いたのですか。

では、私も書いてみましょう。
#include <stdio.h>

typedef struct { double re, im; } Complex;

Complex add(Complex a, Complex b)
{
    Complex c;  c.re = a.re + b.re;  c.im = a.im + b.im;  return c;
}

Complex sub(Complex a, Complex b)
{
    Complex c;  c.re = a.re - b.re;  c.im = a.im - b.im;  return c;
}

Complex mlt(Complex a, Complex b)
{
    Complex c;
    c.re = a.re * b.re - a.im * b.im;
    c.im = a.re * b.im + a.im * b.re;
    return c;
}

Complex dvd(Complex a, Complex b)
{
    Complex c;  double d = b.re * b.re + b.im * b.im;
    c.re = (a.re * b.re + a.im * b.im) / d;
    c.im = (a.re * b.im - a.im * b.re) / d;
    return c;
}

Complex make(double re, double im)
{
    Complex z;  z.re = re;  z.im = im;  return z;
}

int main()
{
    Complex a = {1, 2};  // a = 1 + 2i
    Complex b;
    Complex s, d, p, q;

    b = make(3, -4);  // b = 3 - 4i
    s = add(a, b);
    d = sub(a, b);
    p = mlt(a, b);
    q = dvd(a, b);

    printf("a + b = (%g,%g)\n", s.re, s.im);
    printf("a - b = (%g,%g)\n", d.re, d.im);
    printf("a * b = (%g,%g)\n", p.re, p.im);
    printf("a / b = (%g,%g)\n", q.re, q.im);

    return 0;
}


No.3899

Re:複素数の計算
投稿者---わたる(2002/12/16 18:34:11)


一応書いてみたのですが・・・間違っているかもしれません。

#include<stdio.h>

struct complex_number
{
  double real,imaginary;
};

int main(void)
{
  double sum1,sum2,rem1,rem2,com1,com2,dev1,dev2;
  struct complex_number a,b;
  
  printf("aの実数部を入力してください>>");
  scanf("%lf",&a.real);
  printf("aの虚数部を入力してください>>");
  scanf("%lf",&a.imaginary);
  printf("bの実数部を入力してください>>");
  scanf("%lf",&b.real);
  printf("bの虚数部を入力してください>>");
  scanf("%lf",&b.imaginary);
  
  printf("a=%lf+%lfi\n",a.real,a.imaginary);
  printf("b=%lf+%lfi\n",b.real,b.imaginary);
  
  sum1=a.real+b.real;
  sum2=a.imaginary+b.imaginary;
  rem1=a.real-b.real;
  rem2=a.imaginary-b.imaginary;
  com1=a.real*b.real-a.imaginary*b.imaginary;
  com2=a.imaginary*b.real+a.real*b.imaginary;
  dev1=(a.real*b.real+a.imaginary*b.imaginary)/(b.real*b.real+b.imaginary*b.imaginary);
  dev2=(a.imaginary*b.real-a.real*b.imaginary)/(b.real*b.real+b.imaginary*b.imaginary);
  
  printf("足し算\na+b=%lf+(%lf)i\n",sum1,sum2);
  printf("引き算\na-b=%lf+(%lf)i\n",rem1,rem2);
  printf("掛け算\na+b=%lf+(%lf)i\n",com1,com2);
  printf("割り算\na/b=%lf+(%lf)i\n",dev1,dev2);
  return 0;
}



No.3910

Re:複素数の計算
投稿者---かずま(2002/12/17 01:27:55)


> 一応書いてみたのですが・・・間違っているかもしれません。

間違っていないようですね。