質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1205閲覧

complex関数を使ったコードのエラーを解消したい。

hirosann15

総合スコア18

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/03 14:59

C++というプログラム言語の中にcomplex関数があります。これは複素数を意味する関数と自分では感じています。そして自分の理想に近いコードを書いている途中なのですが途中でエラーが出てきてしまいました。このエラーを解消していただきたいです。どうやら下から5行目のz= c_arg(z);にエラーが発生しているようです。よろしくお願いします。

c++

1#include <stdio.h> /* {\tt sprintf()} */ 2#include <math.h> 3 4typedef struct { double re, im; } complex; /* 複素数型 */ 5 6complex c_conv(double x, double y) /* $x$, $y$ を複素数 $z = x + iy$ に変換 */ 7{ 8 complex z; 9 10 z.re = x; z.im = y; 11 return z; 12} 13 14char *c_string(complex z) /* 複素数 $z = x + iy$ を文字列に変換 */ 15{ 16 static char s[40]; 17 18 sprintf(s, "%g%+gi", z.re, z.im); 19 return s; 20} 21 22complex c_conj(complex z) /* 共役複素数 $\overline{z}$ */ 23{ 24 z.im = - z.im; 25 return z; 26} 27 28double c_abs(complex z) /* 絶対値 $|z|$ */ 29{ 30 double t; 31 32 if (z.re == 0) return fabs(z.im); 33 if (z.im == 0) return fabs(z.re); 34 if (fabs(z.im) > fabs(z.re)) { 35 t = z.re / z.im; 36 return fabs(z.im) * sqrt(1 + t * t); 37 } else { 38 t = z.im / z.re; 39 return fabs(z.re) * sqrt(1 + t * t); 40 } 41} 42 43double c_arg(complex z) /* 偏角 ($-\pi \le \varphi \le \pi$) */ 44{ 45 return atan2(z.im, z.re); 46} 47 48 49#include <stdlib.h> 50 51int main(void) 52{ 53 double x, y; 54 complex z; 55 56 printf("x, y ? "); scanf("%lf%lf", &x, &y); 57 z = c_conv(x, y); 58 printf("z = %s\n", c_string(z)); 59 60 z=c_conj(z); 61 printf("c_conj(z)=%s\n",c_string(z)); 62 63 z= c_arg(z); 64 printf("c_arg(z)=%s\n",c_string(z)); 65 66 return 0; 67}

errorcode

1error C2440: '=': 'double' から '_complex' に変換できません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

z= c_arg(z);

c_arg() は double を返します。complex z には(型が違うので)代入できません。

投稿2021/06/03 15:04

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirosann15

2021/06/03 15:10

とゆうことはまた別の関数を作ってからc_arg()を使う必要があるということでしょうか?
episteme

2021/06/03 15:15 編集

わからん。あなたは z = c_arg(z) によって z になにがセットされることを期待していますか? c_conv( c_arg(z), 0 ) ですか?
hirosann15

2021/06/03 15:18

z=&x+&y(z=x+yi)なのでとりあえず適当な数字を入れてみたいと考えています。そして最終的にはどんな数字でも正しい偏角の結果を出したいと考えています。
episteme

2021/06/03 15:22

じゃぁ z = c_conv( c_arg(z), 0) ではいかがでしょう。 「実数部に偏角、虚数部は0」 です。
hirosann15

2021/06/03 15:39

試させていただいた結果エラーはなくなりました。c_arg(z)=-0.785398+0i申し訳ないです。数学が得意のではないので何とも言えないのですが、偏角というのは45度やπ/4のような形ではなかったでしょうか?
episteme

2021/06/03 15:53

-0.785398ラジアンは期待する結果ではないのですか?
hirosann15

2021/06/03 16:06

すみません理解できました。-0.785398はラジアン表記だったのですね。お手数をおかけしてしまい申し訳ありませんでした。長い間返信ありがとうございした。
episteme

2021/06/03 21:08

ではcloseしといてくださいな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問