*********************************************************
Author:Satyabrata Jena
Program Created on Date:March-2007
*********************************************************
PROGRAM IN C TO CREATE GRAPHICAL CALCULATOR APPLICATION
NOTE ABOUT THIS : CALCULATOR PROGRAM IN C
----------------------------------------------------------------------
1)THIS CALCULATOR PROGRAM,
CAN PERFORM ARITHMETIC OPERATIONS ON ,ONLY NATURAL NUMBERS.
2)EACH TIME ,AFTER PERFORMING AN ARITHMETIC OPERATION ,
CLICK ON THE CLEAR BUTTON,
AND THEN PERFORM THE NEXT ARITHMETIC OPERATION.
3)YOU CAN ONLY PERFORM "BINARY ARITHMETIC OPERATION",USING THIS CALCULATOR.
FOR EXAMPLE YOU ARE ALLOWED TO ENTER 15*8 IN THE CALCULATOR,TO GET RESULT=120
BUT YOU ARE NOT ALLOWED TO ENTER A TERNARY OPERATION , LIKE 4*7*5.
SO TO CALCULATE THE VALUE OF 4*7*5 ,
FIRST YOU HAVE TO ENTER 4*7 AND GET THE OUTPUT,
AND THEN IN THE NEXT STEP ,MULTIPLY 5 WITH THE PREVIOUS RESULT.
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
void calculator_draw();
void showmouseptr();
void mousepos();
void show_pressed_button();
void initmouse();
char * convert(int );
int pows();
union REGS i,o;
char *ptr1[]={"1","2","3","4","5"};
char *ptr2[]={"6","7","8","9","0"};
char *ptr3[]={"+","-","*","/","="};
char data[50];
int width=50,click;
int global_x,dead;
/////////////////////////////////////////////////////////
int number1[20],num1_count;
int number2[20],num2_count;
int num1,power1;
int num2,power2;
int result;
int plus=0;
int line1,line2,line3;
int pl,mn,mul,divs;
////////////////////////////////////////////////////////
void main()
{
int gd=DETECT,gm;
clrscr();
initgraph(&gd,&gm,"c:\\tc\\bgi");
clearviewport();
calculator_draw();
initmouse();
showmouseptr();
show_pressed_button();
getch();
closegraph();
printf("num1=%d\tnum2=%d",num1,num2);
printf("\nnum1[0]=%d",number1[0]);
printf("\nnum2[0]=%d",number2[0]);
printf("\nnum1[1]=%d",number1[1]);
printf("\nnum2[1]=%d",number2[1]);
printf("\nnum1[2]=%d",number1[2]);
printf("\nnum2[2]=%d",number2[2]);
printf("line3=%d",line3);
printf("\nplus=%d",plus);
printf("\nnum1count=%d",num1_count);
printf("\nnum2count=%d",num2_count);
printf("\nresult=%d",result);
}
void calculator_draw()
{
int i,width=50,j,k;
//rectangle(0,0,639,479);
setfillstyle(SOLID_FILL,RED);
bar3d(60,80,560,400,20,20);
//dispay screen
setfillstyle(SOLID_FILL,BLUE);
bar3d(82,102,538,138,3,3);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
//memory clear
setfillstyle(SOLID_FILL,MAGENTA);
bar3d(90,150,160,180,3,3);
outtextxy(100,150,"CLEAR");
setfillstyle(SOLID_FILL,DARKGRAY);
bar3d(460,150,540,180,3,3);
setcolor(YELLOW);
outtextxy(480,150,"QUIT");
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);
setfillstyle(SOLID_FILL,LIGHTGREEN);
setcolor(BLUE);
for(i=1;i<=5;i++)
{
bar3d(95*i,200,95*i+width,230,5,5);
outtextxy(95*i+20,200,ptr1[i-1]);
}
for(j=1;j<=5;j++)
{
bar3d(95*j,270,95*j+width,300,5,5);
outtextxy(95*j+20,270,ptr2[j-1]);
}
for(k=1;k<=5;k++)
{
bar3d(95*k,340,95*k+width,370,5,5);
outtextxy(95*k+20,340,ptr3[k-1]);
}
}
void showmouseptr()
{
i.x.ax=1;
int86(0x33,&i,&o);
}
void mousepos(int *butt,int *mx,int *my)
{
i.x.ax=3;
int86(0x33,&i,&o);
*butt=o.x.bx;
*mx=o.x.cx;
*my=o.x.dx;
}
void show_pressed_button()
{
int button=0,mouse_x,mouse_y,i,j,k;
int n,digit;
int bot1,bot2;
num1=0;power1=0;
num2=0;power2=0;
result=0;
plus=555;
line1=0;line2=0;line3=5555;
num1_count=0;
num2_count=0;
setcolor(WHITE);
while(!kbhit())
{
mousepos(&button,&mouse_x,&mouse_y);
if(button==1&&mouse_x>=460&&mouse_x<=540&&mouse_y>=150&&mouse_y<=180)
{
exit(0);
}
mousepos(&button,&mouse_x,&mouse_y);
if(button==1&&mouse_x>=90&&mouse_x<=160&&mouse_y>=150&&mouse_y<=180)
{
for(i=1;i<50;i++)
{
data[i]='\0';
}
num1=0;power1=0;
num2=0;power2=0;
result=0;
plus=555;
line1=0;line2=0;line3=5555;
num1_count=0;
num2_count=0;
number1[0]=0;
number1[1]=0;
number1[2]=0;
number2[0]=0;
number2[1]=0;
number2[2]=0;
pl=0;mn=0;mul=0;divs=0;
click=0;
setviewport(84,104,536,136,1);
clearviewport();
}
for(i=1;i<=5;i=i+1)
{
setviewport(0,0,639,479,1);
button=0;
mousepos(&button,&mouse_x,&mouse_y);
if(button==1&&mouse_x>=95*i&&(mouse_y>=200)&&(mouse_x<=(95*i)+width)&&mouse_y<=230)
{
line1=i-1;
bot1=button;
setviewport(84,104,536,136,1);
outtextxy(click,0,ptr1[i-1]);
///////////////////////////////////////
if(plus==555){
number1[num1_count]=atoi(ptr1[i-1]);
num1_count=num1_count+1; }
///////////////////////////////////////
if(plus==1111)
{
number2[num2_count]=atoi(ptr1[i-1]);
num2_count=num2_count+1;
}
delay(200);
click=click+20;
}//end of if
}//end of for1
for(j=1;j<=5;j=j+1)
{
setviewport(0,0,639,479,1);
button=0;
mousepos(&button,&mouse_x,&mouse_y);
if(button==1&&mouse_x>=95*j&&(mouse_y>=270)&&(mouse_x<=(95*j)+width)&&mouse_y<=300)
{
bot2=button;
line2=j-1; //number's position or item position
setviewport(84,104,536,136,1);
outtextxy(click,0,ptr2[j-1]);
/////////////////////////////////////
if(plus==555)
{
number1[num1_count]=atoi(ptr2[j-1]);
num1_count=num1_count+1;
}
////////////////////////////////////////
if(plus==1111)
{
number2[num2_count]=atoi(ptr2[j-1]);
num2_count=num2_count+1;
}
delay(200);
click=click+20;
}
}//end of for
for(k=1;k<=5;k=k+1)
{
setviewport(0,0,639,479,1);
mousepos(&button,&mouse_x,&mouse_y);
if(button==1&&mouse_x>=95*k&&(mouse_y>=340)&&(mouse_x<=(95*k)+width)&&mouse_y<=370)
{
line3=k-1;
setviewport(84,104,536,136,1);
// clearviewport();
outtextxy(click,0,ptr3[k-1]);
delay(200);
click=click+20;
}
}//end of for3*/
if(line3==0 )
{
plus=1111;
pl=1;
power1=num1_count-1;
for(i=0;i<num1_count;i=i+1)
{
num1=num1+number1[i]*(pows(10,power1));
power1=power1-1;
}
line3=999;
}//end of if
///////////////////////////////////////////////////////////
if(line3==4 &&pl==1)
{
line3=999;
power2=num2_count-1;
for(i=0;i<num2_count;i=i+1)
{
num2=num2+number2[i]*(pows(10,power2));
power2=power2-1;
}
result=num1+num2;
pl=0;
setviewport(84,104,536,136,1);
clearviewport();
outtextxy(0,0,convert(result));
}//end of if
///////////////////////////////////////////MINUS
if(line3==1 )
{
plus=1111;
mn=1;
power1=num1_count-1;
for(i=0;i<num1_count;i=i+1)
{
num1=num1+number1[i]*(pows(10,power1));
power1=power1-1;
}
line3=999;
}
if(line3==4 &&mn==1)
{
line3=999;
power2=num2_count-1;
for(i=0;i<num2_count;i=i+1)
{
num2=num2+number2[i]*(pows(10,power2));
power2=power2-1;
}
result=num1-num2;
mn=0;
setviewport(84,104,536,136,1);
clearviewport();
if(result>=0)
outtextxy(0,0,convert(result));
else
{
result=result*(-1);
outtextxy(0,0,"-");
outtextxy(20,0,convert(result));
}
}//end of if
//////////////////////////////////////////////////////// MULTIPLY
if(line3==2 )
{
plus=1111;
mul=1;
power1=num1_count-1;
for(i=0;i<num1_count;i=i+1)
{
num1=num1+number1[i]*(pows(10,power1));
power1=power1-1;
}
line3=999;
}
if(line3==4 &&mul==1)
{
line3=999;
power2=num2_count-1;
for(i=0;i<num2_count;i=i+1)
{
num2=num2+number2[i]*(pows(10,power2));
power2=power2-1;
}
result=num1*num2;
mul=0;
setviewport(84,104,536,136,1);
clearviewport();
outtextxy(0,0,convert(result));
}//end of if
////////////////////////////////////////////////////////DIVISION
if(line3==3 )
{
plus=1111;
divs=1;
power1=num1_count-1;
for(i=0;i<num1_count;i=i+1)
{
num1=num1+number1[i]*(pows(10,power1));
power1=power1-1;
}
line3=999;
}
if(line3==4 &&divs==1)
{
line3=999;
power2=num2_count-1;
for(i=0;i<num2_count;i=i+1)
{
num2=num2+number2[i]*(pows(10,power2));
power2=power2-1;
}
result=num1/num2;
divs=0;
setviewport(84,104,536,136,1);
clearviewport();
outtextxy(0,0,convert(result));
}//end of if
}//end of while
}
void initmouse()
{
i.x.ax=0;
int86(0x33,&i,&o);
}
int pows(int num,int power)
{
int i,res;
if(power==0)
return 1;
res=1;
for(i=1;i<=power;i++)
{
res=res*num;
}
return res;
}
char * convert(int n)
{
int i,dig,k=0,length=0,count=0;
char set[]= {'0','1','2','3','4','5','6','7','8','9'};
char str[40];
while(n !=0)
{
dig=n%10;
count=count+1;
for(i=0;i<=9;i++)
{
if (dig==i)
{
str[k]=set[i];
k=k+1;
}
}
n=n/10;
}
for(i=0;i<count;i=i+1)
{
data[i]=str[count-i-1];
}
return data;
}
ANIMATED CALCULATOR
No comments:
Post a Comment