ページ 11

複素数の演算なのですが・・・

Posted: 2012年11月28日(水) 21:02
by ダン
はじめまして。今、複素数の課題でどうにもうまくいかず投稿させてもらうことにしました。

環境はwindows7 VC++2010でC言語は初心者です。
目標としては2数の実部虚部をdouble型で入力したあとに結果としてa+jb (jは虚数)のように表示したいのですが
いろいろ変えても正しく結果が表示されないので書き方自体に問題があるのだと思うのですが、printfのところの文の
中がおかしいのかなと思っていたりするのですがアドバイスおねがいします。

コード:

#include <stdio.h>

int main( void )
{
  double  a, b;    
  double  c, d;    
  double  x, y;    
  double  p;      
  
	/*	二値入力 */
	printf( "a + jb (a,b)= " ); // Z1の入力
	scanf( "%d %d", &a,&b );
	printf( "c + jd (c,d)= " );
	scanf( "%d %d",&c,&d ); // Z2の入力

	/*	加算 Z3=Z1+Z2 */
	x=a+c;
	y=b+d;
	printf( "加: %f%+fj\n",x,y ); // Z3の出力

	/*	減算  Z3=Z1-Z2 */
	x=a-c;
	y=b-d;
	printf( "減: %f%+fj\n",x,y ); // Z3の出力

	/*	乗算 Z3=Z1*Z2 */
	x=a*c;
	y=b*d;
	printf( "乗: %f%+fj\n",x,y ); // Z3の出力

	/*	除算  Z3=Z1/*Z2 */
	p = c*c + d*d;
	x=(a*c+b*d)/p;
	y=(-a*d+c*b)/p;
	printf( "除: %f%+fj\n",x,y ); // Z3の出力

	return 0;

Re: 複素数の演算なのですが・・・

Posted: 2012年11月28日(水) 21:06
by box
ダン さんが書きました:

コード:

  double  a, b;    
  double  c, d;    
	scanf( "%d %d", &a,&b );
	scanf( "%d %d",&c,&d ); // Z2の入力
double型の変数に値を入れようとしているのに、
書式文字列が %d で本当に正しいでしょうか。

Re: 複素数の演算なのですが・・・

Posted: 2012年11月28日(水) 21:12
by ダン
アドバイスありがとうございます。
まったく意識がdouble型ということに向いてませんでした・・・
直してみると正しく起動できました。
有難うございました!

Re: 複素数の演算なのですが・・・

Posted: 2012年11月28日(水) 22:50
by かずま
ダン さんが書きました:

コード:

	/*	乗算 Z3=Z1*Z2 */
	x=a*c;
	y=b*d;
(a + b*i) * (c + d*i) = (a*c - b*d) + (a*d + b*c)*i = x + y*i

x = a*c - b*d
y = a*d - b*c

Re: 複素数の演算なのですが・・・

Posted: 2012年11月28日(水) 23:35
by たかぎ
「std::complex<double>を使えばよいのに」と考えるのは私だけでしょうか?