• 締切済み

C言語で

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

みんなの回答

  • nubou
  • ベストアンサー率22% (116/506)
回答No.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; double a,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(); return 0; } (メモ帳で作成) です 試してみてください 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/bcc55steps.html
  • nubou
  • ベストアンサー率22% (116/506)
回答No.2

もしボーランドかマイクロソフトのコンパイラを使っているのなら 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など 関連関数を(使いたいなら)自分で定義しなければなりません 簡単ですけど煩わしいですね 構造体で定義したものは通常の演算ができないし融通が利かないのでやめた方がいいでしょう

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

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++に慣れていればこちらはスムーズに実数演算を拡張できます。

関連するQ&A

  • C言語プログラム

    N次の複素正方行列S,Tの積Uを計算するプログラムを作りたいのですが、実数で正方行列を計算するプログラムと 複素数の積、和のプログラム struct complex { double re; double im; }; を作ったのですが、この二つをまとめるとプログラムができるらしいのですがまとめ方が全然わかりません。どのようにしたらいいかヒントなど教えてください。

  • C言語の複素数についてです。

    C言語で複素数を使うことになりましたが、複素数をプログラム上でどう使うかわかりません。 粒子の複素屈折率を計算してシミュレーションするというものです。 その複素屈折率は 0.57+2.74i と表されます。iが虚数です。 一般的にCプログラムで複素数を使えるようにする一番簡単な方法はなんでしょうか? 具体的に参考にできるプログラムコードとかあれば是非教えて下さい。 #define complex とか使うのでしょうか? おそらくcomplexというものを使うんだとは思います。実数部と虚数部を分けて考えるのでしょうか。 C言語、いまいちよくわからなくて……どなたか詳しい方、教えて下さい。

  • C言語です。

    C言語です。 2次元配列を用いて、2つの2行3列の行列 A=[ 1 2 3 4 5 6 ] B=[ 6 3 4 5 1 2 ] の和を表示するプログラムを教えてください。 コンパイル結果 7 5 7 9 6 8

  • C言語で

    同名の質問で、 ”C言語で複素行列の和と積を計算するプログラムを作りたいのですが、 よくわからないので教えてほしいです。 ~以下略~” という質問がありました。 それについてnubouさんが答えていましたが、私の 場合は同じことができません。(ANo.1 ANo.2) ボーランドからダウンロードして、indludeファイルに complexというhファイルもあるのです。 しかし、コンパイルしようとすると、 致命的エラー F1003 c:\Borland\Bcc55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H がでてしまいます。 私の場合はインストールの仕方が違うのでしょうか。 またCとC++が統合されているということも わからないのですが。 (私のは統合されていない?) お手数をおかけしますが、よろしくお願いします。

  • C言語(c++)の構造体

    プログラミング(c++)の本に書いてあった問題の答えが分かりません。 課題 実部(実数)と虚数(実数)をメンバとして持つ複素数型(構造体)を定義し、複素数の四則演算を行う関数をそれぞれ定義してその動作を確認せよ どなたか答えを教えてください 本に書いてあるのでプログラミングの基本はわかるのですが自分で組むとコンパイルに失敗します 「構造体とポインタ」という章の問題なのでそれを踏まえてお願いします

  • C言語で複素数の計算を行いたいと思っております。

    C言語で複素数の計算を行いたいと思っております。 プログラミングソフトは、C言語を始めよう!を用いています。 しかし変数定義の仕方が分かりません。 複素計算とは具体的に、 exp( i π) (i は虚数単位)です 最初に#include<complex.h>を行いましたが 変数の定義の方法、exp( i π)の定義の方法が いまひとつわからない状態です。 保存するときに、Cファイルではなく、 拡張子をcppに変更してCPPファイルでコンパイルを行っています。 exp( i π)を計算可能なプログラムを 教えて頂ければ幸いです。 ご面倒かと思いますが 回答お願いします。

  • c言語の課題について

    (1)3行3列の行列の和を求めて表示するプログラムを作成しなさい。 (行列の要素はあとで適当な値を打ち込むこととする) (2)2行3列の行列と3行2列の行列の積を求めて表示するプログラムを作成しなさい。 (行列の要素はあとで適当な値を打ち込むこととする) プログラム言語を最近習いはじめたんで、あんまり難しいことは しないと思うんですが、全くわからなくて苦労しています。 わかる人がいたら至急教えてください。お願いします。

  • C言語を始めようと考えている者です

    某国立大理学部数学科の1回生です 4月から2回生の講義でC言語の講義があります。 以下がその内容となります 授業の到達目標 (1) 2進整数の計算、浮動小数点数の計算ができる。 (2) コンピュータが計算を行う基本的な仕組みがわかる。 (3) (2)の内容を実際にC言語で確認できる。 (4) C言語で簡単な数学の問題を解くプログラムを書くことができる。 授業スケジュール 講義  1. 計算と計算機の歴史  2. 2進整数の計算  3. 補数の考え方  4. 浮動小数点数の計算  5. 基本的なデータ型  6. プログラムの条件分岐構造  7. 中間試験  8. プログラムの繰り返し構造I  9. プログラムの繰り返し構造II 10. 配列I 11. 配列II 12. 関数 13. 素数に関する問題を解くプログラム 14. 微積分に関する問題を解くプログラム 15. 学期末試験とその解説 僕は今まで全くC言語プログラミングをしたことがありません。 他の言語も同様です。 http://www.forest.impress.co.jp/library/software/gakucgengo/ このサイトに出ている文法を学ぶことができる開発環境はダウンロードしました。 卒業後はgoogleに就職したいので今のうちからC言語は学んでおきたいのですが 先ず、何を学べばよいのかわかりません… 「アルゴリズム」や、「コンピュータの計算の仕組み」などを学ぶ必要もあると思うのですが 何から手を付ければよいのでしょうか? 考えが煮詰まってしまっています。アドバイスなどお願い致します。 因みに、現在用いているOSはwindows7です。 もしよろしければ、C言語初心者が学び始めるにあたって力強い書籍、サイトなど ありましたら教えてください。 よろしくお願い致します。

  • C言語での複素数の四則演算について

    C言語で、大きさ2の配列を2つ使って、複素数の四則演算のプログラムを作るのですが、配列をどう使うか分からず手が出せない状態です。 C言語を始めたばかりですので、基礎的なことしか分かりませんが、回答お願いします。

  • C言語構造体についてです。

    C言語、π=PI 3.14159265で構造体を用いてmensekiを呼び出して 半径と面積を計算して出力するプログラムです。下の空白を埋めてもらえますか? /* 構造体のプログラム */ #include <stdio.h> #include <math.h> #define PI 3.14159265 struct Data { /* 半径rと面積areaをdoubleで宣言 */ }; void menseki(struct ... 構造体のポインタを引数とする ){ /* 面積を計算する際に構造体のアドレスから計算する */ circle->area=PI* .....; } main(){ struct Data example[2]; //構造体配列 int i; /* 半径rを構造体配列を用いて2例入力する */ /* 2例の各々について mensekiを呼び出して 半径と面積を計算して出力する */ } よろしくお願いします。