计算器第二日进展

发布时间 2024-01-10 17:28:42作者: LiviaYu


今天计算器进展还挺多下面一一列举

进展

更多符号的支持,现在可以进行幂运算和求余运算

--规定符号的优先级,目前是只有加减乘除
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

输入检测

  1. 对于中文括号,我们在输入检测时直接将其替换为英文符号
  2. 括号是否成对出现,简单的栈的应用,遇到左括号入栈,右括号如果栈顶是对应左括号就出栈,最后检测栈是否为空
--检验括号
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. 用户界面优化:改进用户界面,提供更友好和直观的交互方式,如使用图形界面、选择菜单等。

请注意,在添加新功能之前,要确保现有功能的正确性。同时,考虑你的时间和编程技能,逐步引入新的功能,以防止过度复杂化。根据你的需求和目标用户,选择合适的功能来增强计算器的功能和实用性。

希望这些建议对你有所帮助!如果你对某个特定功能有更多的问题或需要更多指导,请告诉我。

疑问

  1. 在终端里执行的时候有时候按到→⬅这些键都会造成括号检测失败,不知道输入了什么东西
  2. 在vscode里面的终端里面执行的时候,我输入中文括号并不能被正确的修正,同样的一段直接写死在文件里或者是用gitbash界面输入都是可以正确处理的