/*---------------------------*/ /* プログラム:gccHIST.c */ /*---------------------------*/ #include #include #include #define ND 30000 #define NK 100 /*gnuplot用構造体宣言*/ /*scom,sxjiku,syjiku :タイトル(凡例),x軸ラベル,y軸ラベル*/ /*slogx,xmin,xmax,dx,sxfmt :x軸種,x軸最小値,x軸最大値,x軸増分,x軸書式*/ /*slogy,ymin,ymax,dy,syfmt :y軸種,y軸最小値,y軸最大値,y軸増分,y軸書式*/ struct GPdata{ char scom[100];char sxjiku[100];char syjiku[100]; char slogx[3];double xmin;double xmax;double dx;char sxfmt[20]; char slogy[3];double ymin;double ymax;double dy;char syfmt[20]; }; /*関数プロトタイプ*/ void main_part(char fnameR[50],char fnameW[50]); void GPLOT(char fnameW[50],struct GPdata gp, int ndata,double dmean,double dsig,double dmax,double dmin); void QSORT(int n,double data[ND]); void CALC(int n,double data[ND],double xmin,double xmax,double ds, int kdata,double plotx[NK],double ploty[NK]); void MinMax(int n,double data[ND], double *dmean,double *dmin,double *dmax,double *dsig); /*---------------------------------------------------------------------------*/ int main(int argc,char *argv[]) { char fnameR[50]=""; /*入力ファイル名*/ char fnameW[50]=""; /*出力ファイル名*/ strcpy(fnameR,argv[1]); strcpy(fnameW,argv[2]); main_part(fnameR,fnameW); printf("リターンキーを押してください"); getchar(); return 0; } /*---------------------------------------------------------------------------*/ void main_part(char fnameR[50],char fnameW[50]) { char dat[256]="",sv[100]=""; int i,j,ndata,kdata; double pdata[ND],ds,dmean,dmin,dmax,dsig,px,alpha; double plotx[NK],ploty[NK]; struct GPdata gp={ "","","", "",0.0,0.0,0.0,"", "",0.0,0.0,0.0,"" }; FILE *fin,*fout; /*データ入力*/ fin=fopen(fnameR,"r"); fgets(dat,sizeof dat,fin); strcpy(sv,strtok(dat,",")); strncat(gp.scom,sv,strlen(sv)-1); fgets(dat,sizeof dat,fin); strcpy(sv,strtok(dat,",")); strncat(gp.sxjiku,sv,strlen(sv)-1); fgets(dat,sizeof dat,fin); kdata=atoi(strtok(dat,","))-1; /*分割数-1*/ fgets(dat,sizeof dat,fin); strcpy(gp.slogx,strtok(dat,",")); gp.xmin=atof(strtok(NULL,",")); gp.xmax=atof(strtok(NULL,",")); if(strncmp(gp.slogx,"N",1)==0){ gp.dx=atof(strtok(NULL,",")); strcpy(sv,strtok(NULL,",")); strncat(gp.sxfmt,sv,strlen(sv)-1); } fgets(dat,sizeof dat,fin); ndata=atoi(strtok(dat,","))-1; for(i=0;i<=ndata;i++){ fgets(dat,sizeof dat,fin); pdata[i]=atof(strtok(dat,",")); } fclose(fin); strcpy(gp.syjiku,"Relative frequency (%)"); strcpy(gp.slogy,"N"); gp.ymin=0.0; gp.ymax=100.0; gp.dy=10.0; strcpy(gp.syfmt,"\"%.0f\""); /*対数軸変換*/ if(strncmp(gp.slogx,"L",1)==0){ for(i=0;i<=ndata;i++){ if(pdata[i]data[j]){ data[i]=dj;data[j]=di;sw=1; } } if(sw==1)goto CONT2; if(k>1)goto CONT1; } /*---------------------------------------------------------------------------*/ void CALC(int n,double data[ND],double xmin,double xmax,double ds,int kdata,double plotx[NK],double ploty[NK]) { int k,num,i; double xx1,xx2; /* n:データ個数-1 */ xx1=xmin; for(k=0;k<=kdata;k++){ xx2=xx1+ds; num=0; plotx[k]=xx1+0.5*ds; for(i=0;i<=n-1;i++){ if(xx1<=data[i]&&data[i]