亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reform.cpp

?? 能計算數學函數的計算器 這個計算器可用 set 命令自定義變量
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "common.h"
#include "reform.h"

/**************************************************************\
*函數:isnumber
*
*功能:判斷一個字符是否為數字包括小數點 '.'
*
*返回:如果是數字返回 true 否則返回 false
\**************************************************************/
bool isnumber (
	char c
	)
{
	if (c=='.' || c>= '0' && c<='9') {
		return true;
	} else {
		return false;
	}
}

/**************************************************************\
*函數:isoperator
*
*功能:判斷一個字符是否為操作符,不含數學函數
*
*返回:如果是數字返回 true 否則返回 false
\**************************************************************/
bool isoperator (
	char c
	)
{
	if (c == '+' || c == '-' || c == '*' || c == '/' || c == '\\' || c == '%' || c == '^') {
		return true;
	} else {
		return false;
	}
}

/**************************************************************\
*函數:convert
*
*功能:將數字串轉換為等值的整數實數
*
*返回:返回對應的項標識號
\**************************************************************/
int convert (
	char DataString[],
	TERM *dest
	)
{
	int    i;
	int    signal = NULL;
	int    PointCount = 0;
	int    intTotal = 0;
	double floTotal = 0.0;
	double weight = 0.1;

	for (i = 0;i<MAXSIZE && DataString[i] != NULL;i ++) {
		if (DataString[i] == '.') {
			PointCount ++;
			if (PointCount > 1) {
				error = the_real_number_is_illegal;
				return NULL;
			}
			
		} else {
			if (PointCount == 0) {
				intTotal = intTotal*10+(DataString[i]-'0');
			} else if (PointCount == 1) {
				floTotal += weight*(DataString[i]-'0');
				weight = weight*0.1;
			} 
		}
	}
	if (PointCount == 0) {
		dest->Operand.DataSignal = INTEGER;
		dest->Operand.Data.Integer = intTotal;
	} else {
		dest->Operand.DataSignal = FLOAT;
		dest->Operand.Data.Real = intTotal + floTotal;
	}
	return ISDATA;
}
	    
/**************************************************************\
*函數:reform
*
*功能:將表達式字符串格式化為項串
*
*返回:返回項串的頭指針
*
*注:將所有的 '-' 都當作減號
\**************************************************************/
void reform (
			  char expString[]
			  )
{
	int  i = 0,j = 0;
	int  tempSignal = LEFT_BRACKET;
	TERM tempTerm;
	NODE *tempNode;
    
	if (error != NULL) {
		return;
	}
	
	tempTerm.Operator.Symbol = '(';
	tempTerm.Operator.OperandNumber = 0;
	tempTerm.Operator.Priority = 6;
	ExpressionHead = NewNode (tempTerm,tempSignal);       //加入頭結點
	ExpressionTail = ExpressionHead;
    
	for (i = 0;expString[i] != NULL;i ++) {
		j = 0;
		if (isalpha (expString[i])) {              //獲得標識符
			VarName[j ++] = expString[i];
			while (isalpha(expString[++ i])) {
				if (j == MAXSIZE - 1) {
					error = the_name_is_too_long;
					return;
				}
				VarName[j ++] = expString[i];
			}
			i --;    //將下標返回到第一個非字母字符的前面以便主循環繼續從其開始掃描
			VarName[j] = NULL;
			if ((tempSignal = FunctionSearch (FunctionList,VarName,&tempTerm)) == NULL &&
				(tempSignal = VariableSearch (VariableList,VarName,&tempTerm)) == NULL) {
				error = can_not_identify_identifier;
				return;
			}
		} else if (isoperator (expString[i])) {             //獲得操作符
			tempTerm.Operator.Symbol = expString[i];
			if (expString[i] == '%') {
				tempSignal = UNITARY;
				tempTerm.Operator.OperandNumber = 1;
				tempTerm.Operator.Priority = 0;
			} else {
				tempSignal = DUALITY;
				tempTerm.Operator.OperandNumber = 2;
				if (expString[i] == '^') {
					tempTerm.Operator.Priority = 2;
				} else if (expString[i] == '*' || expString[i] == '/' || expString[i] == '\\') {
					tempTerm.Operator.Priority = 4;
				} else {
					tempTerm.Operator.Priority = 5;
				}
			}
		} else if (isnumber(expString[i])) {                //獲得操作數
			VarName[j ++] = expString[i];
			while (isnumber (expString[++ i])) {
				if (j == MAXSIZE - 1) {
					error = the_data_bit_is_too_long;
					return;
				}
				VarName[j ++] = expString[i];
 			}
			i --;     //將下標返回到第一個非數字字符的前面以便主循環繼續從其開始掃描
			VarName[j] = NULL;
			tempSignal = convert (VarName,&tempTerm);
			if (error != NULL) {
				return;
			}
		} else if (expString[i] == '(') {
			tempTerm.Operator.Symbol = expString[i];
			tempTerm.Operator.Priority = 6;
			tempTerm.Operator.OperandNumber = 0;
			tempSignal = LEFT_BRACKET;
		} else if (expString[i] == ')') {		
			tempTerm.Operator.Symbol = expString[i];
			tempTerm.Operator.Priority = 6;
			tempTerm.Operator.OperandNumber = 0;
			tempSignal = RIGHT_BRACKET;
		} else {
			continue;
		}
		tempNode = NewNode (tempTerm,tempSignal);
		ExpressionTail = InsertEnd (ExpressionTail,tempNode);
	}
	tempSignal = RIGHT_BRACKET;
	tempTerm.Operator.Symbol = ')';
	tempTerm.Operator.OperandNumber = 0;
	tempTerm.Operator.Priority = 6;
	tempNode = NewNode (tempTerm,tempSignal);      
	ExpressionTail = InsertEnd (ExpressionTail,tempNode);                     //加入尾結點
}

bool LicitCompages (NODE *a,NODE *b)
{
	switch (a->TermSignal) {
		case ISDATA:
			if (b->TermSignal == ISDATA) {
				return false;
			} else {
				return true;
			}
		case ISVARIABLE:
			if (b->TermSignal == ISDATA || b->TermSignal == ISVARIABLE) {
				return false;
			} else {
				return true;
			}
		case UNITARY://只表示 '%'
			if (b->TermSignal == UNITARY) {
				return false;
			} else {
				return true;
			}
		case DUALITY://包含負號 '-'
			if (b->TermSignal == DUALITY || b->TermSignal == RIGHT_BRACKET) {
				return false;
			} else {
				return true;
			}
		case MATH_FUNCTION:
			if (b->TermSignal == RIGHT_BRACKET || b->TermSignal == UNITARY || b->TermSignal == DUALITY) {
				return false;
			} else {
				return true;
			}
		case LEFT_BRACKET:
			if (b->TermSignal == RIGHT_BRACKET || b->TermSignal == UNITARY || (b->TermSignal == DUALITY && b->Term.Operator.Symbol != '-')) {
				return false;
			} else {
				return true;
			}
		case RIGHT_BRACKET:	
			if (b->TermSignal == ISDATA || b->TermSignal == ISVARIABLE || b->TermSignal == MATH_FUNCTION) {
				return false;
			} else {
				return true;
			}
		default:
			return false;
			
	}
}

void SyntaxCheck (
	NODE *expHead
	)
{
	int  BracketCounter = 0;
	NODE *a,*b;
	if (error != NULL) {
		return;
	}

	for (a = expHead,b = a->Next;b != NULL;a = b,b = b->Next) {
		if (a->TermSignal == LEFT_BRACKET) {
			BracketCounter ++;
		} else if (a->TermSignal == RIGHT_BRACKET) {
			BracketCounter --;
		}
		if (! LicitCompages (a,b)) {
			error = illegal_compages;
			return;
		}
	}
	BracketCounter --;
	if (BracketCounter != 0) {
		error = the_brackets_are_not_match;
		return;
	}
}

void expAnalyse (
	NODE *expHead
	)
{
	NODE *a;
	NODE *b;
	NODE *tempNode;
	TERM tempTerm;
	int  Signal = DUALITY;
	if (error != NULL) {
		return;
	}
	tempTerm.Operator.Symbol = '*';
	tempTerm.Operator.OperandNumber = 2;
	tempTerm.Operator.Priority = 4;

	for (a = expHead,b = a->Next;b != NULL; a = b,b = b->Next) {
		switch (a->TermSignal) {
			case ISDATA:
			case UNITARY:
				if ((b->TermSignal == ISVARIABLE || b->TermSignal == MATH_FUNCTION || b->TermSignal == LEFT_BRACKET)) {
					tempNode = NewNode (tempTerm,Signal);
					InsertAfter (a,tempNode);
					break;
				}
			case ISVARIABLE:
				if ((b->TermSignal == MATH_FUNCTION || b->TermSignal == LEFT_BRACKET)) {
					tempNode = NewNode (tempTerm,Signal);
					InsertAfter (a,tempNode);
					break;
				}
			case RIGHT_BRACKET:
				if ((b->TermSignal == MATH_FUNCTION || b->TermSignal == LEFT_BRACKET)) {
					tempNode = NewNode (tempTerm,Signal);
					InsertAfter (a,tempNode);
					break;
				}
		}
	}
}


void reformer (
	char expString[]
	)
{
	reform (expString);
	SyntaxCheck (ExpressionHead);
	expAnalyse (ExpressionHead);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美腿丝袜亚洲三区| 久久久久高清精品| 成人国产免费视频| 麻豆视频一区二区| 欧美aaaaaa午夜精品| 亚洲午夜久久久久久久久久久| 欧美经典一区二区| 亚洲精品一区二区三区影院| 91精品国产高清一区二区三区| 在线观看国产一区二区| 欧美久久一二区| 欧美中文字幕一区| 欧美视频精品在线观看| 在线影视一区二区三区| 日本精品一级二级| 在线视频你懂得一区| 精品视频免费看| 精品视频一区三区九区| 日韩一区二区视频| 中文字幕精品在线不卡| 一区在线中文字幕| 午夜精品免费在线| 国产精品538一区二区在线| 成人高清免费观看| 欧美日本在线看| 久久久久国产精品麻豆ai换脸| 最新国产精品久久精品| 亚洲国产视频网站| 国产精品91xxx| 欧美日韩国产一级| 国产欧美一区二区精品忘忧草 | 91免费版在线| 在线不卡一区二区| 国产精品天干天干在观线| 亚洲激情男女视频| 黄色资源网久久资源365| 色综合天天综合网天天看片| 日韩一二在线观看| 亚洲免费观看在线观看| 激情久久久久久久久久久久久久久久| 成人激情视频网站| 欧美成人女星排行榜| 成人欧美一区二区三区小说| 蜜桃视频第一区免费观看| 成人性视频网站| 日韩免费观看2025年上映的电影| 国产精品麻豆欧美日韩ww| 蜜臀久久99精品久久久久久9 | 国产一区不卡在线| 欧洲人成人精品| 国产目拍亚洲精品99久久精品| 日韩中文字幕麻豆| 色婷婷久久久久swag精品 | 亚洲国产欧美在线| av亚洲产国偷v产偷v自拍| 日韩色在线观看| 亚洲国产欧美日韩另类综合| 97久久精品人人爽人人爽蜜臀| 久久综合久久久久88| 亚洲图片另类小说| 国产成人一级电影| 精品va天堂亚洲国产| 日韩精品乱码免费| 欧美日本一道本在线视频| 亚洲黄一区二区三区| 91在线国内视频| 国产精品免费人成网站| 国产成人免费视| 久久九九久久九九| 国产不卡一区视频| 中文在线资源观看网站视频免费不卡| 久久精品久久综合| 日韩精品综合一本久道在线视频| 婷婷开心激情综合| 欧美日韩精品电影| 天天操天天干天天综合网| 欧美高清dvd| 久久精品国产99国产| 日韩欧美自拍偷拍| 精品影院一区二区久久久| 精品国产电影一区二区| 国产中文一区二区三区| 久久综合九色综合久久久精品综合 | 美洲天堂一区二卡三卡四卡视频| 欧美精品久久久久久久多人混战| 免费欧美日韩国产三级电影| 日韩免费性生活视频播放| 精品夜夜嗨av一区二区三区| 久久精品一区二区三区四区| 国产福利91精品一区二区三区| 中文字幕欧美日韩一区| 99精品1区2区| 青椒成人免费视频| 久久久久久97三级| 91在线无精精品入口| 视频一区二区三区在线| 2024国产精品视频| 成人h动漫精品| 午夜影院在线观看欧美| 久久网这里都是精品| 99久久精品免费精品国产| 亚洲3atv精品一区二区三区| 亚洲精品一区二区精华| av激情综合网| 日本亚洲天堂网| 亚洲欧美激情插| 欧美日韩精品系列| 国产mv日韩mv欧美| 亚洲一区二区三区在线看| 欧美成人精品1314www| 97精品视频在线观看自产线路二| 亚洲第一狼人社区| 亚洲国产精品传媒在线观看| 欧美三级在线看| 成人性视频免费网站| 青青青爽久久午夜综合久久午夜| 国产精品区一区二区三| 欧美日韩夫妻久久| av爱爱亚洲一区| 国内不卡的二区三区中文字幕| 一区二区三区中文字幕在线观看| 欧美一区二区三区免费大片| 91捆绑美女网站| 国产一区二三区好的| 性久久久久久久| 中文字幕欧美三区| 亚洲精品在线三区| 欧美顶级少妇做爰| 91官网在线免费观看| 国产成人自拍在线| 激情另类小说区图片区视频区| 亚洲成人午夜电影| 亚洲激情中文1区| 国产精品女上位| 久久精品一区二区三区不卡| 91精品国产色综合久久ai换脸| 91成人国产精品| 色欧美日韩亚洲| av午夜一区麻豆| 成人中文字幕合集| 丁香另类激情小说| 国产精品亚洲午夜一区二区三区 | 色婷婷国产精品综合在线观看| 国产精品资源在线观看| 极品少妇xxxx精品少妇偷拍| 夜夜亚洲天天久久| 亚洲日本va午夜在线电影| 成人欧美一区二区三区小说| 国产精品你懂的在线欣赏| 国产人久久人人人人爽| 国产欧美日本一区视频| 国产日韩一级二级三级| 久久久精品tv| 中文字幕不卡在线播放| 中文字幕一区不卡| 最好看的中文字幕久久| 亚洲最新视频在线观看| 午夜电影久久久| 青青草国产精品97视觉盛宴| 九色|91porny| 国产风韵犹存在线视精品| 成人美女视频在线看| 91免费看`日韩一区二区| 91免费精品国自产拍在线不卡| 91久久奴性调教| 日韩一区二区精品在线观看| 26uuu精品一区二区三区四区在线| 日韩欧美一级片| 国产午夜亚洲精品午夜鲁丝片| 国产精品视频一二| 一区二区三区美女| 另类综合日韩欧美亚洲| 成人丝袜18视频在线观看| 在线国产电影不卡| 欧美一卡2卡3卡4卡| 国产视频一区二区三区在线观看| 国产精品白丝在线| 午夜精品久久一牛影视| 狠狠色狠狠色合久久伊人| 成人app下载| 9191精品国产综合久久久久久| 久久日一线二线三线suv| 中文字幕一区二区三中文字幕| 亚洲成人av中文| 国产成人免费视频| 在线成人午夜影院| 国产精品不卡视频| 免费在线视频一区| 99re视频精品| 精品国产网站在线观看| 一区二区三区中文在线| 国产原创一区二区| 欧美制服丝袜第一页| 久久久不卡网国产精品二区| 一区二区三区在线观看国产| 久久99九九99精品| 色综合久久中文字幕| 国产午夜精品在线观看| 婷婷久久综合九色国产成人| 成人免费视频一区二区|