C言語関係掲示板

過去ログ

No.52. 「極座標から直交座標への変換」と「構造体を使った複素数」


はじめまして、あやと申します。
友人がどこかのホームページで見つけた問題を解こうとしているのですが、問題が解けず悩んでいます。
手伝ってあげたいのですが、私はまだ構造体とかの勉強はしていないのでよく分かりません。
どうかみなさんの知恵を拝借したいと思います。
問題1

極座標から直交座標に変換するプログラム
二つの実数値 r , ? をキーボードから入力し、
x=r cos?
y=r sin?

を計算してその結果を返す関数を表すプログラムを作成しなさい。ただし、関数名と引数は次のとおりとする。
void p2o( double &x, double &y, double r, double theta )
また、プログラム中において は[deg]で扱う(一周が360°)ものとする。しかし、C言語が用意する三角関数の
引数は[rad]であるので、関数p2o内で三角関数を計算する前に、変数thetaを[rad]に変換しなければならない問題2

C言語には、複素数が用意されていない。構造体を用いると複素数をユーザが定義できる。
いま、構造体mycompleが、

struct complex{
double re;
double im;
} typedef struct complex mycomplex;
として、定義されているものとする。

このとき、複素数 X+j Yの
実部がメンバー名 re
虚部がメンバー名 im

に相当する。
この構造体を用いて、二つの複素数による四則演算のうち加算と乗算を行い、計算結果は同じ複素数の
構造体に格納するアルゴリズムを考える。
いま、main関数内で次のように構造体a, b, cを宣言する。
main(){
mycomplex a,b,c;
・・・
}

加算の場合で、変数aに被加算数、変数bに加算数、変数cに結果を格納するものとする。
変数a, bには次のように値をキーボードから入力するものとする。
上記のことを踏まえ,変数a, b に対する加算と乗算を行うアルゴリズムと結果を表示するアルゴリズムを考え
、全体をまとめたプログラムを示すこと。
フローチャート
プログラムのソース
実行例


こんばんは、ともじです。

> 友人がどこかのホームページで見つけた問題を解こうとしているのですが、問題が解けず悩んでいます。
> 手伝ってあげたいのですが、私はまだ構造体とかの勉強はしていないのでよく分かりません。
> どうかみなさんの知恵を拝借したいと思います。

あやさん、お友達思いですね。
答えをすんなり教えたのでは、お友達のためになりませんので、次のようなヒントを差し上げます。
とりあえず、下線部を埋めてみてください。

<問題1>

#include <stdio.h>
#include <math.h>
#define MPI        3.14159265358979323846

void p2o( double *x, double *y, double r, double theta );

int main(void) {
        double x, y;
        double r, theta;

        printf("r = ");
        scanf("%lf",&r);
        printf("? = ");
        scanf("%lf",&theta);

        /* 極座標から直交座標に変換 */
        p2o( ____________________________ );

        printf("(r:%f, theta:%f) => (x:%f, y:%f)\n", r, theta, x, y);

        return(0);
}

/*** 極座標から直交座標に変換 ***/
void p2o( double *x, double *y, double r, double theta )
{
        double rad;

        rad =__________________________ ;
        ______ = r * cos(rad);
        ______ = r * sin(rad);
}



<問題2>
http://www.ma.nma.ne.jp/~daisuki/program/c/rei9.c
にそのものずばり、回答があります。
構造体の宣言を直してみてください。。


ともじさん、どうもありがとうございます。
なんとか問題1・2が解けて、友人は喜んでいました。
私も勉強になりました。
また、なにかありましたらよろしくおねがいします。m(__)m

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.10.7
Copyright(c) 2000-2002 TOMOJI All Rights Reserved