امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ماشین حساب(رسم نمودار)
نویسنده پیام
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #1
ماشین حساب(رسم نمودار)
سلام خدمت دوستان
من یه ماشین حساب نوشتم که چار عمل اصلی رو با در نظر گرفتن اولویتها انجام می ده . کسی می تونه اولویت پرانتزها رو بهش اضافه کنه؟
کد php:
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
int k,a[1000],y=26,avval=0,nomber=0,insert=0,max=0,amalgar[100];
int first=0,end=0,adad[100],pabaz[100],pabas[100];
int x;
unsigned short int far *screen=(unsigned short int far*) 0xb8000000;
char *c;

int FUNC(char *c)
{
*
c=getch();
if(*
c==0)
 {
    *
c=getch();
    return 
1;
 }
    else return 
0;
}
void por(int i,int j,int color)
{
    
screen[i*80+j]=color;
}
void backspase()
{
    if(
max!=0)
        
max--;
    for(
int i=nomber;i<1000;i++)
        
a[i-1]=a[i];
    
nomber--;
    if(
avval>0)
        
avval--;
    else
    {
        
por(24,y,219+256*7);
        
por(24,y-1,10*256+24);
        
y--;
    }
}
void harfgozar()
{
    for(
int i=999;i>nomber;i--)
            
a[i]=a[i-1];
        
max++;
    
a[nomber]=*c;
    if(
y==50)
        
y=49;
    if(
a[nomber+1]==0)
        
a[nomber+1]=32;
}
void jadid()
{
    for(
int i=0;i<50;i++)
        for(
int j=0;j<80;j++)
            if (
j>25&&j<50&&i<30&&i>20)
                if(
i!=23)
                    
por(i,j,219+256*7);
                else
                    
por(i,j,219+256*16);
            else
                
por(i,j,219+256*9);
    
por(24,y,10*256+24);
    for(
i=0;i<100;i++)
    {
        
amalgar[i]=0;
        
adad[i]=0;
        
pabaz[i]=0;
        
pabas[i]=0;
    }
    
pabaz[-1]=0;
    for(
i=0;i<1000;i++)
        
a[i]=0;
}
void amaliat(int first,int end)
{
}
void mohasebe(int m)
{
    
int i=m+1,x=0,q=0,w=0;
    while(
a[i]!=0)
    {
        while(
a[i]>47&&a[i]<59)
        {
            
adad[x]=10*adad[x]+a[i]-48;
            
i++;
        }
        if(
a[i]==40)
            
mohasebe(i);
        while(
a[i]<48&&a[i]!=0)
        {
            if(
a[i]!=41&&a[i]!=40)
                
amalgar[x]=a[i];
            if(
a[i]==40)
                {
pabaz[q]=x+2;q++;}
            if(
a[i]==41)
            {
pabas[w]=x+2;w++;}
            
i++;
        }
        
x++;
    }
    
//for(int j1=-1;j1<x;j1++)
        
for(i=0;i<x;i++)
        if(
amalgar[i]==42)
            {
            
adad[i]=adad[i]*adad[i+1];
            for(
int j=i;j<x;j++)
                
adad[j+1]=adad[j+2];
            for(
j=i;j<x;j++)
                
amalgar[j]=amalgar[j+1];
            
x--;
            }
    for(
i=0;i<x;i++)
     if(
amalgar[i]==47)
        {
            
adad[i]=adad[i]/adad[i+1];
            for(
int j=i;j<x;j++)
                
adad[j+1]=adad[j+2];
            for(
j=i;j<x;j++)
                
amalgar[j]=amalgar[j+1];
            
x--;
        }
        for(
i=0;i<x;i++)
            if(
amalgar[i]==43)
        {
            
adad[i]=adad[i]+adad[i+1];
            for(
int j=i;j<x;j++)
                
adad[j+1]=adad[j+2];
            for(
j=i;j<x;j++)
                
amalgar[j]=amalgar[j+1];
            
x--;
        }
            for(
i=0;i<x;i++)
            if(
amalgar[i]==45)
            {
            
adad[i]=adad[i]-adad[i+1];
            for(
int j=i;j<x;j++)
                
adad[j+1]=adad[j+2];
            for(
j=i;j<x;j++)
                
amalgar[j]=amalgar[j+1];
            
x--;
            }

        
//if()
    //amaliat(,)
}
void benevis()
{
    for(
int i=0;i<24;i++)
        
por(23,i+26,a[i+avval]+256*4);
}
void main()
{
    
a[-1]=40;
    
int lk=0;
    
int para=0;
    
jadid();
    
int k=FUNC(c);
    while(*
c!=27)
    {
        if((*
c>47&&*c<59&&lk!=41)||((*c==42||*c==43||*c==45||*c==47)
&&((
lk>47&&lk<59)||lk==41))||
(*
c==40&&(lk==42||lk==43||lk==45||lk==47||lk==40||lk==0)||(*c==41&&((lk>47&&lk<59)||lk==41))&&(*c!=41||para>0)))
        {
            if(*
c==40)
            
para++;
            if(*
c==41)
            
para--;
            if(
y>48)
                
avval++;
            
harfgozar();
            if(
nomber<1000)
                
nomber++;
            
y++;
            
lk=*c;
        }
        if((*
c==75)&&(k==1))
        {
            
int ezafe=0;
            if(
nomber>0)
            
nomber--;
            if(
y>26)
            {
                
por(24,y,219+256*7);
                
por(24,y-1,10*256+24);
                
y--;
            }
            else
            {
                
avval-=6;
                if(
avval<0)
                {
                    
ezafe=0-avval;
                    
avval=0;
                }
                    
por(24,y,219+256*7);
                    
y=y+5-ezafe;
                    if(
y<26)
                        
y=26;
                    
por(24,y,24+256*10);
            }
        }
        if(*
c==13&&para==0)
        {
            
a[max]=41;
            
mohasebe(-1);
            
printf("%d",adad[0]);
        }
        if((*
c==8)&&(k==0)&&(nomber!=0))
            
backspase();
        
//printf("%d",*c);
        
benevis();
        
por(23,25,219+256*9);
        if(
avval!=0)
            
por(23,25,17+256*4);
        
por(23,50,219+256*9);
        if(
avval+23<max)
            
por(23,50,16+256*4);
        
k=FUNC(c);
    }

با تشکر.
(آخرین ویرایش در این ارسال: ۲۹-بهمن-۱۳۸۶, ۱۹:۵۱:۴۶، توسط misaq.)
۱۷-بهمن-۱۳۸۶, ۱۴:۴۵:۵۷
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #2
RE: ماشین حساب
شما بهتره سری به این موضوع قدیمی سایت بزنی . موضوعش همینه . این روشی که شما استفاده کردی بشدت طولانی و ناکارآمد هست . شما باید از پشته استفاده کنی . لینک زیر رو مطالعه کن :

http://forum.iranled.com/showthread.php?tid=2672

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۱۷-بهمن-۱۳۸۶, ۱۵:۱۴:۳۶
ارسال‌ها
پاسخ
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #3
RE: ماشین حساب
سلام خدمت آقاي 2003 و بقيه ي دوستان.
والا از اون روش پشته ها و stackبا اين كه استادمونم همينو گفته بود چيزي نفهميدم و استفاده نكردم.
همون روش خودمو ادامه دادم(همون طولاني و به شدت نا كارامده) كه به شدت به كارم اومد ولي سال بالاييهامون بهم گفتن اين روش از نظر رياضي ثابت نشده(روش من) گفتن مي شه مثالي زد كه ماشين حساب اشتباه كنه ولي هر مثالي زدن درست كار كرد!!!!!!!!!!!
حالا اگه مي شه شما يه نگاه بندازيد ببينيد مشكلي داره يا نه ؟اگه داشت همين جا بنويسيد خيلي ممنون.
اين يكي پرانتز هم داره.sin,cos,tg و توان هم داره.
چه جوري مي شه وسط كد زد؟ دستي مي زنم
كد:
کد:
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
int k,a[1000],y=26,avval=0,nomber=0,insert=0,max=0,amalgar[100];
int first=0,end=0,pabaz[100],pabas[100];
int x=0,q=0,w=0,i=0,para=0;
int sabet[100],counter=-1,dotshomar=0;
int hyp=0;
int mos=0;
double adad[100],pi=3.141592653589;
unsigned short int far *screen=(unsigned short int far*) 0xb8000000;
char *c;
int FUNC(char *c)
{
    *c=getch();
    if(*c==0)
    {
        *c=getch();
        return 1;
    }
    else
        return 0;
}
void por(int i,int j,int color)
{
    screen[i*80+j]=color;
}
double behsaz(double r)
{
    if(r>359)
        r-=360;
    else
        r+=360;
    if(r>360||r<0)
        behsaz(r);
    return r;
}
double Mcosinus(double p)
{
    if(p>359||p<1)
        p=behsaz(p);
    double ans=cos((p/180)*pi);
    return ans;
}
double Mtangant(double p)
{
    if(p>359||p<1)
        p=behsaz(p);
    double ans=tan((p/180)*pi);
    return ans;
}
double Msinus(double p)
{
    if(p>359||p<1)
        p=behsaz(p);
    double ans=sin((p/180)*pi);
    return ans;
}
void backspase()
{
    if(max!=0)
        max--;
    for(int i=nomber;i<1000;i++)
        a[i-1]=a[i];
    nomber--;
    if(avval>0)
        avval--;
    else
    {
        por(24,y,219+256*7);
        por(24,y-1,10*256+24);
        y--;
    }
}
void harfgozar()
{
    for(int i=999;i>nomber;i--)
        a[i]=a[i-1];
    max++;
    a[nomber]=*c;
    if(y==50)
        y=49;
    if(a[nomber+1]==0)
        a[nomber+1]=32;
}
void jadid()
{
    for(int i=0;i<50;i++)
        for(int j=0;j<80;j++)
            if (j>25&&j<50&&i<30&&i>20)
                if(i!=23)
                    por(i,j,219+256*7);
                else
                    por(i,j,219+256*16);
            else
                por(i,j,219+256*9);
    por(24,y,10*256+24);
    for(i=0;i<100;i++)
    {
        amalgar[i]=0;
        adad[i]=0;
        pabaz[i]=0;
        pabas[i]=0;
    }
    pabaz[-1]=0;
    for(i=0;i<1000;i++)
        a[i]=0;
}
void sinhyp()
{
    a[nomber]=115;
    a[nomber+1]=105;
    a[nomber+2]=110;
    a[nomber+3]=104;
    a[nomber+4]=40;
    para++;
    nomber+=5;
    max+=5;
}

void tangant()
{
    a[nomber]=116;
    a[nomber+1]=97;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
}
void sinus()
{
    a[nomber]=115;
    a[nomber+1]=105;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
}
void cosinus()
{
    a[nomber]=99;
    a[nomber+1]=111;
    a[nomber+2]=115;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
}
double aashar()
{
    int tavan=0;
    double ans=0;
    while(a[i+1]!=41&&a[i+1]!=42&&a[i+1]!=43&&a[i+1]!=45&&a[i+1]!=47)
    {
        i++;
        ans=10*ans+a[i]-48;
        tavan--;
    }
    return ans*pow(10,tavan);
}
double mohasebe(double m)
{
    i=m+1;
    while(a[i]!=41)
    {
        if(a[i]==99)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i);
            adad[x]=Mcosinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        if(a[i]==115)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i);
            adad[x]=Msinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        if(a[i]==116)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i);
            adad[x]=Mtangant(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        while((a[i]>47&&a[i]<59)||a[i]==46)
        {
            if(a[i]!=46)
            {
                adad[x]=10*adad[x]+a[i]-48;
                i++;
            }
            else
            {
            adad[x]=adad[x]+aashar();
            i++;
            }
        }
        while((a[i]<48||a[i]==94)&&(a[i]!=0&&a[i]!=41))
        {
            if(a[i]!=40)
                amalgar[x]=a[i];
            else
            {
                if(adad[x]!=0)
                    x++;
                counter++;
                sabet[counter]=x;
                adad[x]=mohasebe(i);
                x=sabet[counter];
                counter--;
            }
            i++;
        }
        x++;
    }
    if (counter<0)
        sabet[counter]=0;
    for(int i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==94)
        {
            adad[i1]=pow(adad[i1],adad[i1+1]);
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==42)
        {
            adad[i1]=adad[i1]*adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==47)
        {
            adad[i1]=adad[i1]/adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==45)
        {
            adad[i1]=adad[i1]-adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==43)
        {
            adad[i1]=adad[i1]+adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    x--;
    return(adad[x]);
}
void benevis()
{
    for(int i=0;i<24;i++)
        por(23,i+26,a[i+avval]+256*4);
}
void main()
{
    a[-1]=40;
    int lk=0;
    jadid();
    int k=FUNC(c);
    while(*c!=27)
    {
        if((*c>47&&*c<59&&lk!=41)||(*c==46&&dotshomar==0&&(lk>47&&lk<59))||((*c==42||*c==43||*c==47||*c==94)&&((lk>47&&lk<59)||lk==41))||
(*c==45&&lk!=46&&lk!=45&&lk!=42&&lk!=43&&lk!=47)||
(*c==40&&(lk==42||lk==43||lk==45||lk==47||lk==40||lk==0)||(*c==41&&((lk>47&&lk<59)||lk==41))&&(*c!=41||para>0)))
        {
            if(*c==40)
                para++;
            else
                if(*c==41)
                    para--;
                else
                    if(*c==46)
                        dotshomar++;
                    else
                        if((*c==42||*c==43||*c==45||*c==47)&&dotshomar==1)
                            dotshomar--;
            if(y>48)
                avval++;
            harfgozar();
            if(nomber<1000)
                nomber++;
            lk=*c;
            y++;
        }
        else if(*c==115)
            if(!hyp)
                sinus();
            else
                sinhyp();
        else if(*c==99)
                cosinus();
        else if(*c==116)
                tangant();
        else if(*c==104)
            hyp=1-hyp;
        if((*c==75)&&(k==1))
        {
            int ezafe=0;
            if(nomber>0)
                nomber--;
            if(y>26)
            {
                por(24,y,219+256*7);
                por(24,y-1,10*256+24);
                y--;
            }
            else
            {
                avval-=6;
                if(avval<0)
                {
                    ezafe=0-avval;
                    avval=0;
                }
                    por(24,y,219+256*7);
                y=y+5-ezafe;
                if(y<26)
                    y=26;
                por(24,y,24+256*10);
            }
        }
        if(*c==13&&para==0&&((lk>47&&lk<58)||(lk==41)))
        {
            a[max]=41;
            printf("%G",mohasebe(-1));
            a[max]=0;
        }
        if((*c==8)&&(k==0)&&(nomber!=0))
            backspase();
//printf("%d",*c);
        benevis();
        por(23,25,219+256*9);
        if(avval!=0)
            por(23,25,17+256*4);
        por(23,50,219+256*9);
        if(avval+23<max)
            por(23,50,16+256*4);
        k=FUNC(c);
    }
}
(آخرین ویرایش در این ارسال: ۲۲-بهمن-۱۳۸۶, ۱۳:۱۹:۱۷، توسط Mamad2003.)
۲۱-بهمن-۱۳۸۶, ۲۲:۲۸:۰۹
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #4
RE: ماشین حساب
دوستان شما کاملا درست فرمودند چون درستی عملکرد چینین چیزهایی ابتدا باید از نظر ریاضی اثبات بشن ( این بیشتر به مباحث آتوماتا مربوط میشه )
اولش بگو با چه کامپایلری کار میکنی ؟؟

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۲-بهمن-۱۳۸۶, ۰۰:۵۵:۳۵
ارسال‌ها
پاسخ
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #5
RE: ماشین حساب
زير فوق ديپلم بگو كامپايلر چيه؟
اگه منظور شما نوع سي هست با ++turbo cكار مي كنم
۲۲-بهمن-۱۳۸۶, ۱۱:۵۵:۵۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: ماشین حساب
کامپایلر برنامهایه که کد شما رو به زبانهای قابل فهم برای کامپیوتر مثل اسمبلی و زبان ماشین میکنه
۲۲-بهمن-۱۳۸۶, ۱۲:۰۴:۲۴
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #7
RE: ماشین حساب
خب من برنامه شما رو اجرا کردم . همونطور که انتظار میرفت در مواردی که باید سیستم بطور داخلی از پشته استفاده کنه ، برنامه شما اشتباه عمل میکرد . یکی از مواردی که وجود پشته رو الزامی میکنه قدرت تشخیص درست تقدم و ترتیب عملگرهاست . متاسفانه برنامه شما به درستی این رو تشخیص نمیده و اشتباه عمل میکنه .
اولین مثال ساده ای که من زدم این بود :

کد:
-(2*8)

برنامه شما جواب 16 میده که به وضوح مشخصه جواب درست نیست !

مثال بعدی کمی پیچیده تر بود ولی عملکرد برنامه شما همونطور اشتباه بود :

کد:
-(-(3+7)+(3*2))

طبق اصول تقدم و ترتیب عملگرها ، برنامه شما باید محاسبه رو از داخلی ترین پرانتز و از سمت چپ شروع کنه ( اینجاست که پشته به کمک شما باید بیاد و عملگرهای قبلی رو نگه داری کنه تا برنامه شما اونها رو برای محاسبه فراموش نکنه )
پس طبق این اصل ابتدا 3+7 باید محاسبه بشه و بعد منهای پشت اون اثر بکنه که جوابش میشه منهای 10 . حالا پرانتز بعدی یعنی 3*2 باید عمل کنه که میشه 6 و باید با جواب قبلی جمع بشه که میشه منهای 4 . در مرحله آخر ، اولین منها از سمت چپ عمل میکنه و جواب نهایی میشه عدد 4 !!
متاسفانه برنامه شما جواب 16 میده که کاملا اشتباهه .

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۲-بهمن-۱۳۸۶, ۱۳:۱۸:۲۷
ارسال‌ها
پاسخ
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #8
RE: ماشین حساب
بازم سلام
22 بهمن سالروز غرورآفرین پیروزی انقلاب اسلامی ایران بر همگی مبارک باد.
خیلی ممنون از راهنماییتون
ولی بازم stackبه کمکم نیومد به همون روش قبلی ادامه دادم حل شد
این یکی توابع آرکی و همپربلیک و ریشه گیری هم داره.
منون می شم اگه بازم چیزی به ذهنتون رسید راهنماییم کنید
کد:
کد:
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
int k,a[1000],y=26,avval=0,nomber=0,insert=0,max=0,amalgar[100];
int first=0,end=0,pabaz[100],pabas[100];
int x=0,q=0,w=0,i=0,para=0;
int sabet[100],counter=-1,dotshomar=0;
int hyp=0,virg=0,i2=0;
int error=0,tab=0,lk=0;
int rad=0;
double nem[100][2];
double adad[100],pi=3.141592653589;
unsigned short int far *screen=(unsigned short int far*) 0xb8000000;
char *c;
int FUNC(char *c)
{
    *c=getch();
    if(*c==0)
    {
        *c=getch();
        return 1;
    }
    else
        return 0;
}
void por(int i,int j,int color)
{
    screen[i*80+j]=color;
}
void benevis()
{
    for(int i=0;i<24;i++)
        por(23,i+26,a[i+avval]+256*4);
}
double behsaz(double r)
{
    if(!rad)
    {
        if(r>359)
            r-=360;
        else
            r+=360;
        if(r>360||r<0)
            behsaz(r);
        return r;
    }
    else
    {
        if(r>2*pi)
            r-=(2*pi);
        else
            r+=(2*pi);
        if(r>2*pi||r<0)
            behsaz(r);
        return(r);
    }
}
void tangant()
{
    a[nomber]=116;
    a[nomber+1]=97;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
void sinus()
{
    a[nomber]=115;
    a[nomber+1]=105;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
void cosinus()
{
    a[nomber]=99;
    a[nomber+1]=111;
    a[nomber+2]=115;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
void jazr()
{
    a[nomber]=115;
    a[nomber+1]=113;
    a[nomber+2]=114;
    a[nomber+3]=116;
    a[nomber+4]=40;
    para++;
    nomber+=5;
    max+=5;
}
double Mjazr(double q1,double q2)
{
    double ans1=0;
    while(pow(ans1,q1)<q2)
        ans1=ans1+0.0001;
    return (ans1-0.0001);
}
double Mcosinus(double p)
{
    //if(!rad)
    if(p>359||p<1)
        p=behsaz(p);
    double ans=cos((p/180)*pi);
    return ans;
}
double Mtangant(double p)
{
    if(p>359||p<1)
        p=behsaz(p);
    double ans=tan((p/180)*pi);
    return ans;
}
double Msinus(double p)
{
    if(p>359||p<1)
        p=behsaz(p);
    double ans=sin((p/180)*pi);
    return ans;
}
void backspase()
{
    if(max!=0)
        max--;
    for(int i=nomber;i<1000;i++)
        a[i-1]=a[i];
    nomber--;
    if(avval>0)
        avval--;
    else
    {
        por(24,y,219+256*7);
        por(24,y-1,10*256+24);
        y--;
    }
}
void harfgozar()
{
    for(int i=999;i>nomber;i--)
        a[i]=a[i-1];
    max++;
    a[nomber]=*c;
    if(y==50)
        y=49;
    if(a[nomber+1]==0)
        a[nomber+1]=32;
}
void jadid()
{
    for(int i=0;i<50;i++)
        for(int j=0;j<80;j++)
            if (j>25&&j<50&&i<30&&i>20)
                if(i!=23)
                    por(i,j,219+256*7);
                else
                    por(i,j,219+256*16);
            else
                por(i,j,219+256*9);
    por(24,y,10*256+24);
    for(i=0;i<100;i++)
    {
        amalgar[i]=0;
        adad[i]=0;
        pabaz[i]=0;
        pabas[i]=0;
    }
    pabaz[-1]=0;
    for(i=0;i<1000;i++)
        a[i]=0;
}
void arc()
{
    a[nomber]=97;
    a[nomber+1]=114;
    a[nomber+2]=99;
    nomber+=3;
    max+=3;
    benevis();
    while(*c!=115&&*c!=116&&*c!=99)
        k=FUNC(c);
    if(*c==115)
        sinus();
    else if(*c==116)
        tangant();
    else if(*c==99)
        cosinus();
}
void sinhyp()
{
    a[nomber]=115;
    a[nomber+1]=105;
    a[nomber+2]=110;
    a[nomber+3]=104;
    a[nomber+4]=40;
    para++;
    nomber+=5;
    max+=5;
    lk=40;
}
void coshyp()
{
    a[nomber]=99;
    a[nomber+1]=111;
    a[nomber+2]=115;
    a[nomber+3]=104;
    a[nomber+4]=40;
    para++;
    nomber+=5;
    max+=5;
    lk=40;
}
void tanhyp()
{
    a[nomber]=116;
    a[nomber+1]=97;
    a[nomber+2]=110;
    a[nomber+3]=104;
    a[nomber+4]=40;
    para++;
    nomber+=5;
    max+=5;
    lk=40;
}
void tabe()
{
a[nomber]=102;
a[nomber+1]=40;
a[nomber+2]=120;
a[nomber+3]=41;
a[nomber+4]=61;
tab++;
max+=5;
nomber+=5;
}
double aashar()
{
    int tavan=0;
    double ans=0;
    while(a[i+1]>47&&a[i+1]<59)
    {
        i++;
        ans=10*ans+a[i]-48;
        tavan--;
    }
    return ans*pow(10,tavan);
}
double mohasebe(int m,int n)
{
    i=m+1;
    if(a[i]==45&&a[i+1]==40)
    {
        i++;
        adad[x]=-1*(mohasebe(i,41));
        i++;
    }
    while(a[i]!=n&&!error)
    {
        if(a[i]==99&&a[i+3]!=104)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Mcosinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==99&&a[i+3]==104)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=cosh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==115&&a[i+3]==40)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Msinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i+3]==104&&a[i]==115)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=sinh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i+3]==116&&a[i]==115)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,44);
            x++;
            adad[x]=mohasebe(i,41);
            adad[x-1]=Mjazr(adad[x-1],adad[x]);
            adad[x]=0;
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==116&&a[i+3]!=104)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Mtangant(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==116&&a[i+3]==104)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=tanh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==97&&a[i+3]==115)
        {
            i+=6;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            if(adad[x]>1||adad[x]<-1)
                error=1;
            else
                adad[x]=(asin(adad[x])/pi)*180;
            if(!error)
            {
                x=sabet[counter];
                counter--;
                i++;
            }
        }
        else if(a[i]==97&&a[i+3]==99)
        {
            i+=6;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            if(adad[x]>1||adad[x]<-1)
                error=1;
            else
                adad[x]=(acos(adad[x])/pi)*180;
            if(!error)
            {
                x=sabet[counter];
                counter--;
                i++;
            }
        }
        else if(a[i]==97&&a[i+3]==116)
        {
            i+=6;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=(atan(adad[x])/pi)*180;
            x=sabet[counter];
            counter--;
            i++;
        }
        while(((a[i]>47&&a[i]<59)||a[i]==46||a[i]==120)&&!error)
        {
            if(a[i]!=46&&a[i]!=120)
            {
                adad[x]=10*adad[x]+a[i]-48;
                i++;
            }
            else if(a[i]==46)
            {
                adad[x]=adad[x]+aashar();
                i++;
            }
            else
            {
                adad[x]=i2;
                i++;
                nem[i2][0]=i2;
            }
        }
        while((a[i]<48||a[i]==94)&&a[i]!=0&&a[i]!=n)
        {
            if(a[i]!=40)
                amalgar[x]=a[i];
            else
            {
                if(adad[x]!=0)
                    x++;
                counter++;
                sabet[counter]=x;
                adad[x]=mohasebe(i,41);
                x=sabet[counter];
                counter--;
            }
            i++;
        }
        x++;
     }
    if (counter<0)
        sabet[counter]=0;
    for(int i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==94)
        {
            adad[i1]=pow(adad[i1],adad[i1+1]);
            for(int j=i1;j<x;j++)
                     adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==42)
        {
            adad[i1]=adad[i1]*adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==47)
        {
                adad[i1]=adad[i1]/adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==45)
        {
            adad[i1]=adad[i1]-adad[i1+1];
                for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
          if(amalgar[i1]==43)
        {
            adad[i1]=adad[i1]+adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    if(x>0)
        x--;
    return(adad[x]);
}
void main()
{
    a[-1]=40;
    jadid();
    int k=FUNC(c);
    while(*c!=27)
    {
        if((*c>47&&*c<59&&lk!=41)
||(*c==120&&tab&&(lk==42||lk==43||lk==45||lk==47||lk==94||lk==40||lk==0))
||(*c==44&&((lk>47&&lk<59)||lk==41))||(*c==46&&dotshomar==0&&(lk>47&&lk<59))||
((*c==42||*c==43||*c==47||*c==94)&&((lk>47&&lk<59)
||lk==41||lk==120))||(*c==45&&lk!=46&&lk!=45&&lk!=42&&lk!=43&&lk!=47)
||(*c==40&&(lk==42||lk==43||lk==45||lk==47||lk==40||lk==0)
||(*c==41&&((lk>47&&lk<59)||lk==41||lk==120))&&(*c!=41||para>0)))
        {
            if(*c==40)
                para++;
            else if(*c==41)
                para--;
            else if(*c==46)
                dotshomar++;
            else if((*c==42||*c==43||*c==45||*c==47)&&dotshomar==1)
                 dotshomar--;
            if(y>48)
                  avval++;
            harfgozar();
            if(nomber<1000)
                nomber++;
            lk=*c;
            y++;
        }
        else if(*c==115)
            if(!hyp)
                sinus();
            else
                sinhyp();
        else if(*c==99)
            if(!hyp)
                cosinus();
            else
                coshyp();
        else if(*c==116)
            if(!hyp)
                tangant();
            else
                tanhyp();
        else if(*c==104)
            hyp=1-hyp;
        else if(*c==97)
            arc();
        else if(*c==106)
        {
            lk=40;
            jazr();
            virg++;
        }
        else if(*c==102)
            tabe();
        else if (*c==114)
            rad=1-rad;
        if((*c==75)&&(k==1))
        {
                int ezafe=0;
            if(nomber>0)
                nomber--;
            if(y>26)
            {
                por(24,y,219+256*7);
                por(24,y-1,10*256+24);
                y--;
            }
            else
            {
                avval-=6;
                     if(avval<0)
                {
                    ezafe=0-avval;
                    avval=0;
                }
                    por(24,y,219+256*7);
                y=y+5-ezafe;
                if(y<26)
                          y=26;
                por(24,y,24+256*10);
            }
        }
        if(*c==13&&para==0&&!tab&&((lk>47&&lk<58)||(lk==41)))
        {
            a[max]=41;
            printf("%G",mohasebe(-1,41));
            a[max]=0;
        }
        else if(*c==13&&tab&&para==0&&((lk>47&&lk<58)||(lk==41)))
        {
            a[max]=41;
            for(i2=0;i2<100;i2++)
                nem[i2][1]=mohasebe(4,41);
            a[max]=0;
        }
        if((*c==8)&&(k==0)&&(nomber!=0))
                backspase();
//printf("%d",*c);
          benevis();
        por(23,25,219+256*9);
        if(avval!=0)
            por(23,25,17+256*4);
        por(23,50,219+256*9);
        if(avval+23<max)
            por(23,50,16+256*4);
          k=FUNC(c);
    }
}
(آخرین ویرایش در این ارسال: ۲۳-بهمن-۱۳۸۶, ۱۷:۵۰:۰۴، توسط Mamad2003.)
۲۳-بهمن-۱۳۸۶, ۱۳:۵۶:۰۱
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #9
RE: ماشین حساب
اشکال در نظر نگرفتن ترتیب عملگر ها هنوز وجود داره :

کد:
2+6/3*5

برنامه شما اینجا باید ابتدا عمل تقسیم رو انجام بده بعد عمل ضرب رو چون تقدم عملگر های تقسیم و ضرب یکی هست اما ترتیب اجرا شدن اونها از چپ به راست هست . در نتیجه جواب درست باید 12 بشه . برنامه شما ابتدا عمل ضرب رو انجام میده بعد عمل تقسیم رو که جواب بدست اومده میشه 2.4 که خوب اشتباهه !

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
(آخرین ویرایش در این ارسال: ۲۳-بهمن-۱۳۸۶, ۱۸:۰۵:۲۵، توسط Mamad2003.)
۲۳-بهمن-۱۳۸۶, ۱۸:۰۴:۵۹
ارسال‌ها
پاسخ
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #10
RE: ماشین حساب
بازم سلام
تقریبا همه ی محاسباتی ها رو درست کردم
الان علاوه بر کارهای قبلی قابلیت رسم نمودار هم داره
ممنون می شم اگه کسی بتونه نمودارشو درست کنه.
برای رفتن به قسمت نمودار از کلید fاستفاده کنید.
تابع نمودار نمودارهای معمولی رو رسم می کنه ولی با نمودار هایی مثل tanx,1/tanx,1/xیه سری مشکلات داره.چون نقاط رو با line به هم وصل می کنه یه سری خطوط اضافی (مجانبها) هم می کشه که نمودارو خرلب می کنه البته اونو درست کردم.ولی حالا توابع x^x یا tanx^tanxرو اشتباه می کنه اونم درست کردم ولی خطوط نمودار خراب شد(به اون دوتا شرطی که تو تابع نمودار کاری نمی کنن دقت کنید اگه فعال بشن یه سری خطها رسم نمی شن)
شاید هر سه تا شرطم الگوریتمی خراب باشه
اگه می شه یه کد مناسب بزنید که کار کنه.يادم رفت بگم. براي توابع مثلثاتي قبل از رسم نمودار كليد rرو بزنيد تا از حالت درجه به حالت راديان تبديل بشه.
کد:
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
int k,a[1000],y=26,avval=0,nomber=0,insert=0,max=0,amalgar[100];
int X=320,Y=240,D=25;
int first=0,end=0,pabaz[100],pabas[100];
int x=0,q=0,w=0,i=0,para=0;
int sabet[100],counter=-1,dotshomar=0;
int hyp=0,virg=0,i2=0;
int error=0,tab=0,lk=0;
int rad=0;
int ER[640];
double pi=M_PI;
double nem[640][2];
double adad[100],shib=0,shib2=0;
unsigned short int far *screen=(unsigned short int far*) 0xb8000000;
char *c;
int FUNC(char *c)
{
    *c=getch();
    if(*c==0)
    {
        *c=getch();
        return 1;
    }
    else
        return 0;
}
void nemoodar()
{
    int gdriver = DETECT, gmode, errorcode;
     initgraph(&gdriver, &gmode, "");
     errorcode = graphresult();
     if (errorcode != grOk)
     {
        printf("Graphics error: %s\n", grapherrormsg(errorcode));
        printf("Press any key to halt:");
        getch();
        exit(1);
     }
    *c=0;
    while(*c!=13)
    {
        clrscr();
        setcolor(1);
        line(0,Y,639,Y);
        line(X,0,X,480);
        setcolor(3);
        for(int h=0;h<639;h++)
            {
            shib=((Y-D*nem[h+1][1])-(Y-D*nem[h][1]))/((X+D*nem[h+1][0])-(X+D*nem[h][0]));
            shib2=((Y-D*nem[h+2][1])-(Y-D*nem[h+1][1]))/((X+D*nem[h+2][0])-(X+D*nem[h+1][0]));
            if(ER[h]&&ER[h+1]&&ER[h-1])
                //if(Y-D*nem[h][1]>0&&Y-D*nem[h][1]<480&&Y-D*nem[h+1][1]>0&&Y-D*nem[h+1][1]<480)
                    //if(Y-D*nem[h][1]-Y+D*nem[h+1][1]>0||(Y-D*nem[h][1]-Y+D*nem[h+1][1]<0&&(nem[h][1]-nem[h-1][1]<0)))
                        if(shib*shib2>0)
                        line((X+D*nem[h][0]),(Y-D*nem[h][1]),(X+D*nem[h+1][0]),(Y-D*nem[h+1][1]));
        }
        k=FUNC(c);
        if(*c==75)
            X+=10;
        if(X>640)
            X=640;
        if(*c==72)
            Y+=10;
        if(Y>480)
            Y=480;
        if(*c==77)
            X-=10;
        if(X<0)
            X=0;
        if(*c==80)
            Y-=10;
        if(Y<0)
            Y=0;
        if(*c==43)
            D++;
        if(D>100)
            D=100;
        if(*c==45)
            D--;
        if(D<=12)
            D=12;
     }
     closegraph();
}
void por(int i,int j,int color)
{
    screen[i*80+j]=color;
}
void benevis()
{
    for(int i=0;i<24;i++)
        por(23,i+26,a[i+avval]+256*4);
}
double behsaz(double r)
{
    if(!rad)
    {
        if(r>359)
            r-=360;
        else
            r+=360;
        if(r>360||r<0)
            behsaz(r);
        return r;
    }
    else
    {
        if(r>2*pi)
            r-=(2*pi);
        else
            r+=(2*pi);
        if(r>2*pi||r<0)
            behsaz(r);
        return(r);
    }
}
void LOG()
{
    a[nomber]=108;
    a[nomber+1]=111;
    a[nomber+2]=103;
    a[nomber+3]=40;
    nomber+=4;
    max+=4;
    para++;
    lk=40;
}
void tangant()
{
    a[nomber]=116;
    a[nomber+1]=97;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
void sinus()
{
    a[nomber]=115;
    a[nomber+1]=105;
    a[nomber+2]=110;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
void cosinus()
{
    a[nomber]=99;
    a[nomber+1]=111;
    a[nomber+2]=115;
    a[nomber+3]=40;
    para++;
    nomber+=4;
    max+=4;
    lk=40;
}
double Mjazr(double q1,double q2)
{
    double ans1=0;
    if(q2>0)
    {
        while(pow(ans1,q1)<q2)
            ans1=ans1+0.00001;
        return (ans1-0.00001);
    }
    else if(q2<0)
    {
        while(pow(ans1,q1)>q2)
            ans1=ans1-0.00001;
        return (ans1);
    }
    else return 0;
}
double Mlog(double q1,double q2)
{
    if(q1<=0||q2<0)
        {error=1;return 0;}
    else
        return log10(q1)/log10(q2);

}
double Mcosinus(double p)
{
    if(!rad)
    {
        if(p>359||p<1)
            p=behsaz(p);
        if(p!=90&&p!=270)
            return cos((p/180)*pi);
        else return 0;
    }
    else
    {
        if(p>2*pi||p<0)
            p=behsaz(p);
        return cos(p);
    }
}
double Mtangant(double p)
{
    if(!rad)
    {
        if(p>359||p<1)
            p=behsaz(p);
        return tan((p/180)*pi);
    }
    else
    {
        if(p>2*pi||p<0)
            p=behsaz(p);
        return tan(p);
    }
}
double Msinus(double p)
{
    if(!rad)
    {
        if(p>359||p<1)
            p=behsaz(p);
        if(p!=360&&p!=180)
            return sin((p/180)*pi);
        else
            return 0;
    }
    else
    {
        if(p>2*pi||p<0)
            p=behsaz(p);
        return sin(p);
    }
}
void backspase()
{
    if(max!=0)
        max--;
    for(int i=nomber;i<1000;i++)
        a[i-1]=a[i];
    nomber--;
    if(avval>0)
        avval--;
    else
    {
        por(24,y,219+256*7);
        por(24,y-1,10*256+24);
        y--;
    }
}
void harfgozar()
{
    for(int i=999;i>nomber;i--)
        a[i]=a[i-1];
    max++;
    if(*c!=112)
        a[nomber]=*c;
    else a[nomber]=227;
    if(y==50)
        y=49;
    if(a[nomber+1]==0)
        a[nomber+1]=32;
}
void jadid()
{
    for (int i=0;i<640;i++)
            ER[i]=0;
    for(i=0;i<50;i++)
        for(int j=0;j<80;j++)
            if (j>25&&j<50&&i<30&&i>20)
                if(i!=23)
                    por(i,j,219+256*7);
                else
                    por(i,j,219+256*16);
            else
                por(i,j,219+256*9);
    por(24,y,10*256+24);
    for(i=0;i<100;i++)
    {
        amalgar[i]=0;
        adad[i]=0;
    }
    nomber=i=max=0;
    pabaz[-1]=0;
    for(i=0;i<1000;i++)
        a[i]=0;
}
void arc()
{
    a[nomber]=97;
    a[nomber+1]=114;
    a[nomber+2]=99;
    nomber+=3;
    max+=3;
    benevis();
    while(*c!=115 && *c!=116&&*c!=99)
        k=FUNC(c);
    if(*c==115)
        sinus();
    else if(*c==116)
        tangant();
    else if(*c==99)
        cosinus();
}
void hyper()
{
    if(*c==115)
        sinus();
    else if(*c==99)
        cosinus();
    else if(*c==116)
        tangant();
    a[nomber-1]=104;
    a[nomber]=40;
    nomber++;
    max++;
}
void tabe()
{
    a[nomber]=102;
    a[nomber+1]=40;
    a[nomber+2]=120;
    a[nomber+3]=41;
    a[nomber+4]=61;
    tab++;
    max+=5;
    nomber+=5;
}
double aashar()
{
    int tavan=0;
    double ans=0;
    while(a[i+1]>47&&a[i+1]<59)
    {
        i++;
        ans=10*ans+a[i]-48;
        tavan--;
    }
    return ans*pow(10,tavan);
}
double POW(double q1,double q2)
{
    double power=0;
    if(q1<0&&q2-floor(q2)!=0)
    {
        error=1;
        power=0;
    }
    else if(q1==0&&q2==0)
    {
        error=1;
        power=1;
    }
    else if(pow(q1,q2)>999999)
    {
        error=1;
        power=0;
    }
    else
        power=pow(q1,q2);
    return power;
}
double mohasebe(int m,int n)
{
    i=m+1;
    if(a[i]==45&&a[i+1]==40)
    {
        i++;
        adad[x]=-1*(mohasebe(i,41));
        i++;
    }
    while(a[i]!=n&&!error)
    {
        if(a[i]==99&&a[i+3]!=104)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Mcosinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==99&&a[i+3]==104)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=cosh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==115&&a[i+3]==40)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Msinus(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i+3]==104&&a[i]==115)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=sinh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==251)
        {
            i++;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,44);
            x++;
            adad[x]=mohasebe(i,41);
            adad[x-1]=Mjazr(adad[x-1],adad[x]);
            adad[x]=0;
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==108)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,44);
            x++;
            adad[x]=mohasebe(i,41);
            adad[x-1]=Mlog(adad[x-1],adad[x]);
            adad[x]=0;
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==116&&a[i+3]!=104)
        {
            i+=3;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=Mtangant(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==116&&a[i+3]==104)
        {
            i+=4;
            counter++;
            sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            adad[x]=tanh(adad[x]);
            x=sabet[counter];
            counter--;
            i++;
        }
        else if(a[i]==97&&a[i+3]==115)
        {
            i+=6;
            counter++;
            //sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            if(adad[x]>1||adad[x]<-1)
                error=1;
            else
            {
                if(!rad)
                    adad[x]=(asin(adad[x])/pi)*180;
                else
                    adad[x]=asin(adad[x]);
            }
            if(!error)
            {
                //x=sabet[counter];
                counter--;
                i++;
            }
        }
        else if(a[i]==97&&a[i+3]==99)
        {
            i+=6;
            counter++;
            //sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            if(adad[x]>1||adad[x]<-1)
                error=1;
            else
                {
                if(!rad)
                    adad[x]=(acos(adad[x])/pi)*180;
                else
                    adad[x]=acos(adad[x]);
                }
            if(!error)
            {
                //x=sabet[counter];
                counter--;
                i++;
            }
        }
        else if(a[i]==97&&a[i+3]==116)
        {
            i+=6;
            counter++;
            //sabet[counter]=x;
            adad[x]=mohasebe(i,41);
            if(!rad)
                adad[x]=(atan(adad[x])/pi)*180;
            else
                adad[x]=atan(adad[x]);
            //x=sabet[counter];
            counter--;
            i++;
        }
        while(((a[i]>47&&a[i]<59)||a[i]==46||a[i]==120||a[i]==227||a[i]==101)&&!error)
        {
            if(a[i]!=46&&a[i]!=120&&a[i]!=227&&a[i]!=101)
            {
                adad[x]=10*adad[x]+a[i]-48;
                i++;
            }
            else if(a[i]==46)
            {
                adad[x]=adad[x]+aashar();
                i++;
            }
            else if(a[i]==120)
            {
                if(i2!=-320)
                    adad[x]=nem[i2+319][0]+0.1;
                else
                    adad[x]=i2/10;
                if(i2==0)
                    adad[x]=0;
                i++;
                nem[i2+320][0]=adad[x];
            }
            else if(a[i]==227)
            {
                adad[x]=M_PI;
                i++;
            }
            else if(a[i]==101)
            {
                adad[x]=M_E;
                i++;
            }
        if(x>1000)
            error=1;
        }
        while((a[i]<48||a[i]==94)&&a[i]!=0&&a[i]!=n)
        {
            if(a[i]!=40)
                amalgar[x]=a[i];
            else
            {
                if(adad[x]!=0)
                    x++;
                counter++;
                sabet[counter]=x;
                adad[x]=mohasebe(i,41);
                x=sabet[counter];
                counter--;
            }
            i++;
        }
        x++;
     }
    if (counter<0)
        sabet[counter]=0;
    for(int i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==94)
        {
            adad[i1]=POW(adad[i1],adad[i1+1]);
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==42)
        {
            adad[i1]=adad[i1]*adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==47)
        {
                if(adad[i1+1]!=0)
                    adad[i1]=adad[i1]/adad[i1+1];
                else
                    error=1;
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
        if(amalgar[i1]==45)
        {
            adad[i1]=adad[i1]-adad[i1+1];
                for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    for(i1=sabet[counter];i1<x;i1++)
            if(amalgar[i1]==43)
        {
            adad[i1]=adad[i1]+adad[i1+1];
            for(int j=i1;j<x;j++)
                adad[j+1]=adad[j+2];
            for(j=i1;j<x;j++)
                amalgar[j]=amalgar[j+1];
            x--;
            i1--;
        }
    if(x>0)
        x--;
    if(!error)
        return adad[x];
    else
        return 0;
}
void main()
{
    int paravirg=0;
    a[-1]=40;
    jadid();
    int k=FUNC(c);
    while(*c!=27)
    {
        if((*c>47&&*c<59&&lk!=41&&lk!=120&&lk!=112&&lk!=101)||(*c==112&&(lk==40||lk==42||lk==43||lk==45||lk==47||lk==94||lk==0||lk==44))
||(*c==120&&tab&&(lk==42||lk==43||lk==45||lk==47||lk==94||lk==40||lk==0||lk==44))||(*c==44&&virg!=0&&((lk>47&&lk<59)
||lk==41||lk==101||lk==112||lk==120))||(*c==46&&dotshomar==0&&(lk>47&&lk<59))
||((*c==42||*c==43||*c==47||*c==94)&&((lk>47&&lk<59)||lk==41||lk==120||lk==112||lk==101))
||(*c==45&&lk!=46&&lk!=45&&lk!=42&&lk!=43&&lk!=47&&lk!=94)||
(*c==40&&(lk==42||lk==43||lk==45||lk==47||lk==40||lk==0||lk==94)
||(*c==101&&(lk==40||lk==42||lk==43||lk==44||lk==45||lk==47||lk==94||lk==0))
||(*c==41&&((lk>47&&lk<59)||lk==41||lk==120||lk==112||lk==101))&&(*c!=41||para>0)))
        {
            if(*c==40)
                para++;
            if(*c==41)
            {
                if(virg)
                    paravirg--;
                para--;
            }
            else if(*c==46)
                dotshomar++;
            else if((*c==42||*c==43||*c==45||*c==47)&&dotshomar==1)
                dotshomar--;
            else if(*c==44)
                virg--;
            lk=*c;
            if(y>48)
                    avval++;
            harfgozar();
            if(nomber<1000)
                nomber++;
            y++;
        }
        else if(*c==115)
            if(!hyp)
                sinus();
            else
                hyper();
        else if(*c==99)
            if(!hyp)
                cosinus();
            else
                hyper();
        else if(*c==116)
            if(!hyp)
                tangant();
            else
                hyper();
        else if(*c==104)
            hyp=1-hyp;
        else if(*c==97)
            arc();
        else if(*c==106)
        {
            lk=40;
            a[nomber]=251;
            a[nomber+1]=40;
            para++;
            max+=2;
            nomber+=2;
            virg++;
        }
        else if(*c==102)
            tabe();
        else if (*c==114)
            rad=1-rad;
        else if(*c==108)
        {
            LOG();
            virg++;
        }
        if((*c==75)&&(k==1))
        {
                int ezafe=0;
            if(nomber>0)
                nomber--;
            if(y>26)
            {
                por(24,y,219+256*7);
                por(24,y-1,10*256+24);
                y--;
            }
            else
            {
                avval-=6;
                     if(avval<0)
                {
                    ezafe=0-avval;
                    avval=0;
                }
                    por(24,y,219+256*7);
                y=y+5-ezafe;
                if(y<26)
                            y=26;
                por(24,y,24+256*10);
            }
        }
        if(*c==13&&para==0&&!tab&&!virg&&((lk>47&&lk<58)||lk==41||lk==112||lk==101))
        {
            end=1;
            a[max]=41;
                        gotoxy(25,25);
            double ans=mohasebe(-1,41);
            if(!error)
                printf("%G",ans);
            else
                printf("error!!!");
            a[max]=0;
        }
        if(*c==13&&tab&&!virg&&para==0&&((lk>47&&lk<58)||lk==41||lk==120||lk==112||lk==101))
        {
            end=1;
            a[max]=41;
            for(i2=-320;i2<320;i2++)
            {
                nem[i2+320][1]=mohasebe(4,41);
                    for(int j2=0;j2<100;j2++)
                                adad[j2]=0;
                if(error==1)
                {
                    ER[i2+320]=0;
                      //    nem[i2+320][0]=nem[i2+319][0];
                      //    nem[i2+320][1]=nem[i2+319][1];
                }
                else
                    ER[i2+320]=1;
                error=0;
            }
            a[max]=0;
            nemoodar();
        }
        if((*c==8)&&(k==0)&&(nomber!=0))
                backspase();
//printf("%d",*c);
            benevis();
        por(23,25,219+256*9);
        if(avval!=0)
            por(23,25,17+256*4);
        por(23,50,219+256*9);
        if(avval+23<max)
            por(23,50,16+256*4);
            k=FUNC(c);
            if(end)
            jadid();
    }
}
(آخرین ویرایش در این ارسال: ۲۹-بهمن-۱۳۸۶, ۲۲:۵۷:۲۴، توسط misaq.)
۲۹-بهمن-۱۳۸۶, ۱۹:۳۶:۵۱
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ساخت ماشین حساب مهندسی با قابلیت رسم نمودار ساده mojtaba pazouki 0 1,933 ۲۴-آبان-۱۳۹۳, ۲۰:۴۷:۴۲
آخرین ارسال: mojtaba pazouki
  ماشین حساب پیشرفته C javadrs 0 2,182 ۰۶-خرداد-۱۳۹۳, ۱۲:۵۶:۲۰
آخرین ارسال: javadrs
  سورس ماشین حساب به زبان c aleas 2 23,492 ۱۱-اسفند-۱۳۸۹, ۰۰:۰۵:۲۵
آخرین ارسال: aleas
  سورس کد ماشین حساب 5 1,670 ۳۰-مرداد-۱۳۸۶, ۲۲:۰۷:۱۸
آخرین ارسال: Guest
  سورس کد ماشین حساب Pasargad_mybb1.2_import13013 11 6,368 ۳۰-مرداد-۱۳۸۶, ۲۲:۰۷:۱۸
آخرین ارسال: ziamolki

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS