目录
今天计算器进展还挺多下面一一列举
进展
更多符号的支持,现在可以进行幂运算和求余运算
--规定符号的优先级,目前是只有加减乘除
OperationLevel = {
['+'] = 1,
['-'] = 1,
['*'] = 2,
['/'] = 2,
['%'] = 2,
['^'] = 3,
}
//calc中
elseif op == '^' then
table.insert(clc.nums, a ^ b)
elseif op == '%' then
table.insert(clc.nums, a % b)
更多括号的支持
现在可以使用中括号大括号了[]{}
持续输入,自动记录上一次的运算结果
我的解决办法是在clc文件中声明了一个全局存数字的table nums,计算完成后就把结果导入到nums之中,这个全局nums是用于存表达式数字的,因此新数字也会被存进去
命令行
quit/q退出,clear清除全局栈,可以进行新的运算了
--quit q退出,clear清除缓存,readfile读取文件
if S=="q" or S=="quit" then
break
elseif S=="clear" then
while #clc.nums>0 do
table.remove(clc.nums)
end
table.insert(clc.nums,0)
goto continue
输入检测
- 对于中文括号,我们在输入检测时直接将其替换为英文符号
- 括号是否成对出现,简单的栈的应用,遇到左括号入栈,右括号如果栈顶是对应左括号就出栈,最后检测栈是否为空
--检验括号
function check.CheckBrackets(s)
local ops = {}
local i=1
local n=string.len(s)
while i<=n do
local c=string.sub(s,i,i)
if c=='('or c=='{'or c=='[' then
table.insert(ops,c)
end
if c==')' then
if #ops>0 and ops[#ops]=='(' then
table.remove(ops)
else
return false
end
end
if c==']' then
if #ops>0 and ops[#ops]=='[' then
table.remove(ops)
else
return false
end
end
if c=='}' then
if #ops>0 and ops[#ops]=='{' then
table.remove(ops)
else
return false
end
end
i=i+1
end
return #ops==0
end
优化
怎么优化功能呢,我也不清楚,目前的思路是加一个文件输入喽,可以读取文件内容然后输出一个result.txt当中有结果
然后看看chatgpt的思路
你目前的计算器已经具备了基本的四则运算、幂运算和求余的功能,同时支持三种括号、持续输入、记录上一次的结果,并且允许用户退出和清除结果。以下是一些可能的额外功能,你可以考虑根据你的需求和时间允许程度来决定是否添加它们:
1. 科学计算功能:添加更多的数学函数,如三角函数、对数函数、指数函数等。这将使计算器具备更广泛的数学计算能力。
2. 单位转换:添加单位转换功能,例如长度单位、重量单位、温度单位等的转换。这将使计算器在实际应用中更加实用。
3. 历史记录:实现一个历史记录功能,可以保存用户的计算历史,以便查看和重新检查之前的计算结果。
4. 变量支持:允许用户定义和使用变量,以便在计算中保存和重用中间结果。
5. 角度模式切换:添加角度模式切换功能,允许用户在弧度和角度之间进行切换,方便处理三角函数计算。
6. 错误处理:改进错误处理机制,提供更友好的错误提示和输入验证,以增强计算器的健壮性。
7. 用户界面优化:改进用户界面,提供更友好和直观的交互方式,如使用图形界面、选择菜单等。
请注意,在添加新功能之前,要确保现有功能的正确性。同时,考虑你的时间和编程技能,逐步引入新的功能,以防止过度复杂化。根据你的需求和目标用户,选择合适的功能来增强计算器的功能和实用性。
希望这些建议对你有所帮助!如果你对某个特定功能有更多的问题或需要更多指导,请告诉我。
疑问
- 在终端里执行的时候有时候按到→⬅这些键都会造成括号检测失败,不知道输入了什么东西
- 在vscode里面的终端里面执行的时候,我输入中文括号并不能被正确的修正,同样的一段直接写死在文件里或者是用gitbash界面输入都是可以正确处理的