Professional Documents
Culture Documents
Scientific Calculator111
Scientific Calculator111
SUBMITED TO:
Ms. Sukhdilpreet Kaur
&Naman
SUBMITED BY:
Name: Anuj Sharma
Roll NO.:R246A16 & R246A11
Regn.No.: 10802451
&10800991
AKNOWLEDGMENT
First and the foremost I would like to thank to my
almighty for giving me courage to bring up this
term assignment.
At the outset, I would like to propose a word of
thanks to my teacher, friends and other sources
that gave an unending support and helped me in
numerous ways from the first stage of my term
assignment conceived.
I would also like to thank my family members for
their whole hearted support and cooperation.
I duly acknowledge the contribution of
Ms.Sukhdilpreet Kaur for invaluable help. Coding
scientific calculator is an uphill task and would
have not been possible without proper and timely
assistance of Ms.Sukhdilpreet Kaur.
I would also thanks to all my friends for forwarding
their suggestions to make necessary
modifications.
INTRODUCTION
Scientific Calculator
0.
The calculator is written in JavaScript and you are welcome to view the
JavaScript source (visible within the HTML page) for personal
educational purposes as long as you recognize that it is copyrighted and
not in the public domain. This calculator is now available as part of
Hummingbird's Enterprise Information Portal. All enquiries regarding
licensing the calculator should be directed to Hummingbird Ltd.
Basic Functions
Addition
The addition (sum function) is used by clicking on the "+" button or using the keyboard. The
function results in a+b.
Subtraction
The subtraction (minus function) is used by clicking on the "-" button or using the keyboard.
The function results in a-b.
Multiplication
The multiplication (times function) is used by clicking on the "x" button or using the keyboard
"*" key. The function results in a*b.
Division
The division (divide function) is used by clicking on the "/" button or using the keyboard "/"
key. The function results in a/b.
Sign
The sign key (negative key) is used by clicking on the "(-)" button. The function results in -1*x.
Square
The square function is used by clicking on the "x^2" button or type "^2". The function results in
x*x.
Square Root
The square root function is used by clicking on the "x" button or type "sqrt()". This function
represents x^.5 where the result squared is equal to x.
Raise to the Power
The raise to the power (y raised to the x function) is used by clicking on the "y^x" button or type
"^".
Natural Exponential
The natural exponential (e raised to the x) is used by clicking on the "e^x" button or type
"exp()". The result is e (2.71828...) raised to x.
Logarithm
The logarithm (LOG) is used by clicking on the "LOG" button or type "LOG()".
Natural Logarithm
The Natural logarithm (LN) is used by clicking on the "LN" button or type "LN()".
Inverse
Multiplicative inverse (reciprocal function) is used by pressing the "1/x" button or typing
"inv()". This function is the same as x^-1 or dividing 1 by the number.
Exponent
Numbers with exponents of 10 are displayed with an "e", for example 4.5e+100 or 4.5e-100.
This function represents 10^x. Numbers are automatically displayed in the format when the
number is too large or too small for the display. To enter a number in this format use the
exponent key "EEX". To do this enter the mantissa (the non exponent part) then press "EEX" or
type"e" and then enter the exponent.
Factorial
The Factorial function is used by clicking the "!" button or type "!".
PI
TABLE OF CONTENTS
INTRODUCTION
CODING
APPLICATIONS &
FUTUREPROSPECTIVE
REFERENCES
CODING
#include<string.h>
#include<mouse.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<graphics.h>
#include<stdio.h>
#include<alloc.h>
#define pi 3.1415265
union REGS i,o;
int sr,dpf;
char *no[]={"1","2","3","4","5","6","7","8","9","0",".","+/-"},
*cal[]={"+","-","*","/","=",""},
*sci[]={"Sin","Cos","Tan","Sinh","Cosh","Tanh","Exp","ln","log","xrty","1/x",
"x^2","x^y","sqrt","fact","Hypot","eqn","DEG",},
*ms[]={"AC","HEX","BIN","OCT","BKSP"};
long com(long,int);
long double back(long double),equ(),alg(long double,int);
double ns(long double,int);
int box(int,int,int,int,int);
char *z2;
long double *z1;
int xy1[3];
void draw()
{
int gm,gd=DETECT;
int x,y,x1,y1,i,j;
initgraph(&gd,&gm,"c:\\tc\\bgi");
//INITIALISE GRAPHICS
z2=(char * ) malloc(sizeof(char)*10);
x=getmaxx();y=getmaxy();
setcolor(DARKGRAY); setfillstyle(1,CYAN);
floodfill(5,5,DARKGRAY);
setcolor(BLACK);setfillstyle(1,LIGHTGRAY);
rectangle(20,20,x-20,y-20);
floodfill(50,50,BLACK);
setcolor(BLACK);
line(20,20,x-20,20);
line(20,20,20,y-20);
//black outline
setcolor(BLUE);setfillstyle(1,BLUE);
rectangle(21,20,x-21,40);
floodfill(25,25,BLUE);
setcolor(BLACK);
outtextxy(x/5,8,"Scientific Calculator by-: Akash(02512) & Akhil(02514)");
initmouse();
showmouse();
setmouse(0,0);
setcolor(WHITE);setfillstyle(1,WHITE);
rectangle(30,55,x-30,70);
floodfill(32,59,WHITE);
//---Quit
/*------------------printing nos.---------------------*/
i=0;
for(x1=40;x1<150;x1+=30)
{ j=0;
for(y1=100;y1<450;y1+=40)
{
box(x1,y1,40,WHITE,BLACK);
setcolor(BLUE);
if(i==1&&j==10)
outtextxy(x1+10,y1+20,no[i+j]);
else
outtextxy(x1+15,y1+20,no[i+j]);
y1+=20; j+=2;
}
i++;
x1+=40;
}
/*---------------------------------------------------------------*/
/*--------printing simple algebric functions:(+,-,*,/)----------*/
for(x1;x1<=180;x1+=40)
{ j=0;
for(y1=100;y1<450;y1+=40)
/*x1=180*/
{
box(x1,y1,40,WHITE,BLACK);
setcolor(BLUE);
outtextxy(x1+15,y1+20,cal[j]);
y1+=20;
j++;
}
}
x1+=30;
/*-----------------------------------------------------------------*/
/*--------------------print scientific functions-------------------*/
i=0;
for(x1;x1<501;x1+=30)
{ j=0;
for(y1=100;y1<450;y1+=40)
{
box(x1,y1,70,WHITE,BLACK);
/*x1=220*/
setcolor(BLUE);
outtextxy(x1+15,y1+20,sci[i+j]);
y1+=20; j+=3;
}
xy1[i]=x1;
/*store X coordinates*/
i++;
x1+=70;
}
/*-----------------------------------------------------------------*/
/*------------------print MATHEMATICAL SYSTEMS: BIN,HEX-------------*/
for(x1;x1<=550;x1+=30)
{ j=0;
for(y1=100;y1<450;y1+=40)
/*x1=550*/
{ if(j==5)
break;
box(x1,y1,55,WHITE,BLACK);
setcolor(RED);
outtextxy(x1+15,y1+20,ms[j]);
y1+=20;
j++;
}
}
mouse();
}
void main()
{
password();
//MAIN DECLARATION
draw();
}
/*-----------MOUSE PROGRAMMING------------*/
mouse()
{
int button,x,y;
char s[13]={" "};
int x1,y1,i,j,flag=1,l;
long double n,k;
while(!kbhit())
{ Again:
getmouse(&button,&x,&y);
while(button==1)
{
getmouse(&button,&x,&y);
sr=1;
}
if(sr==1)
{
i=0;
sr=0;
if(x>=xy1[0]&&x<=(xy1[0]+70))
/*fourth column check*/
{
colm1(n,y);
dpf=0;
strcpy(s," ");
}
if(x>=xy1[1]&&x<=(xy1[1]+70))
/*fifth column check*/
{
colm2(n,y);
dpf=0;
strcpy(s," ");
}
if(x>=xy1[2]&&x<=(xy1[2]+70))
/*sixth column check*/
{
colm3(n,y);
dpf=0;
strcpy(s," ");
}
for(x1=40;x1<150;x1+=30)
//1st & 2nd column check
{
j=0;
setcolor(DARKGRAY);
for(y1=100;y1<450;y1+=40)
{
if(x>=x1 && y>=y1 && x<=x1+40 && y<=y1+40)
{ box(x1,y1,40,BLACK,WHITE);
delay(200);
box(x1,y1,40,WHITE,BLACK);
if((strcmp(no[i+j],no[11]))==0)
{ if(flag==1)
{ n*=-1;
// +/- sign
s[0]='-';
flag=0;
}
else
{ n*=-1;
s[0]=' ';
setcolor(LIGHTGRAY);
setfillstyle(1,WHITE);
floodfill(32,59,LIGHTGRAY);
flag=1;
}
goto NEXT;
}
if(strlen(s)>=11)
goto Again;
if((strcmp(no[i+j],no[10]))==0)
{
if(dpf==0)
{
strcat(s,no[i+j]);
dpf=1;
}
}
else
strcat(s,no[i+j]);
s
NEXT:
n=_atold(s);
setcolor(DARKGRAY);
outtextxy(30,60,s);
goto Again;
}
y1+=20; j+=2;
}
i++;
x1+=40;
}
//BACKSPACE
// 7th column
floodfill(32,59,LIGHTGRAY);
dpf=0;
ns(n,y);
strcpy(s," ");
goto Again;
}
if(x>180 && x<220)
{
setcolor(LIGHTGRAY);
setfillstyle(1,WHITE);
floodfill(32,59,LIGHTGRAY);
dpf=0;
if(y>400 && y<440)
{
// 3rd column
// pi value
box(180,400,40,BLACK,WHITE);
delay(200);
box(180,400,40,WHITE,BLACK);
n=pi;
setcolor(DARKGRAY);
outtextxy(30,60," 3.1415265");
goto Again;
}
alg(n,y);
strcpy(s," ");
goto Again;
}
}
return;
}
/*-------perform algebric calculations---------*/
long double alg(long double n, int y )
{
int y1;
static int i;
long double r;
z1[i]=n;
//copy no. to z1
if(y>100 && y<140)
{ box(180,100,40,BLACK,WHITE);
delay(200);
box(180,100,40,WHITE,BLACK);
z2[i]=43;
i++;
return 0;
}
if(y>160 && y<200)
{ box(180,160,40,BLACK,WHITE);
delay(200);
box(180,160,40,WHITE,BLACK);
sub(n);
z2[i]=45;
//--add
// add(n);
//subtract
//
i++;
return 0;
}
if(y>220 && y<260)
{ box(180,220,40,BLACK,WHITE);
delay(200);
box(180,220,40,WHITE,BLACK);
z2[i]=42;
i++;
return 0;
}
if(y>280 && y<320)
{ box(180,280,40,BLACK,WHITE);
delay(200);
box(180,280,40,WHITE,BLACK);
z2[i]=47;
i++;
return 0;
}
//multiply
//mul(n);
//divide
//div(n);
//equal
/*------perform division------*/
/*--------------*/
/*------perform multiplication------*/
{
z1[i]*=z1[i+1];
for(j=i;z2[j]!='\0';j++)
{ z1[j+1]=z1[j+2];
z2[j]=(int)z2[j+1];
}
else
i++;
/*--------------*/
}
for(i=0;z2[i]!='\0';)
if(z2[i]=='+')
{
if(z2[i-1]=='-')
z1[i+1]*=-1;
/*------perform addition------*/
z1[i]+=z1[i+1];
for(j=i;z2[j]!='\0';j++)
{ z1[j+1]=z1[j+2];
z2[j]=z2[j+1];
}
}
else
i++;
/*--------------*/
}
for(i=0;z2[i]!='\0';)
if(z2[i]=='-')
{
z1[i]-=z1[i+1];
for(j=i;z2[j]!='\0';j++)
{ z1[j+1]=z1[j+2];
z2[j]=z2[j+1];
}
}
else
i++;
}
/*------perform subtraction------*/
if(z2[1]=='r')
z1[0]=pow(z1[2],1/z1[0]);
/*--------------*/
if(z2[1]=='p')
z1[0]=pow(z1[2],z1[0]);
if(z2[1]=='h')
z1[0]=hypot(z1[2],z1[0]);
/*------find hypotenuse------*/
gcvt(z1[0],15,ch);
array----------*/
setcolor(DARKGRAY);
outtextxy(35,60,ch);
/*------copy result to
//display result
press();
return 0;
}
/*-------perform numeric system calculations--------*/
double ns(long double b, int y )
{ int y1;
long n;
n=b;
if(y>100 && y<140)
// AC function
{
box(550,100,55,BLACK,WHITE);
delay(200);
box(550,100,55,WHITE,BLACK);
return 0;
}
if( y>160 && y<200)
// HEX function
{
box(550,160,55,BLACK,WHITE);
delay(200);
box(550,160,55,WHITE,BLACK);
com(n,16);
}
if( y>220 && y<260)
// BINARY function
{
box(550,220,55,BLACK,WHITE);
delay(200);
box(550,220,55,WHITE,BLACK);
com(n,2);
}
if( y>280 && y<320)
//OCTAL function
{
box(550,280,55,BLACK,WHITE);
delay(200);
box(550,280,55,WHITE,BLACK);
com(n,8);
}
return 0;
}
/*---------common for HEX, BINARY & OCTAL-------------*/
long com(long b,int k)
{
char *str;
int i=0;
itoa(b,str,k);
if(k==16)
{
while(str[i]!='\0')
{
// integer to array
}
setcolor(DARKGRAY);
outtextxy(35,60,str);
press();
return 0;
/*---------------BUTTONS------------------------*/
int box(int x1,int y1,int l,int c1,int c2)
{
setcolor(c1);
setfillstyle(1,LIGHTGRAY);
rectangle(x1,y1,x1+l,y1+40);
floodfill(x1+3,y1+10,c1);
setcolor(c2);
line(x1+l,y1,x1+l,y1+40);
line(x1,y1+40,x1+l,y1+40);
return 0;
}
/*password at start screen*/
password()
{
int i,x=270,gm,gd=DETECT;
char ch,pass[10];
initgraph(&gd,&gm,"c:\\tc\\bgi");
rectangle(15,15,615,465);
setcolor(LIGHTBLUE);
setfillstyle(1,LIGHTBLUE);
floodfill(50,50,15);
settextstyle(1,HORIZ_DIR,3);
setcolor(BLACK);
outtextxy(200,50,"Enter the password");
for(i=0;i<=10;i++,x+=10)
{
ch=getch();
if(ch==13)
break;
outtextxy(x,150,"*");
sound(300);
delay(50);
nosound();
pass[i]=ch;
}
pass[i]='\0';
if(!strcmp(pass,"as"))
//compare entered string with password
return 0;
else
cleardevice();
rectangle(15,15,615,465);
setcolor(LIGHTBLUE);
setfillstyle(1,LIGHTBLUE);
floodfill(50,50,15);
settextstyle(1,HORIZ_DIR,3);
setcolor(RED);
outtextxy(220,50,"Wrong Password");
outtextxy(80,150,"This program will terminate in 5 seconds");
for(i=5;i>=0;i--)
{
setcolor(LIGHTBLUE);
setfillstyle(1,LIGHTBLUE);
bar(300,240,330,300);
setcolor(RED);
outtextxy(310,250,itoa(i,pass,10));
sound(1000*i+500);
delay(300);
nosound();
delay(700);
}
exit(0);
return 0;
}
box(xy1[0],400,70,WHITE,BLACK);
z2[1]='h';
return 0;
}
setcolor(DARKGRAY);
gcvt(cal,10,str);
outtextxy(35,60,str);
press();
return(0);
}
/*-----------check for second column------------------*/
colm2(long double a,int y)
{
double cal;
int i;
char *str;
setcolor(WHITE); setfillstyle(1,WHITE);
bar(30,55,610,70);
if(y>=100 && y<=140)
// COSINE of entered no.
{
box(xy1[1],100,70,BLACK,WHITE);
delay(200);
box(xy1[1],100,70,WHITE,BLACK);
cal=cos(a);
}
if(y>=160 &&y<=200)
// HYPERBOLIC COSINE of entered no.
{
box(xy1[1],160,70,BLACK,WHITE);
delay(200);
box(xy1[1],160,70,WHITE,BLACK);
cal=cosh(a);
}
if(y>=220 && y<=260)
// NATURAL LOG of entered no.
{
box(xy1[1],220,70,BLACK,WHITE);
delay(200);
box(xy1[1],220,70,WHITE,BLACK);
cal=log(a);
}
if(y>=280 && y<=320)
// INVERSE of entered no.
{
box(xy1[1],280,70,BLACK,WHITE);
delay(200);
box(xy1[1],280,70,WHITE,BLACK);
cal=1/a;
}
if(y>=340 && y<=380)
// SQRT of entered no.
{
box(xy1[1],340,70,BLACK,WHITE);
delay(200);
box(xy1[1],340,70,WHITE,BLACK);
cal=sqrt(a);
}
if(y>=400 && y<=440)
// QUADRATIC EQN.
{
box(xy1[1],400,70,BLACK,WHITE);
delay(200);
box(xy1[1],400,70,WHITE,BLACK);
roots();
draw();
return 0;
}
setcolor(DARKGRAY);
gcvt(cal,10,str);
outtextxy(35,60,str);
press();
return 0;
/*-----------------------END--------------------------------------*/
APPLICATIONS
In most countries, students use calculators for schoolwork.
There was some initial resistance to the idea out of fear that
basic arithmetic skills would suffer. There remains
disagreement about the importance of the ability to perform
calculations "in the head", with some curricula restricting
calculator use until a certain level of proficiency has been
obtained, while others concentrate more on teaching estimation
techniques and problem-solving. Research suggests that
inadequate guidance in the use of calculating tools can restrict
the kind of mathematical thinking that students engage in.
Others have argued that calculator use can even cause core
REFERENCES
1. Thomas J. Bing, Edward F. Redish, Symbolic Manipulators Affect Mathematical Mindsets,
December 2007
2. ^ Mike Sebastian's calculator forensics algorithm is an example of such rounding errors -- the
algorithm's arcsin(arccos(arctan(tan(cos(sin(9)))))) should come out 9 on standard floating point
hardware, but for CORDIC it's a pathological case that produces different rounding errors on
each chip that it is implemented on. The algorithm is primarily used to identify the manufacturer
of a particular calculator's CPU, since it is usually reproducible between chips of the same
model.
3. ^ Georges Ifrah notes that humans learned to count on their hands. Ifrah shows, for example, a
picture of Boethius (who lived 480524 or 525) reckoning on his fingers in Ifrah 2000, p. 48.
4. ^ According to Schmandt-Besserat 1981, these clay containers contained tokens, the total of
which were the count of objects being transferred. The containers thus served as a bill of lading
or an accounts book. In order to avoid breaking open the containers, marks were placed on the
outside of the containers, for the count. Eventually (Schmandt-Besserat estimates it took 4000
years) the marks on the outside of the containers were all that were needed to convey the count,
and the clay containers evolved into clay tablets with marks for the count.
5. ^ Lazos 1994
6. ^ Ancient Discoveries, Episode 11: Ancient Robots, History Channel,
http://www.youtube.com/watch?v=rxjbaQl0ad8, retrieved on 6 September 2008
7. ^ A Spanish implementation of Napier's bones (1617), is documented in Montaner i Simon
1887, pp. 19-20.
8. ^ Kells, Kern & Bland 1943, p. 92
9. ^ Kells, Kern & Bland 1943, p. 82, as log(2)=.3010, or 4 places.
10. ^ Schmidhuber
11. ^ As quoted in Smith 1929, pp. 180-181
12. ^ Slide Rules
13. ^ Smart Computing Article - Calculating Clock to Carnegie Mellon University
14. ^ IBM Archives: IBM 608 calculator
15. ^ "Simple and Silent", Office Magazine, Dec. 1961, p1244
16. ^ "'Anita' der erste tragbare elektonische Rechenautomat" [trans: "the first portable electronic
computer"], Buromaschinen Mechaniker, Nov. 1961, p207
17. ^ Texas Instruments Celebrates the 35th Anniversary of Its Invention of the Calculator Texas
Instruments press release, 15 Aug 2002.
18. ^ Electronic Calculator Invented 40 Years Ago All Things Considered, NPR, 30 Sept 2007.
Audio interview with one of the inventors.
19. ^ "Single Chip Calculator Hits the Finish Line", Electronics's', Feb. 1 1971, p19