C言語関係掲示板

過去ログ

No.1301 構造体で複素数の四則演算

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

複素数
投稿者---ひろこ(2004/10/23 16:09:58)


課題で、複素数の四則演算を構造体を使ってやれって問題が出たんですけど、手がつけられません・・・
良かったら教えていただけませんか??


No.17467

Re:複素数
投稿者---ぽこ(2004/10/23 16:14:00)


>課題で、複素数の四則演算を構造体を使ってやれって問題が出たんですけど、手がつけられません・・・
>良かったら教えていただけませんか??

【掲示板ご利用上の注意】に「学校の課題の丸投げ禁止!」とあります。
何らかの努力の跡を示しましょう。




No.17470

Re:複素数
投稿者---ひろこ(2004/10/23 16:30:39)


スミマセン・・・

#include "stdio.h"
#include "math.h"

typedef struct
{
double re,im;
} complex;

void main()
{

complex c_tasu(a, b)
complex a;
complex b;
{
a.re += b.re;
a.im += b.im;
return(a);
}

complex c_hiku(a, b)
complex a;
complex b;
{
a.re -= b.re;
a.im -= b.im;
return(a);
}

complex c_kakeru(a, b)
complex a;
complex b;
{
complex res;
res.re = a.re * b.re - a.im * b.im;
res.im = a.im * b.re + a.re * b.im;
return(res);
}

complex c_waru(a, b)
complex a;
complex b;
{
complex res;

b.im = -b.im;

res.re = c_waru(a, b).re / (b.re * b.re + b.im * b.im);
res.im = c_waru(a, b).im / (b.re * b.re + b.im * b.im);
return(res);
}
}
みたいになったんですけど、エラーばっかりで・・・


No.17472

Re:複素数
投稿者---blackwind(2004/10/23 17:34:56)


とりあえず・・・。
コンパイルが通るようなソースにしましょう。

#include "stdio.h"と
#include "math.h" は

#include <stdio.h>
#include <math.h> にするべきです。

あと、void main() → int main( void ) に
{} についても見直しが必要でしょう。



No.17473

Re:複素数
投稿者---YuO(2004/10/23 17:56:01)


【掲示板ご利用上の注意】
をちゃんと読んで実践しましょう。
ソースの添付は「HTML変換ツール」で字下げ!
※環境(OSとコンパイラ)や症状は具体的に詳しく!



#include "stdio.h"
#include "math.h"

標準ライブラリは,二重引用符ではなく不等号<>を使って取り込みます。
#一応,二重引用符でも取り込んでくれるが。


void main()
{
    complex c_tasu(a, b)
    complex a; 
    complex b;
    {
        a.re += b.re;
        a.im += b.im;
        return(a); 
    }

これはc_tasu関数を定義しようとしているのでしょうか?
そうであれば,関数の定義方法を勉強し直して下さい。
関数内で関数を定義することはできません。

さらに,関数の引数の宣言が古いです。
一応この形式も認められていますが,引数の型チェックが働かなくなるので,
宣言並びを利用する関数の宣言を使った方がよいです。


>みたいになったんですけど、エラーばっかりで・・・

どのようなエラーメッセージが表示されたのですか?
エラーメッセージを読めば原因はある程度つかめると思うのですが。


ネタで作ってみました。
  • 構造体を使う
  • 四則演算
はクリアしています。
#一応,標準準拠。どの程度のコンパイラが使えるかは知らないが……。

typedef struct {
    double _Complex val;
} Complex;

Complex cAdd (Complex lhs, Complex rhs)
{
    Complex r;
    r.val = lhs.val + rhs.val;
    return r;
}

Complex cSub (Complex lhs, Complex rhs)
{
    Complex r;
    r.val = lhs.val - rhs.val;
    return r;
}

Complex cMul (Complex lhs, Complex rhs)
{
    Complex r;
    r.val = lhs.val * rhs.val;
    return r;
}

Complex cDiv (Complex lhs, Complex rhs)
{
    Complex r;
    r.val = lhs.val / rhs.val;
    return r;
}