アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語で複素行列の和と積を計算するプログラムを作りたいのですが、
よくわからないので教えてほしいです。複素数を構造体で定義して、配列を使えば
いいと思うのですが・・・。
ちなみに実数の行列の和と積を求めるプログラムはわかっています。

A 回答 (3件)

ここのサイトの情報でボーランドのただソフトを入手して


複素数cプログラムを作ってみたのですが動きました
そのプログラムは

gomi.cpp:

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<complex.h>

int main(void)
{
complex<double>j(0.0,1.0),z;
doublea,b,x,y;
printf("please input double number a\n");
scanf("%lf",&a);
printf("please input double number b\n");
scanf("%lf",&b);
z=a+j*b;
printf("abs(%lf+j*%lf)=%lf",a,b,abs(z));

getch();
return0;
}

(メモ帳で作成)

です
試してみてください

gomi.cppをコンパイルするには
bcc32 gomi
をリターンすればできます
実行は
gomi
をリターンすればいいのです


通常は
complex     j(0.0,1.0),z;
でいけるのですがこの「ただコンパイラ」は
complex<double>j(0.0,1.0),z;
でないと駄目でした

下記サイトからダウンロードして試してください

参考URL:http://www.borland.co.jp/cppbuilder/freecompiler …
    • good
    • 0

もしボーランドかマイクロソフトのコンパイラを使っているのなら


cとc++が統合されていますので
cでプログラムを組む場合であっても複素数型のクラスは使えます
クラスといってもほぼ通常の型と同じように使えます
使えるようにするには文頭で
#include <complex>
を記述しなければなりません
すると
complex x,y,z,j(0.0,1.0);
といったように複素数がていぎできます
double a=1,b=2,c=3.5,d=1.5;
として
x=a+j*b,y=c+j*d;
として
z=x*y;
といったように複素数の計算ができます
勿論
z=exp(j・b);z=exp(x);
とすることもできます
オイラーの式を知っているならばzの意味は分かると思います
ほかに関数
real、imag、conj、abs等もつかえます
相当便利ですよ
c++を知っていなくてもあたかも複素数型が一つ増えたかのように使えますよ
自分で複素数型を定義するにはやはりクラスで定義しないと駄目ですね
しかも自作の定義の場合abs、conj、real、imagなど
関連関数を(使いたいなら)自分で定義しなければなりません
簡単ですけど煩わしいですね
構造体で定義したものは通常の演算ができないし融通が利かないのでやめた方がいいでしょう
    • good
    • 0

C言語では複素数型の変数を持っていませんから、実数のプログラムを拡張して複素数まで広げることはできません。

普通は複素数の実部と虚部を手計算で展開した式をプログラムに書き込まなければなりませんから大変面倒です。
そこで、
(1)ここにある複素数計算パッケージが利用できる可能性はあります。自分で作るのであれば参考になるかもしれません。
http://www.mscom.or.jp/~tog/anna/CMPLX.C
(2)C99という1999年に規格化された言語に複素数の変数が規定されました。UnixであればGNUのC99コンパイラで使用することができるかもしれませんが、知人が挑戦して挫折していますので何か問題があるかもしれません。
http://seclan.dll.jp/c99d/
(3)C++ではComplexクラスを定義し、演算子をオーバーロードして複素数演算に拡張することができます。C++に慣れていればこちらはスムーズに実数演算を拡張できます。
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A