⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.h

📁 支持简单的公式推导
💻 H
字号:
#ifndef __BLOCK_H__
#define __BLOCK_H__

#include "cluster.h"

class Block : public Operand
{

public: 
    	
	Block(const  Cluster& c);
	Block(double in = 0):last_me_(NULL)
	{
		/**this = Block(Cluster(in));*/ // not allowed!!!
		//*this = Block(Cluster(in));
		cluster_set_.insert(Cluster(in));
	    UpdateAll();  
	}
	
	~Block()
	{   
		//cout<<"in ~B\n";
		if (last_me_ != NULL) 
			delete last_me_;
		last_me_ = NULL;
		expression_.erase();
		cluster_set_.clear();
	}

	//Block(const string& str):last_me_(NULL){*this = Block(Cluster(str));} !!!!????
	Block(const string& str):last_me_(NULL)
	{   
		cluster_set_.insert(Cluster(str));
        cluster_set_.insert(Cluster(0));
		UpdateAll(); 
	}

    Block(const Block& l);
	
    
public:
	
     Block& Mul(const Block&);//处理内务!!!
     Block& Add(const Block&);//处理内务!!!
     Block& Sub(const Block&); 
public://inline
    virtual bool IsConst()const
		{return cluster_set_.size() == 1;}
    bool HasSingleFactor()const
	{
		return  ( fabs(GetSingleValue()) < c_very_small   //单项变量
			                     && cluster_set_.size() == 2 )
		       ;						 
	}
    virtual string GetExpression()const
		{ return expression_;} 
   
	virtual double GetSingleValue()const
	{
		return cluster_set_.begin()->GetSingleValue();// pp1
	}
	
   void ReplaceByConst(const string&,double );
   virtual Block& PowerBy(double );
   Block& operator=(const Block& l);
public:
        
    set<Cluster> cluster_set_; // not map!!!
    void MulCluster(const Cluster& n);
private:
	void UpdateAll();
	
    void ExpressionCut(string&);
   	void ReverseAllWeight();
private:
    string expression_;
	//为了实现复杂符号比如开方之类引入一个堆栈!!
	//vector<Block> block_stack_; //因为block不一定能power!!!
	Block* last_me_;
};
string ForMul(const string& postfix,double times);
string ForSum(double,const string frame);
//------------------------------------------------
Block operator +(const Block& lb,const Block rb);
//Block& operator +=(const Block& lb);
Block operator -(const Block& lb,const Block rb);
Block operator *(const Block& lb,const Block rb);
Block operator ^(const Block& lb,int n);
Block operator /(const Block& lb,const Block rb);
//Block Power(const Block& lb,double p);
Block operator -(const Block& lb);
//------------------------------------------------
vector<Block> AssignFactor(const Block& block, const Block& node);
Block         Delta(const vector<Block>& vb);
pair<Block,Block> Root_2(const vector<Block>& vb);         






#endif //__BLOCK_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -