#include #include #define N 1000 /* Taulukon kokoa varten */ /* a) Funktio print_table hoitaa homman. Argumentit ovat x:n ensimmäinen arvo (-1), * askelpituus (0.1) ja pisteiden lukumäärä (31). */ void print_table(double,double,int); /* b) Funktio print_headers() tulostaa taulukon otsakkeet, ja * print_values ottaa argumentikseen luvun x ja tulostaa tätä vastaavat * lausekkeiden arvot, ts. yhden rivin taulukkoon. */ void print_headers(); void print_values(double); main() { /* Oikeastaan a:n ja n:n arvot voisi kysyä käyttäjältä. Tai oikeastaan * voisi kysyä tarkasteltavan välin alku- ja loppupisteet, ja pisteiden * lukumäärän. (double a, double b, int n => double h=(b-a)/n, jne.) */ double a=-1.0,h=0.1; double x[N]; /* Taulukko x:n arvoja varten (käytetään b-kohdassa) */ int i,n=30; print_table(a,h,n); printf("\n"); /* Alustetaan taulukko x. */ for(i=0;i<=n;i++) { x[i]=a+i*h; } print_headers(); for(i=0;i<=n;i++) { print_values(x[i]); } } void print_table(double a, double h, int n) { int i; double x; printf("%10s%10s%10s%10s\n","x","sin(x)","x^2.5","ln x"); for(i=0;i<=n;i++) { x=a+i*h; /* Huom. lausekkeita x^2.5 ja ln x ei ole määritelty negatiivisilla * x:n arvoilla. Lisäksi ln x ei ole määritelty nollassa. */ if(x<0) printf("%10.3lf%10.3lf%10s%10s\n",x,sin(x),"---","---"); else if(x==0) printf("%10.3lf%10.3lf%10.3lf%10s\n",x,sin(x),pow(x,2.5),"---"); else printf("%10.3lf%10.3lf%10.3lf%10.3lf\n",x,sin(x),pow(x,2.5),log(x)); } } void print_headers() { printf("%10s%10s%10s%10s\n","x","sin(x)","x^2.5","ln x"); } void print_values(double x) { if(x<0) printf("%10.3lf%10.3lf%10s%10s\n",x,sin(x),"---","---"); else if(x==0) printf("%10.3lf%10.3lf%10.3lf%10s\n",x,sin(x),pow(x,2.5),"---"); else printf("%10.3lf%10.3lf%10.3lf%10.3lf\n",x,sin(x),pow(x,2.5),log(x)); }