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

x_i = cos((pi*(2i-1))/2N) (i=1,2,…,N)

という式で、N=5,9,17の時の値を求めたいのですが、うまくできません。

頑張ってN=5の式を作ってみたのですがうまくいきませんでした。
C言語、プログラミング初心者でわからないのでできるだけ丁寧に教えていただけると助かります。

自分で作ってみたプログラムを書いてみたので、どこが違うか、またどうすればいいかを教えていただきたいです。



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

#define iMAX 5

#define PI 3.1415926535


int main()
{

int i ;

int x[iMAX] ;

int n = ((PI * (2i-1) ) / 10) ;

double cos ( n ) ;



for (i = 1; i < 5; i++) {

x[i] = cos ( n );

}


for (i = 1; i<=5; i++) {

printf("x[%d] = %d\n",i,x[i]);

}


return 0 ;


}

A 回答 (3件)

cosの結果はdouble型です。


x_i = cos((pi*(2i-1))/2N) は、コード上、正確には
x_i = cos((pi*(2*i-1))/(2*N)) です。
N=5の場合、iを1からNまで変化させればOKです。
以下のようにしてください。
#include <stdio.h>
#include <math.h>
#define N 5
#define PI 3.1415926535
int main()
{

int i;
double x_i;
for (i = 1; i <= N; i++) {
x_i = cos((PI*(2*i-1))/(2*N));
printf("x[%d] = %f\n",i,x_i);
}
return 0;
}
-----------------------
以下、実行結果です。
x[1] = 0.951057
x[2] = 0.587785
x[3] = 0.000000
x[4] = -0.587785
x[5] = -0.951057
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
参考にさせてもらいます!!

お礼日時:2018/11/15 12:54

(1)


double cos ( n ) ;
ここに書く意味がない。
というかエラー

(2)
int n = ((PI * (2 * i-1) ) / 10) ;
int x[iMAX] ;
 int型の変数には整数しか入らない。
 小数点以下が切り捨てられる。

(3)
int x[iMAX] ;
と配列を宣言したときに、安全に利用できるのは x[0]からx[iMAX-1]まで。
for (i = 1; i<=5; i++) {
で x[i]はどこまで使うでしょうか?
※ 元の式のNをiMAXと定義しているのだから、i<=5の5とか, / 10) の10とかもiMAXを使ったのにするのが「いいプログラム」です。

(4)
x[i] = cos ( n );
変数は、その時点での「値」だけを記憶する。
nの値は
int n = ((PI * (2 * i-1) ) / 10) ;
の時点で確定して、その後 i が変化しても n は変化しない。

(5)
printf("x[%d] = %d\n",i,x[i]);
xの型を変えたら、対応する書式も変える必要がある。
    • good
    • 0
この回答へのお礼

初心者なので知らないことが多くて、間違えているところを指摘していただけるととても勉強になります。
見直して、参考にさせていただきます。ありがとうございます!!

お礼日時:2018/11/15 12:55

int n = ((PI * (2i-1) ) / 10) ; 誤



int n = ((PI * (2 * i - 1) ) / 10) ;
    • good
    • 0
この回答へのお礼

すごい初歩的なミスでした(笑)
ありがとうございます!!

お礼日時:2018/11/14 10:56

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