histg.c

来自「图像置乱代码」· C语言 代码 · 共 70 行

C
70
字号
/* Produce histegram from a given data file */
/*            Y.Zheng, 5/9/90               */

#include <math.h>
#include <stdio.h>
#include <tinanew/tina.h>

/* Usage: histg inputfilename outputfilename */
/* N.B.: inputfilename is in the format suitable for gtool */
/* N.B.: outputfilename is formatted for gtool as well */

main(argc,argv)
int argc;
char *argv[];
{
    FILE *fp,*fpp;
    char ch[1024];
    float y,x;
    float *yy;
    float ymax = -1000, ymin = 1000;
    float width;
    int n,N,i=0;
    int group = 10, freq=0;
    
    if ((fp=fopen(argv[1],"r"))==NULL)
        printf("unable to find input data file\n");
    fpp=fopen(argv[2],"w");
    
    while(readline(fp,ch)!=EOF)
    {
        sscanf(ch,"%d %f",&n,&y);
        if(y>ymax)   ymax = y;
        if(y<ymin)   ymin = y;
        i += 1;
    }
    fclose(fp);
    N = i;
    yy = (float *)ralloc(N*sizeof(float));
    
    i=0;
    fp=fopen(argv[1],"r");
    while(readline(fp,ch)!=EOF)
    {
        sscanf(ch,"%d %f",&n,&y);
        yy[i] = y;
        i += 1;
    }
    
    width = (ymax - ymin)*1.01/group;
    
    x = ymin-0.5*width;
    fprintf(fpp,"%f %d\n",ymin-0.00001,freq);
    while(x<ymax-0.5*width)
    {
        x += width;
        for(i=0;i<N;i++)
        {
            if(yy[i] > x-width*0.5 && yy[i] < x+width*0.5)
                freq += 1;
        }
        fprintf(fpp,"%f %d\n",x-0.5*width+0.00001,freq);
        fprintf(fpp,"%f %d\n",x,freq);
        fprintf(fpp,"%f %d\n",x+0.5*width-0.00001,freq);
        freq = 0;
    }
    fprintf(fpp,"%f %d\n",x+0.5*width,freq);
    fclose(fp);
    fclose(fpp);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?