• 締切済み

プログラム初心者で以下の問題が検討すらできません。どなたか参考にどのようなプログラムになるか教えてください。

抵抗とコンデンサからなる並列回路の複素インピーダンスとその絶対値を求めるプログラムを作成。 プログラムは、抵抗の値、コンデンサの容量、周波数を入力すると、複素インピーダンスとその絶対値を求めその結果を表示するものである。 私の解答です /* * mycomplex.c: 複素数関数 */ #include <stdio.h> #include <math.h> #include "mycomplex.h" /* 複素数の文字列を作る */ char *printc(mycomplex z) { static char str[BUFSIZ]; sprintf(str, "(%lf, %lf)", real(z), imag(z)); return str; } /* 実数と虚数を与えて複素数を作る */ mycomplex mkcomplex(double r, double i) { mycomplex z; z.re = r; z.im = i; return z; } /* 絶対値と偏角を与えて複素数を作る */ mycomplex mkcomplex_at(double abs, double theta) { mycomplex z; z.re = abs * cos(theta); z.im = abs * sin(theta); return z; } /* ノルム */ double norm(mycomplex z) { return z.re * z.re + z.im * z.im; } /* 絶対値 */ double cabs(mycomplex z) { return sqrt(norm(z)); } /* 偏角 */ double carg(mycomplex z) { return atan2(z.im, z.re); } /* 共役複素数 */ mycomplex conj(mycomplex a) { mycomplex z; z.re = a.re; z.im = 0.0 - a.im; return z; } /* 逆数 */ mycomplex cinv(mycomplex a) { mycomplex z; double n; n = norm(a); z.re = a.re / n; z.im = 0.0 - a.im / n; return z; } /* 加算 */ mycomplex cadd(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re + b.re; z.im = a.im + b.im; return z; } /* 減算 */ mycomplex csub(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re - b.re; z.im = a.im - b.im; return z; } /* 乗算 */ mycomplex cmul(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re * b.re - a.im * b.im; z.im = a.re * b.im + a.im * b.re; return z; } /* 除算 */ mycomplex cdiv(mycomplex a, mycomplex b) { mycomplex z; double n; n = norm(b); z.re = (a.re * b.re + a.im * b.im) / n; z.im = (a.im * b.re - a.re * b.im) / n; return z; } /* sin */ mycomplex csin(mycomplex a) { mycomplex z; double ep; ep = exp(a.im); z.re = sin(a.re) * (ep + 1.0 / ep) / 2.0; z.im = cos(a.re) * (ep - 1.0 / ep) / 2.0; return z; } /* cos */ mycomplex ccos(mycomplex a) { mycomplex z; double ep; ep = exp(a.im); z.re = cos(a.re) * (ep + 1.0 / ep) / 2.0; z.im = sin(a.re) * (1.0 / ep - ep) / 2.0; return z; } /* tan */ mycomplex ctan(mycomplex a) { return cdiv(csin(a), ccos(a)); } /* exp */ mycomplex cexp(mycomplex a) { mycomplex z; double ep; ep = exp(a.re); z.re = ep * cos(a.im); z.im = ep * sin(a.im); return z; } /* log 自然対数 (natural logarithm) */ mycomplex clog(mycomplex a) { mycomplex z; z.re = log(norm(a)) / 2.0; z.im = atan2(a.im, a.re); return z; } /* log10 常用対数 (logarithm to base 10) */ mycomplex clog10(mycomplex a) { mycomplex z; z.re = M_LOG10E * log(norm(a)) / 2.0; z.im = M_LOG10E * atan2(a.im, a.re); return z; }

みんなの回答

  • morigann
  • ベストアンサー率17% (57/329)
回答No.3

main文は無い、関数のコール元も一切無い・・・ そんなんで他人に意見求めても無理というものです。 同じぐらいの時刻に貴方様からもうひとつ似たようなご質問がありますが、そこに書かれているソースが貴方様の実力とお見受けします。 これが大学の課題(レポート)ならば、それで単位を取ろうと思ってる事が『誤り』です。 例え回答がもらえたとしても、もう少し勉強しないと回答の意味すら分からないでしょう。

noname#39970
noname#39970
回答No.2

実際に動かしてみた? 適当にprintfを入れてデバグすると どこがおかしいか判るよ     多分。

  • kazusone
  • ベストアンサー率54% (33/61)
回答No.1

このプログラムを動くようにしたいのですか? プログラムに含まれる誤りを教えて欲しいのですか? まず、使っていない関数は削除しましょう。 丸投げは賢明な問い方ではないと思います。

12gop
質問者

補足

誤りを教えてほしいです。 どこを削除すればよろしいですか?

関連するQ&A