PDA

View Full Version : مشکل در کامپایل برنامه ماشین حساب



yas 92
سه شنبه 04 تیر 1392, 10:56 صبح
من برنامه ی ماشین حساب را به زبان C++‎نوشتم وقتی کامپایلش می کنم ایرادی نمی گیره ولی وقتی ران می کنم fatal error lNk1120می گیره.خواشن اگر کسی بلده کمکم کنه.متشکر:گریه:


#pragma once
//#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string>
#include <conio.h>
#include <stdlib.h>
using namespace std;
class operators{
public:
virtual float calculate(float,float=0);
};
class mainoperator:public operators{
char ch;
public:
virtual float calculate(float,float)=0;
};
class plus:public mainoperator{
public:
virtual float calculate(float a,float b){return a+b;}
};
class deduct:public mainoperator{
public:
virtual float calculate(float a,float b){return a-b;}
};
class multiplication:public mainoperator{
public:
virtual float calculate(float a,float b){return a*b;}
};
class division:public mainoperator{
public:
virtual float calculate(float a,float b){return a/b;}
};
class mathfunction:public operators{
//char name[4];
public:
virtual float calculate(float)=0;
};
class sin_f:public mathfunction{
public:
virtual float calculate(float a){return sin(a);}
};
class cos_f:public mathfunction{
public:
virtual float calculate(float a){return cos(a);}
};
class tan_f:public mathfunction{
public:
virtual float calculate(float a){return tan(a);}
};
class cot_f:public mathfunction{
public:
virtual float calculate(float a){return 1/tan(a);}
};
class log_f:public mathfunction{
public:
virtual float calculate(float a){return log(a);}
};
class power:public mathfunction{
public:
virtual float calculate(float a){return pow(a,2);}
};
class sqrt_f:public mathfunction{
public:
virtual float calculate(float a){return sqrt(a);}
};
class expression{
string s;
public:
virtual float value()=0;
expression *stringToexpression(string s);
friend ostream &operator<<( ostream& output, const expression & st){ output<<st.s;
return output;}
expression*exp(string c){
expression*e;
e->s=c;
return e;}
};
class leaf:public expression{
public:
virtual float value();
};
class number:public leaf{
const float n;
public:
number(float a):n(a){}
virtual float value(float n){return n;}
};
class variable:public leaf{
public:
virtual float value();
};
class branch:public expression{
operators *node;
expression *left,*right;
public:
branch(char n,expression*r=0,expression*l=0);
branch(char*,expression&r);
virtual float value(){
return node->calculate(left->value(),right->value());
}
};
branch::branch(char n,expression* r,expression* l){
right=r;
left=l;
if(n=='+')
node=new plus;
else if(n=='-')
node=new deduct;
else if(n=='*')
node=new multiplication;
else if(n=='/'){
node=new division;}
};
branch::branch(char*n,expression&r){
if(strcmp(n,"sin")==0)
node=new sin_f;
else if(strcmp(n,"cos")==0)
node=new cos_f;
else if(strcmp(n,"tan")==0)
node=new tan_f;
else if(strcmp(n,"cot")==0)
node=new cot_f;
else if(strcmp(n,"log")==0)
node=new log_f;
else if(strcmp(n,"sqrt")==0)
node=new sqrt_f;
else if(strcmp(n,"pow")==0)
node=new power;
}
expression *expression::stringToexpression(string s){
//expression*l1,*r1;
string l,r;
int g=0;
g=s.length();
char c=s[0];
if(s[0]=='('&&s[g-1]==')')
{
for(int i=0;i<g-1;i++)
s[i]=s[i+1];
s[g-1]='\0';
return stringToexpression(s);
}
int i=0,j=0,k=0,h=0,m=0,p=0;
while(c!='\0')
{
if((c=='+'||c=='-')&&j==0){
for(k=0;k<i;k++)
l[k]=s[k];
l[k+1]='\0';
//l1->exp(l);
for(k=i+1;s[k]!='\0';k++&&h++)
r[h]=s[k];
r[h+1]='\0';
//r1->exp(r);
m=1;
return new branch(c,stringToexpression(r),stringToexpression( l));
}
else if(c=='(')
{j=1;
i++;
c=s[i];
continue;}
else if(c==')')
{j=0;}
i++;
c=s[i];
}
if(m==0)
{
c=s[0];
while(c!='\0')
{
if((c=='*'||c=='/')&&j==0){
for(k=0;k<i;k++)
l[k]=s[k];
l[k+1]='\0';
//l1->exp(l);
for(k=i+1;s[k]!='\0';k++&&h++)
r[h]=s[k];
r[h+1]='\0';
//r1->exp(r);
return new branch(c,stringToexpression(r),stringToexpression( l));
}
else if(c=='(')
{j=1;
i++;
c=s[i];
continue;}
else if(c==')')
{j=0;}
i++;
c=s[i];
}
i=0;
}
else if(s[i]=='s')
{
if(s[i+1]=='i')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("sin",*stringToexpression(q));
}
else if(s[i+1]=='q')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("sqrt",*stringToexpression(q));
}
}
else if(s[i]=='c')
{
if(s[i+2]=='s')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("cos",*stringToexpression(q));
}
else if(s[i+2]=='t')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("cot",*stringToexpression(q));
}
}
else if(s[i]=='t')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("tan",*stringToexpression(q));
}
else if(s[i]=='l')
{
int l=0;
string q;
while(s[i]!=')')
{
q[l]=s[i+5];
l++;
}
return new branch("log",*stringToexpression(q));
}
else
{
float v=0;

v=atof(s.c_str());
expression *num=new number(v);
return num;
}
}
int main()
{
/*string s;
cin>>s;
expression& e=e.stringToexpression(s);*/
expression *n1=new number(2);
expression *n2=new number(3);
char n='+';
expression *b1=new branch(n,n1,n2);
cout<<b1->value();
/*mainoperator *m=new plus;
operators *p=m;
cout<<p->calculate(2,3);*/
return 0;
}

* پست ویرایش شد ؛ لطفاً برای تاپیک ها عناوین مناسب انتخاب کنید و کد ها را در تگ مخصوص قرار دهید.