In C, how to read data from file using x<y (y is the file name) -
i have program needs read data file not want give files name , want take data command file, nbody < input ???
the code have been provided (called nbody.c) simplified version of n-body simulation illustrates above theory. code can compiled, linked , executable file called nbody created using following command. gcc –lm nbody.c –o nbody
to run executable example data input file called input provided starting point. serial code can executed using following command takes few seconds run completion. nbody < input
my program is;
#include <stdio.h> #include <math.h> int m = 1000; void simulate(int m, int n, double delt, double eps, double x[], double y[], double z[], int iter, double xn[], double yn[], double zn[]); int main(int argc, char *argv[]) { double x[m], y[m], z[m], xn[m], yn[m], zn[m]; double delt, eps, resultant; int i, n, iter; char ch, file_name[25]; file *fp, *ofp; //file_name=argv[0]; //char *mode = "r"; printf("enter name of file wish see\n"); //instead of this, wanted reads automatically, taking data file , calculate it. gets(file_name); fp = fopen(file_name, "r"); rewind(fp); printf("the contents of %s file : \n", file_name); fscanf(fp,"%d %lf %lf", &n, &delt, &eps); printf("n = %d, delta t = %lf , tolerance = %lf \n",n, delt, eps); fclose(fp); //while(ch=fgets(fp)!=eof){ //printf("enter n, delta t , tolerance\n"); //scanf("%d %lf %lf", &n, &delt, &eps); //printf("%c",ch) //printf("enter n, delta t , tolerance\n"); //scanf("%d %lf %lf", &n, &delt, &eps); simulate(m, n, delt, eps, x, y, z, iter, xn, yn, zn); printf("n = %d, delta t = %lf , tolerance = %lf \n",n, delt, eps); (i=1; <= n; i++) { resultant = sqrt(x[i]*x[i]+y[i]*y[i]+z[i]*z[i]); printf("%-5.7lf %-5.7lf %-5.7lf %-5.7lf\n", x[i], y[i], z[i], resultant); } return 0; } void simulate(int m, int n, double delt, double eps, double x[], double y[], double z[], int iter, double xn[], double yn[], double zn[]) { /* author c.ierotheou aug 2009 copyright university of greenwich routine crudely simulate body-body interactions (inefficient method) */ double 0 = 0.0, 1 = 1.0, twopi = 6.2831853071795864769252866; int i, itest, j; double aux,auy,delt2,delt3,eps2,fx,fy,fz,ftx,fty,ftz,step; // return if n<5 if (n < 5) return; //initialization iter = 0; delt2 = 0.5*delt*delt; delt3 = delt2*delt2; eps2 = eps*eps; //initial distribution of points auy = zero; itest=n+1; j = n+2; fx = (double)(n); x[1] = zero; y[1] = zero; z[1] = one; (i=2; <= n; i++) { step = (double)(i+i-j)/fx; auy = fmod(auy+3.6/sqrt(itest*(one-step*step)),twopi); aux = sin(auy); x[i] = aux*step; y[i] = aux*sin(acos(step)); z[i] = cos(auy); } // main iteration loop mainloop: iter=iter+1; itest=0; (i=1; <= n; i++) { // total sum of force vectors fx=zero; fy=zero; fz=zero; (j=1; j<=n ; j++) { if (j != i) { aux=pow(x[i]-x[j],2.0)+pow(y[i]-y[j],2.0)+pow(z[i]-z[j],2.0); aux=aux*sqrt(aux); fx=fx+(x[i]-x[j])/aux; fy=fy+(y[i]-y[j])/aux; fz=fz+(z[i]-z[j])/aux; } } // tangential component of force aux=x[i]*fx+y[i]*fy+z[i]*fz; ftx=fx-x[i]*aux; fty=fy-y[i]*aux; ftz=fz-z[i]*aux; aux=ftx*ftx+fty*fty+ftz*ftz; if (aux > eps2) { itest=1; aux=sqrt(one-aux*delt3); xn[i]=x[i]*aux+ftx*delt2; yn[i]=y[i]*aux+fty*delt2; zn[i]=z[i]*aux+ftz*delt2; } } (i=1; <= n; i++) { x[i]=xn[i]; y[i]=yn[i]; z[i]=zn[i]; } if (itest == 1) goto mainloop; }
you asked:
in c, how read data file using x
you don't in c. kind of functionality provided shell/console/run time environment.
if have program x
can read input stdin
, , have file y
contains input appropriate x
, use:
x < y
from shell.
update
i think know problem might be. have:
char ch, file_name[25]; file *fp, *ofp; //file_name=argv[0]; //char *mode = "r"; printf("enter name of file wish see\n"); //instead of this, wanted reads automatically, taking data file , calculate it. gets(file_name); fp = fopen(file_name, "r");
instead of using gets
read name of input file, pass name of input file command line. hope on right track on this.
in case, need use:
char* file_name = argv[1]; // argv[0] program name // argv[1] first argument program
then, can use:
x y
where x
program , y
contains input data needed x
.
Comments
Post a Comment