PDA

View Full Version : درخواست کمک برای اصلاح و تکمیل این سورس کد.



Programmer.G
پنج شنبه 16 خرداد 1387, 19:33 عصر
سلام

دوستان در زیر سورس یک ماشین حساب را کپی کرده ام که چهار عمل اصلی را تا 10 رقم انجام می دهد. من می خوام کد را طوری تغییر بدم که چهار عمل ضرب، تقسیم، جمع و تفریق را تا 50 رقم انجام بده.

لطفا کمک کنید تا این کد را تغییر بدهم.

با سپاس.



#include<iostream.h>
#include<string.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>


class win;
win* const screen=(win *)0;
enum bs{up,p};
enum boolean{f,t};
class win
{
protected:
win *ptown;
int left,top,right,bot;
int del;
int delcolor;
int ccolor;
public:
win(win *pt,int l,int t, int r,int b,int dc,int cc);
void display();
};
class bor: public win
{
public:
bor(win *pt,int l,int t,int r,int b,int dc=BLUE,int cc=DARKGRAY)
:win(pt,l,t,r,b,dc,cc)
{}
};
class button : public win
{
private:
char text[20];
bs butstat;
int poly[12];
public:
button(win* pt,int l,int t,int r,int b,int cc=BLACK,char* tx=" ")
:win(pt,l,t,r,b,BLACK,cc)
{
strcpy(text,tx);
butstat=up;
}
void click();
void display();
};
class output : public win
{
public:
output(win* pt,int l,int t,int r,int b,int dc=BLUE,int cc=WHITE)
:win(pt,l,t,r,b,dc,cc)
{}
void text(char *);
void num(double);
};
win::win(win *pt,int l,int t,int r,int b,int dc,int cc)
{
ptown=pt;
left=l;
top=t;
right=r;
bot=b;
delcolor=dc;
ccolor=cc;
del=((right-left)+(bot-top))/150+3;
if(ptown !=screen)
{
left=left+ptown->left;
right=right+ptown->left;
top=top+ptown->top;
bot=bot+ptown->top;
}
}
void win::display()
{
setfillstyle(SOLID_FILL,delcolor);
setcolor(delcolor);
bar(left,top,right,bot);
setfillstyle(SOLID_FILL,ccolor);
setcolor(ccolor);
bar(left+del+1,top+del,right-del-1,bot-del);
}
void button::click()
{
butstat=p;
button::display();
clock_t end=5+clock();
while(clock()<end)
;
butstat=up;
button::display();
}
void button::display(void)
{
win::display();
moveto(left+del*4,top+del*2);
setcolor(BLACK);
outtext(text);
setcolor(BLUE);
if(butstat==up)
{
//1 st point
poly[0]=left;
poly[1]=top;
//2 nd point
poly[2]=right;
poly[3]=top;
//
poly[4]=right-del;
poly[5]=top+del;

poly[6]=left+del;
poly[7]=top+del;

poly[8]=left+del;
poly[9]=bot-del;

poly[10]=left;
poly[11]=bot;
}
else
{
poly[0]=right;
poly[1]=top;

poly[2]=right;
poly[3]=bot;

poly[4]=left;
poly[5]=bot;

poly[6]=left+del;
poly[7]=bot-del;

poly[8]=right-del;
poly[9]=bot-del;

poly[10]=right-del;
poly[11]=top+del;
}
fillpoly(6,poly);
}
void output::text(char *ptstring)
{
display();
moveto(left+del*2,top+del*2);
setcolor(BLACK);
outtext(ptstring);
}
void output::num(double d)
{
char buffer[80];
sprintf(buffer,"%16.2lf",d);
output::text(buffer);
}
void main()
{
int gd,gm;
detectgraph(&gd,&gm);
initgraph(&gd,&gm," ");
setwritemode(COPY_PUT);
bor bor1(screen,240,30,480,330);
output out1(&bor1,20,20,220,60,BLACK,WHITE);
button b0(&bor1,30,230,65,265,DARKGRAY,"0");
button b1(&bor1,30,180,65,215,DARKGRAY,"1");
button b2(&bor1,78,180,113,215,DARKGRAY,"2");
button b3(&bor1,127,180,162,215,DARKGRAY,"3");
button b4(&bor1,30,130,65,165,DARKGRAY,"4");
button b5(&bor1,78,130,113,165,DARKGRAY,"5");
button b6(&bor1,127,130,162,165,DARKGRAY,"6");
button b7(&bor1,30,80,65,115,DARKGRAY,"7");
button b8(&bor1,78,80,113,115,DARKGRAY,"8");
button b9(&bor1,127,80,162,115,DARKGRAY,"9");
button addbtn(&bor1,175,230,225,265,BLUE,"+=");
button clrbtn(&bor1,127,230,162,265,BLUE,"c");
button dotbtn(&bor1,78,230,113,265,BLUE,".");
button subbtn(&bor1,175,180,210,215,BLUE,"-");
button mulbtn(&bor1,175,130,210,165,BLUE,"*");
button divbtn(&bor1,175,80,210,115,DARKGRAY,"/");
bor1.display();
b0.display();
b1.display();
b2.display();
b3.display();
b4.display();
b5.display();
b6.display();
b7.display();
b8.display();
b9.display();
addbtn.display();
clrbtn.display();
dotbtn.display();
subbtn.display();
mulbtn.display();
divbtn.display();
const char ESC=27;
char dstring[80];
char tempbuf[80];
int numchars=0;
char ch;
char oper;
boolean isfirst=t;
boolean chain=f;
double num1,num2,ans;
while((ch=getch())!=ESC)
{
if(ch>='0'&& ch<='9'||ch=='.')
{
switch(ch)
{
case '0':b0.click();
break;

case '1':b1.click();
break;
case '2':b2.click();
break;
case '3':b3.click();
break;

case '4':b4.click();
break;

case '5':b5.click();
break;

case '6':b6.click();
break;

case '7':b7.click();
break;

case '8':b8.click();
break;

case '9':b9.click();
break;
case '.':dotbtn.click();
break;
}
dstring[numchars++]=ch;
dstring[numchars]='\0';
if(atof(dstring)>9999999999.99||numchars>11)
dstring[--numchars]='\0';
out1.text(dstring);
}
else if(ch=='/'||ch=='*'||ch=='-'||ch=='+'||ch=='=')
{
strcpy(tempbuf,dstring);
numchars=0;
dstring[numchars]='\0';
out1.text(dstring);
if(isfirst)
{
num1=(chain)? ans:atof(tempbuf);
isfirst=f;
switch (ch)
{
case '/':divbtn.click();oper='/';break;
case '*':mulbtn.click();oper='+';break;
case '-':subbtn.click();oper='-';break;
case '+':
case '=':addbtn.click();oper='+';break;
}
}
else
{
addbtn.click();
num2=atof(tempbuf);
switch(oper)
{
case '/':ans=num1/num2;break;
case '*':ans=num1*num2;break;
case '-':ans=num1-num2;break;
case '+':ans=num1+num2;break;
}
if(ans>9999999999.99)
out1.text("Overflow");
else
{
out1.num(ans);
num1=ans;
}
isfirst=t;
chain=t;
}
}
else if(ch=='c'||ch=='C')
{
clrbtn.click();
isfirst=t;
chain=f;
numchars=0;
dstring[numchars]='\0';
out1.num(0.0);
}
}
closegraph();
restorecrtmode();
}