/* piirra.c */ /* Ohjelmalla piirret„„n funktion kuvaajaa / vl -94 */ #include #include typedef double (*funktio_tyyppi)(double x); double fun_min(funktio_tyyppi f,double x1, double x2, double dx) { double fx,x,f_min; f_min = f(x1); if ( f(x2) < f_min ) f_min = f(x2); /* Malliohjelma toimi v„„rin */ /* mm. jos dx == 0.1 */ for (x = x1+dx; x < x2; x+=dx) { fx = f(x); if ( fx < f_min ) f_min = fx; } return f_min; } double fun_max(funktio_tyyppi f,double x1, double x2, double dx) { double fx,x,f_max; f_max = f(x1); if ( f(x2) > f_max ) f_max = f(x2); for (x = x1+dx; x < x2; x+=dx) { fx = f(x); if ( fx > f_max ) f_max = fx; } return f_max; } void piirra(funktio_tyyppi f,double x1, double x2, double y1, double y2, double dx) /* Piirret„„n funktion f kuvaaja * merkkej„ k„ytt„en */ { double y_kerroin; double x,y; int iy; if ( y1 == y2 ) return; y_kerroin = 40.0/(y2-y1); for (x = x1; x <= x2; x+=dx) { y = f(x); iy = (y-y1)*y_kerroin + 5; printf("%*c\n",iy,'*'); } } int main(void) { double x1=-5,x2=5,dx=0.5,y1,y2; funktio_tyyppi f = sin; printf("Piirr„n funktion sin(x)\n"); printf("Anna v„li ja tiheys jolla piirret„„n (%5.2lf %5.2lf %5.2lf) >", x1, x2, dx); scanf("%lf %lf %lf",&x1,&x2,&dx); y1 = fun_min(f,x1,x2,dx); y2 = fun_max(f,x1,x2,dx); piirra(f,x1,x2,y1,y2,dx); return 0; }