• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

برنامه ماشین حساب با اولویت بندی با c++

rezasamin

New member
سلام
من احتیاج به برنامه ماشین حساب دارم که هم پیشرفته باشه هم اولویت بندی کنه. اگه بتونه سینوس و ... هم محاسبه کنه بهتره. ورودی مثله
frown.gif
2+3)/3*(1+5)

ممنون میشم اگه کسی بتونه هر چه سریعتر کمک کنه
 

fullsite1900

New member
بعید میدونم کار سختی باشه.
خودم یکم کوچیکترش رو نوشتم.
فکر کنم تا فردا واست بنویسم.
میذارمش همینجا
 

tazeha

کاربر ويژه



ببین این بدردت می خوره
#include <math.h>




#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define ENTER 13
#define BKSP 8

const int MAX=20;
const int ESC=27;
struct key{
int x;
int y;
char p;
};
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
struct key keys[]={
{31,11,'('},{36,11,')'},{41,11,'^'},{46,11,16},
{31,13,'7'},{36,13,'8'},{41,13,'9'},{46,13,'/'},
{31,15,'4'},{36,15,'5'},{41,15,'6'},{46,15,'*'},
{31,17,'1'},{36,17,'2'},{41,17,'3'},{46,17,'-'},
{31,19,'0'},{36,19,'.'},{41,19,'='},{46,19,'+'},
};
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int pr[]={17,0,16,12,13,14,8,9,10,4,5,6};
int getkey(void )
{
int key,low,high;
key=getch();
return (key) ? key : getch()+256;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void press(int i)
{
window(keys.x,keys.y,keys.x+3,keys.y);
textbackground(WHITE);
textcolor(1);
clrscr();
cprintf(" %c",keys.p);
delay(50);
window(keys.x,keys.y,keys.x+3,keys.y);
textbackground(BLACK);
textcolor(WHITE);
clrscr();
cprintf(" %c",keys.p);
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void display(char *s)
{
int len=strlen(s);
window(31,8,49,9);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
if (!len) len++;
gotoxy(19-len-1,2);
if (strlen(s)==0) cprintf("0.");
else if (!strchr(s,'.')) cprintf("%s.",s);
else cprintf("%s ",s);
}
/******************************************************************/


void ftoa(char *s,double x)
{
sprintf(s,"%f",x);
int i=strlen(s)-1;
while(s=='0') s[i--]=0;
if (s=='.') s[i--]=0;
if (!x) strcpy(s,"");
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void calculater()
{
int ch,op=0;
double x=0,y=0,k=0;
char str[50]={0};
char str2[50]={0};
display(str);
/******************************************************************/
do {
ch=getkey();
switch (ch){
case '.':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':{
char st[]={ch,0};

press(pr[ch-'.']);
if(strlen(str) < 14 ){
if (ch!='.')
strcat(str,st);
else
if (!strchr(str,'.'))
strcat(str,st);
display(str);
}
}
break;
case '+':
case '-':
(ch=='+') ? press(19) : press(15);
if (!k){
x=atof(str);
strcpy(str2,str);
}else
switch(op){
case 1:x+=atof(str);
break;
case 2:x-=atof(str);
break;
case 3:x*=atof(str);
break;
case 4:x/=atof(str);
break;
}
ftoa(str,x);
display(str);
op = (ch=='+') ? 1 : 2;
k=1;
strcpy(str,"");
break;
case '*':
case '/':
(ch=='*') ? press(11) : press(7);
if (!k){
x=atof(str);
strcpy(str2,str);
}else
switch(op){
case 1:x+=atof(str);
break;
case 2:x-=atof(str);
break;
case 3:x*=atof(str);
break;
case 4:{double y;
y=atof(str);
if (y) x/=atof(str);
}
break;
}
ftoa(str,x);
display(str);
op = (ch=='*') ? 3 : 4;
k=1;
strcpy(str,"");
break;
/************************************************************/
case '(':{
double x;
press(0);
/* x=atof(str);
if(x>0) {
x=sqrt(x);
ftoa(str,x);
display(str);
}*/
}
break;
/************************************************************/
case ')': {
double x;
press(1);
// x=atof(str);
// x*=-1;
// ftoa(str,x);
// display(str);
}
break;
/************************************************************/
case '=':
case ENTER:
press(18);
if (!op) x=atof(str);
else if ( k ) y=atof(str);
else y=atof(str2);

switch(op){
case 1: x+=y;
break;
case 2: x-=y;
break;
case 3: x*=y;
break;
case 4: x/=y;
break;
}
ftoa(str,x);
display(str);
k=0;
break;
/******************************************************************/
case BKSP:{
press(3);
int i=strlen(str);
if (i){
str[i-1]=0;
display(str);
}
}
break;
/******************************************************************/
case '^':
press(2);
op=0;
x=0,y=0,k=0;
strcpy(str,"");
strcpy(str2,"");
display(str);
continue;
}
}while(ch!=ESC);
}
/******************************************************************/
void menu4(void);
void meno1(void)
{ _setcursortype(_NOCURSOR);
textbackground(1);
clrscr();
textbackground(0);
window(7,6,19,10);
clrscr();
textbackground(19);
textcolor(15);
window(6,5,18,9);
clrscr();
gotoxy(1,2);cprintf(" Esc :Exit ");
gotoxy(1,3);cprintf(" Enter :Result ");
gotoxy(1,4);cprintf(" Bksp :Undo ");
window(31,8,52,21);
textbackground(0) ;
clrscr();

window(30,7,50,20);
textbackground(19);
clrscr();
window(31,8,49,9);
textbackground(7);
textcolor(YELLOW);
clrscr();
_setcursortype(_NOCURSOR);
for (int i=0 ; i<MAX ;i++){
window(keys.x,keys.y,keys.x+3,keys.y);
textbackground(0);
textcolor(15);
clrscr();
cprintf(" %c",keys.p);
}
}
void main()
{
int i;
meno1();
calculater();
_setcursortype(_NORMALCURSOR);
clrscr();
}
 
بالا