アプリ版:「スタンプのみでお礼する」機能のリリースについて

x_i = cos ((PI*(2*i-1))/( 2*N )) i =1,2,...,N   (見づらくてすみません)

という式を計算して、結果を出力したいのですが、コンパイルできません。
自分で書いてみたプログラムとエラーを書いておくので、どこを直せばいいか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double x_i(int i, int N)
{
for (i = 1 ; i <= N ; i++) {
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

}
}

int main()
{
int i, N ;
printf("N= ");
scanf("%d", &N);
for (i = 1 ; i <= N ; i++) {

printf("x[%2d] = %f\n",i, x_i(i,N));

}

return 0 ;
}


C:\Users>gcc nnn.c
nnn.c: In function 'x_i':
nnn.c:9:16: error: lvalue required as left operand of assignment
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
^


初心者なのでできれば丁寧に教えていただけると助かります。
よろしくお願いします。
結果は、
C:\Users>a
N = 5
x[ 1] = 0.951057
x[ 2] = 0.587785
x[ 3] = 0.000000
x[ 4] = -0.587785
x[ 5] = -0.951057

という風にしたいです。

質問者からの補足コメント

  • 求めたい結果なんですが、Nは5と決まっているわけではなくて、20までで自分で、自由に決めれるようにしたいです。
    N = 8
    x[ 1] = 0.980785
    x[ 2] = 0.831470
    x[ 3] = 0.555570
    x[ 4] = 0.195090
    x[ 5] = -0.195090
    x[ 6] = -0.555570
    x[ 7] = -0.831470
    x[ 8] = -0.980785

    N = 3
    x[ 1] = 0.866025
    x[ 2] = 0.000000
    x[ 3] = -0.866025

    このように、N=
    に数字を入れると計算して出力できるようにしたいです。

    説明足らずですみません。

      補足日時:2018/12/04 10:00
  • 以前、同じ目的で以下のプログラムを作成しました。
    今回はこのプログラムを、関数を作成して同じように作動するようにするのが目的です。

    以下のプログラムで正常に動いたので、これを関数に変えればいいと思っていたのですが、うまくいかず質問させていただいてるという流れです。
    このプログラムも捕足になるか分かりませんが、書いておくので、このプログラムを関数を利用する形(私が最初に質問で書いていたプログラム)にすると、なぜうまくいかないのか、どうすればうまくいくのかなど、教えていただけるとありがたいです。よろしくお願いします。
    プログラムが入らないので、次の補足に入れます。

      補足日時:2018/12/04 11:24
  • 先ほどの補足に入らなかった分のプログラムです。

    #include <stdio.h>
    #include <math.h>
    #define PI 3.1415926535

    int main()
    {
    int i , N ;
    double x_i ;

    printf("i = ");
    scanf("%d", &N);

    for (i = 1 ; i <= N ; i++) {
    x_i = cos ((PI*(2*i-1))/( 2*N ));
    printf("x[%2d] = %f\n",i, x_i);
    }

    return 0 ;

    }

      補足日時:2018/12/04 11:26
  • 皆さんのご回答を参考にさせていただいて何とか正常に動くプログラムを作成することができました。
    特にrnakamraさん、Wr5さん、kmeeさんなどの回答を参考にしてプログラムを作らせてもらいました。

    皆さんご回答ありがとうございました。また、質問していたらご回答いただけると嬉しいです。
    一応成果としてプログラムと結果を書かせていただきます。

    入らないので、次のページに書きますね。

      補足日時:2018/12/05 09:48
  • #include <stdio.h>
    #include <math.h>

    #define PI 3.1415926535

    double x_i(int i, int N)
    {
    return cos ((PI*(2*i-1))/( 2*N ));
    }

    int main()
    {
    int i, N ;

    do{
    printf("N= ");
    scanf("%d", &N);
    }
    while((N < 0) || (N > 20));

    for (i = 1 ; i <= N ; i++) {
    printf("x[%2d] = %lf\n",i, x_i(i,N));
    }
    return 0 ;
    }

      補足日時:2018/12/05 09:49
  • 結果
    N= 5
    x[ 1] = 0.951057
    x[ 2] = 0.587785
    x[ 3] = 0.000000
    x[ 4] = -0.587785
    x[ 5] = -0.951057

    N= 3
    x[ 1] = 0.866025
    x[ 2] = 0.000000
    x[ 3] = -0.866025

    N= 7
    x[ 1] = 0.974928
    x[ 2] = 0.781831
    x[ 3] = 0.433884
    x[ 4] = 0.000000
    x[ 5] = -0.433884
    x[ 6] = -0.781831
    x[ 7] = -0.974928


    Nの値も整数なら自由に入れることができました。

      補足日時:2018/12/05 09:51

A 回答 (13件中11~13件)

2次元配列になっているから、i も数値を決めておかないと。

    • good
    • 0

#define N 20 じゃなあい。

    • good
    • 0

double x_i の実際の配列の大きさが決まっていないから?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
配列の大きさってこんな感じで決めればいいんですかね?
もし間違ってたらごめんなさい。
もしあってるのであれば、同じエラーが出るので、違うのかなーと、、、
初心者なんで理解悪くて申し訳ないです。

もし何か間違いがあれば、また、教えていただけると助かります。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535
#define NMAX 20   //ここで配列の大きさ決めたつもりです。
double x_i(int i, N )
{
for (i = 1 ; i <= N ; i++) {
x_i(i, 20) = cos ((PI*(2*i-1))/( 2*N ));
}
}


int main()
{
int i, N ;
printf("N= ");
scanf("%d", &N);

for (i = 1 ; i <= N ; i++) {
printf("x[%2d] = %f\n",i, x_i(i,N));
}

return 0 ;
}

お礼日時:2018/12/03 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!