add numerical recipes library
This commit is contained in:
65
lib/nr/ansi/recipes/scrsho.c
Normal file
65
lib/nr/ansi/recipes/scrsho.c
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#define ISCR 60
|
||||
#define JSCR 21
|
||||
#define BLANK ' '
|
||||
#define ZERO '-'
|
||||
#define YY 'l'
|
||||
#define XX '-'
|
||||
#define FF 'x'
|
||||
|
||||
void scrsho(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
|
||||
Reference in New Issue
Block a user