www.pudn.com > ZMODEM code.zip > CALC87.C


#include  
#include  
double mem[10]; 
main() 
{ 
	double a,b,c; 
	double getnum(),acos(),asin(),atan(),cos(),sqrt(),tan(),pow(); 
	char r,getreply(); 
	int i; 
	 
	for(;;){ 
		a=0; 
		b=0; 
		c=0; 
		a=getnum(); 
		for(;;){ 
			printf( 
"\nEnter your choice: 
+ - * / s(Q)uare sq(R)oot (S)in (C)os (T)an arc(s)in arc(c)os arc(t)an 
raise-to-the-(P)ower-of (I)nverse-reciprocal (0)-(9) store in memory 1-9 
(N)ew (D)isplay-memories (E)rase-memories e(X)it    "); 
			r=getreply(); 
			if (r=='X') exit(); 
			if (r=='N') break; 
			if (r=='E') { 
				for (i=0;i<10;i++) mem[i]=0; 
				continue; 
			} 
			if (r=='D') { 
				displaymem(); 
				printf("\n%1.16g\n",a); 
				continue; 
			} 
			if ((r>47)&&(r<58)){ 
				r-=48; 
				mem[r]=a; 
				printf("\nMemory %d set to %1.16g\n",r,a); 
				continue; 
			} 
			if (r=='Q') b=a; 
			if (r=='*') b=getnum(); 
			if ((r=='Q')||(r=='*')) printf("\n  %1.16g\nx %1.16g\n= %1.16g\n",a,b,c=a*b); 
			if (r=='/') printf("\n  %1.16g\n/ %1.16g\n= %1.16g\n",a,b=getnum(),c=a/b); 
			if (r=='+') printf("\n  %1.16g\n+ %1.16g\n= %1.16g\n",a,b=getnum(),c=a+b); 
			if (r=='-') printf("\n  %1.16g\n- %1.16g\n= %1.16g\n",a,b=getnum(),c=a-b); 
			if (r=='S') printf("\nSin %1.16g\n  = %1.16g\n",a,c=sin(a)); 
			if (r=='s') printf("\nArcsin %1.16g\n     = %1.16g\n",a,c=asin(a)); 
			if (r=='C') printf("\nCos %1.16g\n  = %1.16g\n",a,c=cos(a)); 
			if (r=='c') printf("\nArccos %1.16g\n     = %1.16g\n",a,c=acos(a)); 
			if (r=='T') printf("\nTan %1.16g\n  = %1.16g\n",a,c=tan(a)); 
			if (r=='t') printf("\nArctan %1.16g\n     = %1.16g\n",a,c=atan(a)); 
			if (r=='R') printf("\nSq Root of %1.16g\n         = %1.16g\n",a,c=sqrt(a)); 
			if (r=='P') printf("\n  %1.16g  to the\n  %1.16g  power\n= %1.16g\n",a,b=getnum(),c=pow(a,b)); 
			if (r=='I') printf("\nReciprocal of %1.16g\n            = %1.16g\n",a,c=1.0/a);  
			a=c; 
		} 
	} 
} 
double getnum() 
{ 
	char s[55],*p,*strchr(),*fgets(),c,getch(); 
	double n,atof(); 
	printf("\nEnter a number. Or (M)(n) for memory number 0-9. "); 
	fgets(s,51,stdin); 
	p=strchr(s,10); 
	if (p) *p=0; 
	else { 
		printf("\n*** WARNING *** --> Entry too long. It has been truncated!\n"); 
		do c=getch();  
		while (c!='\n'); 
	} 
	if ((s[0]=='m')||(s[0]=='M')) 
		return(n=mem[s[1]-48]); 
	return(n=atof(s)); 
} 
displaymem() 
{ 
	int i; 
	for (i=0;i<10;i++) 
		printf("\nmemory %d = %1.16g",i,mem[i]); 
	printf("\n"); 
} 
char replies[29] = "*+-/PIQRSCTNDEXsct0123456789"; 
getreply() 
{ 
	int i; 
	char r; 
	for (;;){ 
		r=getch(); 
		putchar(r); 
		for(i=0;i<28;i++) 
			if (r==replies[i]){ 
				printf("\n"); 
				return(r); 
			} 
	} 
}