と出て複素数が使えません。
グーグルで一通り検索し解決策を探しましたが解決できませんでした。
なぜでしょうか?
自宅のPCに落としたフリーのMicrosoft Visual Studio 2013で、できなくて
学校のPCのMicrosoft Visual Studio 2012でもできなかったので困り果てています。
メモ帳にコードを書いて.cの形で保存して VS2012ドプロンプトの開発者コマンドプロンプトでコンパイルいています。
コードは以下のとおりです。
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <complex.h>
#define BUFF_SIZE 200
int main()
{
double complex xx_w,xx_w_fin;
FILE *fp;
FILE *file; // ファイルのポインタ
int i,j,k,ii,n,kk,NN; // 整数型変数
char *result; // ファイルの読み込み結果を判定する変数
char buffer[BUFF_SIZE]; // 1行分を読み込むために用意したバッファ
char N[100],tt[100],at[100],bt[100],ct[100],et[100]; //各項目を入れる文字列
int Num; //項目の数字化
double tim,at_f,bt_f,ct_f,et_f; //項目の数字化
double t,w,h;
char filename[100];
if( (fp= fopen("fourier_data2011.csv","r"))==NULL )
{
printf("ファイルが見つかりません\n"); // ファイルが見つからないときは
return(1); // 戻り値1(異常終了)でプログラム終了
}
k=0;
fgets(buffer,BUFF_SIZE,fp); // 一行目の読み飛ばし
for(i=0; i<600; i++)
{
result=fgets(buffer,BUFF_SIZE,fp); // 1レコード分をバッファ読み込み
if(result==NULL)
{
i=ii; //データ数の保存
break; // ファイルの終端に来たら、for文を終了
}
}
fclose(fp); // ファイルを閉じる
//ファイルの開きなおし
if( (fp= fopen("fourier_data2011.csv","r"))==NULL )
{
printf("ファイルが見つかりません\n"); // ファイルが見つからないときは
return(1); // 戻り値1(異常終了)でプログラム終了
}
k=0;
fgets(buffer,BUFF_SIZE,fp); //一行目の読み飛ばし
for(i=0; i<600; i++)
{
result=fgets(buffer,BUFF_SIZE,fp); // 1レコード分をバッファ読み込み
if(i==ii-1)
{
for(j=0; j<BUFF_SIZE; j++)
{
if( buffer[j]==',' || buffer[j]=='\0') break;
N[j]=buffer[j];
}
N[j+1]='\0'; // 文字列の最後を設定
k=j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
tt[j]=buffer[j+k];
}
tt[j]='\0'; // 文字列の最後を設定
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
at[j]=buffer[j+k];
}
at[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
bt[j]=buffer[j+k];
}
bt[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
ct[j]=buffer[j+k];
}
ct[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
et[j]=buffer[j+k];
}
et[j]='\0';
sscanf(N,"%d",&Num); // 項目を数字に変換
sscanf(tt,"%lf",&tim); // 項目を数字に変換
sscanf(at,"%lf",&at_f); // 項目を数字に変換
sscanf(bt,"%lf",&bt_f); // 項目を数字に変換
sscanf(ct,"%lf",&ct_f); // 項目を数字に変換
sscanf(et,"%lf",&et_f); // 項目を数字に変換
printf(" %d %f %f %f %f %f \n",Num,tim,at_f,bt_f,ct_f,et_f); // 出力
break; //forの抜け出し
}
NN=Num+1; //データ数(ii)
h=tim/Num; //時間の刻み幅
fclose(fp); // ファイルを閉じる
//ファイルの開きなおし
sprintf(filename,"fourier.txt");
file=fopen(filename,"w");
if( (fp= fopen("fourier_data2011.csv","r"))==NULL )
{
printf("ファイルが見つかりません\n"); // ファイルが見つからないときは
return(1); // 戻り値1(異常終了)でプログラム終了
}
k=0;
fgets(buffer,BUFF_SIZE,fp); // 一行目の読み飛ばし
for(n=0; n<ii; n++)
{
for(j=0; j<BUFF_SIZE; j++)
{
if( buffer[j]==',' || buffer[j]=='\0') break;
N[j]=buffer[j];
}
N[j+1]='\0'; // 文字列の最後を設定
k=j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
tt[j]=buffer[j+k];
}
tt[j]='\0'; // 文字列の最後を設定
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
at[j]=buffer[j+k];
}
at[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
bt[j]=buffer[j+k];
}
bt[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
ct[j]=buffer[j+k];
}
ct[j]='\0';
k=k+j+1;
for(j=0; j<BUFF_SIZE-k; j++)
{
if( buffer[j+k]==',' || buffer[j+k]=='\0' ) break;
et[j]=buffer[j+k];
}
et[j]='\0';
sscanf(N,"%d",&Num); // 項目を数字に変換
sscanf(tt,"%lf",&tim); // 項目を数字に変換
sscanf(at,"%lf",&at_f); // 項目を数字に変換
sscanf(bt,"%lf",&bt_f); // 項目を数字に変換
sscanf(ct,"%lf",&ct_f); // 項目を数字に変換
sscanf(et,"%lf",&et_f); // 項目を数字に変換
xx_w=0; //初期化
for(kk=0; kk<NN; kk++)
{
t=n*h;
w=2*M_PI*kk/(NN*h);
xx_w=xx_w+at*cexp(-I*w*t);
}
xx_w_fin=xx_w/NN;
fprintf(file,"%f %f \n",w,xx_w_fin*xx_w_fin);
}
fclose(fp); // ファイルを閉じる
fclose(file); // ファイルを閉じる
return(0);
}