📄 fcr.cpp
字号:
if(memory[iAddress-1].dNumber == memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_NOTEQUALI: //整数不等
if(memory[iAddress-1].iNumber != memory[iAddress].iNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_NOTEQUALD: //实数不等
if(memory[iAddress-1].dNumber != memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_GREATI: //整数大于
if(memory[iAddress-1].iNumber > memory[iAddress].iNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_GREATD: //实数大于
if(memory[iAddress-1].dNumber > memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_GREATEQUALI: //整数大于等于
if(memory[iAddress-1].iNumber >= memory[iAddress].iNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_GREATEQUALD: //实数大于等于
if(memory[iAddress-1].dNumber >= memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_LESSI: //整数小于
if(memory[iAddress-1].iNumber < memory[iAddress].iNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_LESSD: //实数小于
if(memory[iAddress-1].dNumber < memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_LESSEQUALI: //整数小于等于
if(memory[iAddress-1].iNumber <= memory[iAddress].iNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_LESSEQUALD: //实数小于等于
if(memory[iAddress-1].dNumber <= memory[iAddress].dNumber)
memory[iAddress-1].iNumber=1;
else memory[iAddress-1].iNumber=0;
iAddress--;
iCode++;
break;
case OP_RETURNI: //整型函数返回
iTemp=memory[iAddress].iNumber;//保留返回值
iAddress=memory[iBase+1].iNumber+1 //恢复中间代码指针
-code[iCode].sd.iNumber; //回收参数传递时参数占用的虚内存
iCode =memory[iBase+2].iNumber+1; //恢复栈顶指针
iBase =memory[iBase].iNumber; //恢复原基地址
memory[iAddress].iNumber=iTemp;
break;
case OP_RETURND: //实型函数返回
dTemp=memory[iAddress].dNumber;//保留返回值
iAddress=memory[iBase+1].iNumber+1 //恢复中间代码指针
-code[iCode].sd.iNumber; //回收参数传递时参数占用的虚内存
iCode =memory[iBase+2].iNumber+1; //恢复栈顶指针
iBase =memory[iBase].iNumber; //恢复原基地址
memory[iAddress].dNumber=dTemp;
break;
case OP_INPUTI: //输入整型值
tElapse+=clock()-tStart;
memory[iBase+3+code[iCode].sd.iNumber].iNumber=InputInt();
tStart=clock();
iCode++;
break;
case OP_INPUTD: //输入实型值
tElapse+=clock()-tStart;
memory[iBase+3+code[iCode].sd.iNumber].dNumber=InputDouble();
tStart=clock();
iCode++;
break;
case OP_LOADVARI: //导入整型变量
iAddress++;
if(!TestAddress(iAddress))
return FALSE;
memory[iAddress].iNumber=memory[iBase+3+code[iCode].sd.iNumber].iNumber;
iCode++;
break;
case OP_LOADVARD: //导入实型变量
iAddress++;
if(!TestAddress(iAddress))
return FALSE;
memory[iAddress].dNumber=memory[iBase+3+code[iCode].sd.iNumber].dNumber;
iCode++;
break;
case OP_SAVEI: //保存整型变量值
memory[iBase+3+code[iCode].sd.iNumber].iNumber=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_SAVED: //保存实型变量值
memory[iBase+3+code[iCode].sd.iNumber].dNumber=memory[iAddress].dNumber;
iAddress--;
iCode++;
break;
case OP_OUTPUTS: //输出字符串
Output(code[iCode].sd.string);
iCode++;
break;
case OP_OUTPUTI: //输出整数
Output(memory[iAddress].iNumber);
iAddress--;
iCode++;
break;
case OP_OUTPUTD: //输出实数
Output(memory[iAddress].dNumber);
iAddress--;
iCode++;
break;
case OP_LOADCONSTI: //导入整常数
iAddress++;
if(!TestAddress(iAddress))
return FALSE;
memory[iAddress].iNumber=code[iCode].sd.iNumber;
iCode++;
break;
case OP_LOADCONSTD: //导入实常数
iAddress++;
if(!TestAddress(iAddress))
return FALSE;
memory[iAddress].dNumber=code[iCode].sd.dNumber;
iCode++;
break;
case OP_CHANGESIGNALI: //整数变号
memory[iAddress].iNumber= -memory[iAddress].iNumber;
iCode++;
break;
case OP_CHANGESIGNALD: //实数变号
memory[iAddress].dNumber= -memory[iAddress].dNumber;
iCode++;
break;
case OP_PLUSI: //整数加
memory[iAddress-1].iNumber+=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_PLUSD: //实数加
memory[iAddress-1].dNumber+=memory[iAddress].dNumber;
iAddress--;
iCode++;
break;
case OP_MINUSI: //整数减
memory[iAddress-1].iNumber-=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_MINUSD: //实数减
memory[iAddress-1].dNumber-=memory[iAddress].dNumber;
iAddress--;
iCode++;
break;
case OP_TIMESI: //整数乘
memory[iAddress-1].iNumber*=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_TIMESD: //实数乘
memory[iAddress-1].dNumber*=memory[iAddress].dNumber;
iAddress--;
iCode++;
break;
case OP_SLASHI: //整数除
if(!ZeroSlashMod(memory[iAddress].iNumber))//测试是否除数为0
return FALSE;
memory[iAddress-1].iNumber/=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_SLASHD: //实数除
if(!ZeroSlashMod(memory[iAddress].dNumber))//测试是否除数为0
return FALSE;
memory[iAddress-1].dNumber/=memory[iAddress].dNumber;
iAddress--;
iCode++;
break;
case OP_MOD: //余
if(!ZeroSlashMod(memory[iAddress].iNumber))
return FALSE;
memory[iAddress-1].iNumber%=memory[iAddress].iNumber;
iAddress--;
iCode++;
break;
case OP_PARAMTRANSI: //传递整型参数
memory[iBase+3+code[iCode].sd.iNumber].iNumber=
memory[iBase+code[iCode].sd.iNumber-code[iCode].sd.nParam].iNumber;
iCode++;
break;
case OP_PARAMTRANSD: //传递实型参数
memory[iBase+3+code[iCode].sd.iNumber].dNumber=
memory[iBase+code[iCode].sd.iNumber-code[iCode].sd.nParam].dNumber;
iCode++;
break;
default://由于定义的所有操作上边均已经实现,认为不可能到此default,故有以下处理
Output("\r\n程序发生错误,请将此错误告知ZKF,以便进行修改,谢谢!\r\n");
return FALSE;
}
}
EndInterpret:
Output("\r\n程序执行用时 ");
Output(tElapse+clock()-tStart);
Output(" 毫秒\r\n");
return TRUE;
}//end interpret
BOOL TestAddress(int iAddress)
{
if(iAddress>=nMEMORY)
{
cout<<"\n地址溢出,程序停止执行!\n";
return FALSE;
}
return TRUE;
}
BOOL ZeroSlashMod(int i)
{
if(i==0)
{
cout<<"\n“/”或“%”的右操作数为0,程序停止执行!\n";
return FALSE;
}
return TRUE;
}
BOOL ZeroSlashMod(double d)
{
if(d==0.0)
{
cout<<"\n“/”或“%”的右操作数为0,程序停止执行!\n";
return FALSE;
}
return TRUE;
}
BOOL ArraySubscript(int index,int length)
{
if(index<0 || (length>=0 && index>=length))
{
cout<<"\n数组下标溢出,程序停止执行!\n";
return FALSE;
}
return TRUE;
}
int InputInt(void)
{
char line[128];
int result,i;
while(1)
{
cin.getline(line,128);
for(i=0;line[i]==' ' || line[i]=='\t';i++);
if(line[i]=='\0')continue;
result=0;
for(;line[i]>='0' && line[i]<='9';i++)
{
result*=10;
result+=line[i]-'0';
}
for(;line[i]==' ' || line[i]=='\t';i++);
if(line[i]=='\0')
{
return result;
}
cout<<"请输入一个整数: ";
}
}
double InputDouble(void)
{
char line[128];
double result;
int i;
while(1)
{
cin.getline(line,128);
for(i=0;line[i]==' ' || line[i]=='\t';i++);
if(line[i]=='\0')continue;
result=0;
for(;line[i]>='0' && line[i]<='9';i++)
{
result*=10;
result+=line[i]-'0';
}
if(line[i]=='.')
{
double l=0.1;
for(i++;line[i]>='0' && line[i]<='9';i++)
{
result+=l*(line[i]-'0');
l/=10;
}
for(;line[i]==' ' || line[i]=='\t';i++);
}
else
{
for(;line[i]==' ' || line[i]=='\t';i++);
}
if(line[i]=='\0')
{
return result;
}
cout<<"请输入一个实数: ";
}
}
void Output(int i)
{
cout<<i;
}
void Output(double d)
{
cout<<d;
}
void Output(char string[])
{
cout<<string;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -