Lua 实现复数计算器

要求:实现一个Complex复数结构,支持复数的加、减、乘、除四则运算
主要思路:利用元表,通过元方法重写四则运算操作符

方法1:通过元表实现

-- ***** 元表 *****
metaTable = {}-- a+bi, c+di
-- c1[1], c1[2], c2[1], c2[2]
-- 使用元表的元方法 更改加减乘除对应运算符的操作
function metaTable.__add(c1, c2)res = {}res[1] = c1[1] + c2[1]res[2] = c1[2] + c2[2]setmetatable(res, metaTable)return res
endfunction metaTable.__sub(c1, c2)res = {}res[1] = c1[1] - c2[1]res[2] = c1[2] - c2[2]setmetatable(res, metaTable)return res
endfunction metaTable.__mul(c1, c2)res = {}-- ac-bd, bc+ad ires[1] = c1[1]*c2[1] - c1[2] * c2[2]res[2] = c1[2]*c2[1] + c1[1] * c2[2]setmetatable(res, metaTable)return resendfunction metaTable.__div(c1, c2)res = {}--:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +((bc-ad)/(c^2+d^2))ires[1] = (c1[1] * c2[1] + c1[2] * c2[2]) / (c2[1] * c2[1] + c2[2] * c2[2])res[2] = (c1[2] * c2[1] - c1[1] * c2[2]) / (c2[1] * c2[1] + c2[2] * c2[2])setmetatable(res, metaTable)return resend-- 使用tostring修改打印信息
function metaTable.__tostring(mytable)real = mytable[1] or 0imag = mytable[2] or 0if real == 0 thenif imag ~= 0 thenreturn imag..'i'elsereturn realendelseif imag == 0 thenreturn real..''elsereturn real .. '' .. imag..'i'endend-- 复数函数
function Complex(a, b)a = a or 0b = b or 0mytable = {a, b}setmetatable(mytable, metaTable)return mytable
endlocal c1 = Complex(3.2, -5.1)
local c2 = Complex(7, 8)
local c3 = Complex(math.pi)
local c4 = Complex()print((c1 + c4) * (c1 / c2 + c3))
-- output: 6.7653973764431-16.927609258972i

方法2:通过复数类实现

-- ***** 元类 *****
Complex = {real = 0, imag = 0}-- 构造函数
function Complex:new(real, imag)local o = o or {}o.real = real or 0o.imag = imag or 0setmetatable(o, self)self.__index = selfreturn o
end-- 重载加法运算符
function Complex:__add(c2)local o = Complex:new()o.real = self.real + c2.realo.imag = self.imag + c2.imag--print(o.real, o.imag)return oend-- 重载减法运算符
function Complex:__sub(c2)local o = Complex:new()o.real = self.real - c2.realo.imag = self.imag - c2.imagreturn o
end-- 重载乘法运算符
function Complex:__mul(c2)local o = Complex:new()o.real = self.real * c2.real - self.imag * c2.imago.imag = self.imag * c2.real + self.real * c2.imagreturn oend-- 重载除法运算符
function Complex:__div(c2)local o = Complex:new()o.real = (self.real * c2.real + self.imag * c2.imag) / (c2.real * c2.real + c2.imag * c2.imag)o.imag = (self.imag * c2.real - self.real * c2.imag) / (c2.real * c2.real + c2.imag * c2.imag)return oend-- 使用tostring修改打印信息
function Complex:__tostring()real = self.real or 0imag = self.imag or 0if real == 0 thenif imag ~= 0 thenreturn imag..'i'elsereturn realendelseif imag == 0 thenreturn real..''elsereturn real .. '' .. imag..'i'endend-- 创建实例对象
local c1 = Complex:new(3.2, -5.1)
local c2 = Complex:new(7, 8)
local c3 = Complex:new(math.pi)
local c4 = Complex:new()print((c1 + c4) * (c1 / c2 + c3))
-- output: 6.7653973764431-16.927609258972i

Lua 实现复数计算器相关推荐

  1. 【C++ 程序】 TVJ Complex Calculator (v 2.2) 复数计算器

    Contents 简介 应用程序下载 Help What is new in v 2.2 Simple test 输入要求 程序 Main.cpp Complex.h & Complex.cp ...

  2. c++小项目练习之复数计算器

    准备了一个月的考试终于结束了.总结一下这一个月学到的理论知识,规划一下1月的计划.昨天敲了一天的代码.复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作.纯代码后面再做详 ...

  3. c++复数计算器(四则运算+坐标模长、角度表示)

    用类实现的简单复数计算器 废话少说,直接上代码 #include <iostream> #include <math.h> #define PI acos(-1) using ...

  4. 复数计算器(C/C++)

    源码地址:复数计算器复数计算器复数计算器资源-CSDN文库

  5. 如何在C艹大作业上用复数计算器拿下一个100分

    0. qt qt简介: 百度百科 下载:官网下载 申请个账号就可以免费用了 安装方式可以在百度上找到,建议安装MinGW,其余自选. 1. 建立第一个qt文件 打开Qt Creator,点击文件,点击 ...

  6. C++小型复数计算器项目设计

    小型复数计算器项目设计 一.问题描述及功能要求 1.实现复数的设置和显示. 2.声明一个复数类Complex,重载运算符 "+". "-". "*&q ...

  7. c语言解二次方程复数计算器,黑暗计算器(复数,解方程)

    这是一款兼容性高,功能强大,拥有近50个函数,支持复数运算和解方程且开源的科学计算器,另外还添加了进制转换,大数运算,大写数字等功能.虽然还没有完善,但我会在上学的过程中利用业余时间继续完善它的. 目 ...

  8. 小飞计算器(小飞可编程复数计算器)用户手册

    版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/18676049 本软件特色 ·可编程,程序员可 ...

  9. 在手机上编程:自制的小飞可编程复数计算器(小飞计算器)

    版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/18675175 小飞计算器是我在2011年9月 ...

  10. PyQt5-小案例(复数计算器)

    PS:最近接的淘宝单子,有需要的可以自己拿 目录 功能实现条例 效果图展示 源码介绍 获取地址 功能实现条例 1.复数的加减乘除运算 2.复数的虚部和实部的分割提取 效果图展示 源码介绍 1.界面采用 ...

最新文章

  1. jQuery Template的用法
  2. 大话设计模式(七 工厂不好用了?)
  3. 几个环境变量说明:ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAMES
  4. [LeetCode] 21. Merge Two Sorted Lists ☆
  5. 数据库:MySQL、HBase、ElasticSearch三者对比
  6. Codeforces Round #410 (Div. 2) D. Mike and distribution 思维+数学
  7. 【DP】优美三角剖分
  8. Java 14:记录
  9. 【PHP】网站防止QQ拦截防红跳转代码
  10. 3-8Tensor的算术运算编程实例
  11. centos7下创建mysql5.6多实例
  12. html上传视频文件前端显示,文件分片上传之前端文件分片
  13. 单溶水箱串级控制计算机控制,单容水箱液位控制系统
  14. Photoshop安装
  15. Android Banner图片轮播
  16. WPF定制实现自己的分页控件并配合DataGrid使用
  17. 1817735-45-7,Carboxy-PEG2-sulfonic acid在EDC和HATU等活化剂存在下,末端羧酸可参与与伯胺的反应
  18. 如何提升自己的网站打开速度
  19. ABAP FIELD-SYMBOLS
  20. RobotFramework相关

热门文章

  1. 未来十年,流程管理发展的趋势和挑战
  2. 联想小新一键恢复小孔_【联想自带一键重装系统】联想自带一键重装小孔_联想自带一键恢复...
  3. 关于泊松分布在测序原理中的解释
  4. 【工作感悟】职场工作感悟(一)
  5. uva-10041-水题
  6. 关于一台机器运行两个身份证读卡器模块(总结)
  7. mysql identity属性_Mysql中Identity 详细介绍
  8. idea发现git出现cannot run git:cannot identify version of git executable :no response
  9. Chrome去除新标签页最近访问
  10. 计算机一黑屏就显示当前账户已锁定,电脑黑屏用户已锁定账户怎么办?