#include #define ISCR 60 #define JSCR 21 #define BLANK ' ' #define ZERO '-' #define YY 'l' #define XX '-' #define FF 'x' void scrsho(fx) float (*fx)(); /* ANSI: float (*fx)(float); */ { int jz,j,i; float ysml,ybig,x2,x1,x,dyj,dx,y[ISCR+1]; char scr[ISCR+1][JSCR+1]; for (;;) { printf("\nEnter x1 x2 (x1=x2 to stop):\n"); scanf("%f %f",&x1,&x2); if (x1 == x2) break; for (j=1;j<=JSCR;j++) scr[1][j]=scr[ISCR][j]=YY; for (i=2;i<=(ISCR-1);i++) { scr[i][1]=scr[i][JSCR]=XX; for (j=2;j<=(JSCR-1);j++) scr[i][j]=BLANK; } dx=(x2-x1)/(ISCR-1); x=x1; ysml=ybig=0.0; for (i=1;i<=ISCR;i++) { y[i]=(*fx)(x); if (y[i] < ysml) ysml=y[i]; if (y[i] > ybig) ybig=y[i]; x += dx; } if (ybig == ysml) ybig=ysml+1.0; dyj=(JSCR-1)/(ybig-ysml); jz=1-(int) (ysml*dyj); for (i=1;i<=ISCR;i++) { scr[i][jz]=ZERO; j=1+(int) ((y[i]-ysml)*dyj); scr[i][j]=FF; } printf(" %10.3f ",ybig); for (i=1;i<=ISCR;i++) printf("%c",scr[i][JSCR]); printf("\n"); for (j=(JSCR-1);j>=2;j--) { printf("%12s"," "); for (i=1;i<=ISCR;i++) printf("%c",scr[i][j]); printf("\n"); } printf(" %10.3f ",ysml); for (i=1;i<=ISCR;i++) printf("%c",scr[i][1]); printf("\n"); printf("%8s %10.3f %44s %10.3f\n"," ",x1," ",x2); } } #undef ISCR #undef JSCR #undef BLANK #undef ZERO #undef YY #undef XX #undef FF