实验2 简易计算器

合集下载

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告简易计算器实验报告引言:计算器是我们日常生活中常用的工具之一。

它可以帮助我们进行简单的数学运算,提高计算的效率。

在本次实验中,我们将设计并制作一台简易计算器,通过实践来掌握计算器的原理和工作原理。

实验目的:1. 了解计算器的基本原理和工作原理;2. 掌握计算器的设计和制作方法;3. 提高动手能力和创造力。

实验材料:1. 电路板;2. 按键;3. LED显示屏;4. 电容;5. 电阻;6. 电源。

实验步骤:1. 连接电路板和电源,确保电路板能够正常工作;2. 将按键连接到电路板上,用于输入数字和运算符;3. 连接LED显示屏,用于显示计算结果;4. 添加电容和电阻,用于控制电路的稳定性和电流;5. 调试电路,确保计算器能够正确运行。

实验结果:经过一番调试,我们成功制作出了一台简易计算器。

它可以进行基本的加减乘除运算,并且在LED显示屏上显示结果。

通过按键输入数字和运算符,我们可以进行各种运算,从而得到我们想要的结果。

这台计算器虽然简单,但是它的实用性和便携性都非常高。

实验分析:在本次实验中,我们主要学习了计算器的基本原理和工作原理。

计算器是通过按键输入数字和运算符,然后经过电路的计算和控制,最终在显示屏上显示结果。

在电路中,电容和电阻的作用是为了保证电路的稳定性和电流的控制。

通过这个实验,我们更加深入地了解了计算器的内部结构和工作原理。

实验总结:通过本次实验,我们成功制作了一台简易计算器,并且对计算器的原理和工作原理有了更深入的了解。

实验过程中,我们不仅提高了动手能力和创造力,还培养了解决问题的能力。

计算器作为一种常见的工具,它的设计和制作过程并不复杂,但是它的实用性和便携性却非常高,为我们的生活带来了很大的便利。

未来展望:通过这次实验,我们对计算器的原理和工作原理有了初步的了解。

在未来,我们可以进一步深入研究计算器的更高级功能和更复杂的电路设计。

同时,我们也可以将这种简易计算器的设计思想应用到其他领域,如电子设备、机器人等,从而提高我们的创造力和创新能力。

数电实验二:简易计算器(设计报告)

数电实验二:简易计算器(设计报告)

数电实验2设计报告实验名称:简易计算器 实验目的:1.熟练掌握综合逻辑电路的设计方法及调试方法2.掌握Verilog HDL 数字系统设计方法3.熟悉PLD 实验箱的结构和使用及QuartusII 软件的基本操作4.掌握采用Quartus II 软件和实验箱设计实现逻辑电路的基本过程设计任务及要求:利用LPM 例化元件和适当的中小规模时序、组合逻辑电路设计一个4位简易计算器,实现2个4位二进制数的加、减、乘、除运算,完成主要模块的波形仿真,并将设计下载到实验箱进行功能测试。

要求:1、 用8个开关分别作为2个4位输入数据2、 运算结果用数码管显示电路设计过程:1、 设定加、减、乘、除四个LPM 例化元件加法器:2个四位二进制输入(加数、被加数),1个4位二进制输出(和)减法器:2个四位二进制输入(减数、被减数),1个4位二进制输出(差)乘法器:2个四位二进制输入(乘数、被乘数),1个8位二进制输出(积)除法器:24位二进制输出(分别代表商和余数)2、加入组合逻辑电路和4选一数据选择器,控制进行运算的种类(1)组合逻辑电路输入:功能:为了利用矩阵键盘对计算器对输入数字的加减乘除进行控制,我们画了这个组合逻辑电路,将矩阵键盘的行管脚和列管脚分别为输入后,当(1,1)位置的按键按下,则输出端输出2位2进制数11(控制减法操作),当(2,2)位置的按键按下,则输出端输出2位2进制数10(控制加法操作),当(3,3)位置的按键按下,则输出端输出2位2进制数01(控制乘法操作),当所有按键都没有按下时,输出默认为00,即控制除法操作。

(2)4选一数据选择器功能X1,y1为想要计算的两个4位2进制数,当S0,S1为11的时候,将X1,y1送入减法器输入端,当S0,S1为10的时候,将X1,y1送入加法器输入端,当S0,S1为01的时候,将X1,y1送入乘法器输入端,当S0,S1为00的时候,将X1,y1送入除法器输入端。

Lab View 综合设计实验报告-简易计算器

Lab View 综合设计实验报告-简易计算器

Lab View 综合实验设计报告--简易计算器一实验目的用Lab View设计一个简易计算器二实验要求实现两个数之间的加、减、乘、除四则运算及开方、求倒、取负运算,达到简易计算器的功能。

三设计思路(1)按键的感应:首先在前面板建立一个簇,然后在簇中再建立布尔量,放置21个以满足键的需求。

包括0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个倒数键,一个反号键,一个删除键(只删除一位数据)及一个清零键(清空所有数据)。

然后通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每个键与数字(0--20)之间的对应。

每次按下一个键时,通过查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对一个键的感应过程。

前面板设计:后面板设计:(2)数字的读入:具体赋给哪个操作数通过布尔量change的状态决定,该布尔量状态在输入运算类型键后改变。

这里要注意的是:在第二个数键入时,要把结果赋给num3,最终是在num1和 num3之间进行运算运算,这样做是为了在一种运算结束后能实现连续的运算。

数字读入程序框图(3)操作类型:当按下运算类型键时,存储对应的数字序号到type,以按下“=”号时进行运算类型的确定。

操作类型默认为“空”。

在此操作类型case中同时执行对change状态转换。

在其中再用一个case结构用于实现“+、-、*、/”的连续运算。

(4)等号键:在11键的case中实现加、减、乘、除、开方及倒数运算。

连续按此键可以实现第一操作数对第二操作数的连续运算。

等号键程序框图四寄存器及布尔变量的作用num1用来存储第一个输入数据。

第二个输入数据存入num2中,然后将其赋给 num3,并使num2为空,以便输入的数据存入num2,所有的运算是在num1和 num3间进行,运算结果都赋给num1和result。

change用来判断是第一个数据还是第二个数据。

简易计算器

简易计算器

实验1 :简易计算器
1、实验目的:通过简易计算器的设计,熟悉VS2013编程环境,掌
握常用窗体应用程序设计基本步骤,掌握基本控件的使用方法,掌握菜单栏设计
2、实验要求:
(1)界面要求:模仿windows操作系统附件中的计算器样式进行设计,要设计基本的菜单项(快捷键、热键、和分割线
等)
(2)功能要求:实现如下图所示的功能键
实验2 :数据库访问
1、实验目的:掌握访问数据库基本方法和流程,掌握数
据绑定
2、实验要求
(1)、界面要求
(2)功能要求
(a). 程序启动时能显示csscore表格中的数据,如下图所示
(b). “学号”右边的combox绑定csscore表格中的姓名字段
(c)“查询”按钮能查询combox框中选中学生的成绩(总评字段);“Ave”——班级平均分“Max”——最高分;“Min”——班级最低分,“sor t”——对该班学习成绩排序
(d)“A”、”B”、”C”、”D”、”E” 键把学生成绩分成A、B、C、D、E 5个等级分别输出,
PS:实验数据为Access数据库文件school1.mdb,数据库中有几个表
格,其中表csscore保存了一个班学生的考试成绩,如下图所示。

实验二 计算器的使

实验二  计算器的使
实验二 计算器的使用及统计 假设测验
ห้องสมุดไป่ตู้
计算器的使用及统计假设测验
• 一、目的要求 • 掌握利用计算器进行统计假设测验的方法; 掌握使用计算器进行统计运算的方法。 • 二、实验材料及用具 • P97:5.9和5.10,统计计算器。
计算器的使用及统计假设测验
• 三、实验步骤 • (一)统计计算器的实用方法 • 将计算器置于统计功能状态下,显示屏上出现 DEG SD 符号(有的计算器显示 STAT 符号) → 顺序按 INV 、 AC 键,进行"清零"。
计算器的使用及统计假设测验
• 进行变量输入。按下一个变量值,再按变量输入 键(最下面一排黑色键的最右边键,即 data 键),依次将变量输完即可 → 直接按统计数值 键(最下面一排灰色键)即可依次读出 Σx2、 Σx 、 n δn(没使用自由度的标准差)、 δn1(使用自由度 n-1 的标准差)。
计算器的使用及统计假设测验
• (二)统计假设测验 • 提出假设 • 规定显著水平 • 计算 • 统计推断
计算器的使用及统计假设测验
• 在输入变量过程中,如果某个变量输错,但还未 按下变量输入键时,可以按 C 键(部分清除键), 然后再输入正确变量即可。第二种情况:在输入 变量过程中,如果某个变量输错,但已经按下变 量输入键,这时可以依次按 INV 键和变量输入键 data 即可剔除已输入的错误变量,然后再输入正 确变量即可。

简易计算器实验详细过程

简易计算器实验详细过程

简易计算器实验详细过程硬件环境:软件环境:WinXP+VC++6.0一、实验目的:构造一个类似Windows自带的计算器一样的简易计算器,能够连续进行加、减、乘、除四则整数运算,并能随时清除计算结果进行下一次计算。

二、具体实验步骤:1、添加编辑框对应的变量m_Display2、添加运算符类型变量char CompuType; //用于存储运算符类型CString FirstInput; //用于保存运算符前面的输入值3、添加各种按钮的单击事件处理方法的函数控件名称列表:主对话框标识:IDD_CALC_DIALOG关于对话框标识:IDD_ABOUTBOX编辑框:IDC_EDIT运算符按钮标识:加:IDC_BUTTONADD减:IDC_BUTTONSUBTRACT乘:IDC_BUTTONMULTIPL Y除:IDC_BUTTONDIVIDE等于:IDC_BUTTONEQUER0~9数字符按钮标识:7:IDC_BUTTONSEVEN8:DC_BUTTONEIGHT9:IDC_BUTTONNINE4:IDC_BUTTONFOUR5:IDC_BUTTONFIVE6:IDC_BUTTONSIX1:C_BUTTONONE2:IDC_BUTTONTWO3:IDC_BUTTONTHREE0:IDC_BUTTONZERO清除按钮标识:IDC_BUTTONCLEAR关于按钮标识:IDC_BUTTONABOUT类的成员变量:class CCalcDlg : public CDialog{// Constructionpublic:char CompuType; //用于存储运算符类型CCalcDlg(CWnd* pParent = NULL); // standard constructor //… (省略)protected:CString FirstInput; //用于保存运算符前面的输入值//… (省略)};按钮单击的事件对应方法程序列表:void CCalcDlg::OnButtonone(){// TODO: Add your control notification handler code herem_Display = m_Display+_T("1");UpdateData(FALSE);}void CCalcDlg::OnButtontwo(){// TODO: Add your control notification handler code herem_Display = m_Display+_T("2");UpdateData(FALSE);}void CCalcDlg::OnButtonthree(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("3");UpdateData(FALSE);}void CCalcDlg::OnButtonfour(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("4");UpdateData(FALSE);}void CCalcDlg::OnButtonfive(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("5");UpdateData(FALSE);}void CCalcDlg::OnButtonsix(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("6");UpdateData(FALSE);}void CCalcDlg::OnButtonseven(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("7");UpdateData(FALSE);}void CCalcDlg::OnButtoneight(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("8");UpdateData(FALSE);}void CCalcDlg::OnButtonnine(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("9");UpdateData(FALSE);}void CCalcDlg::OnButtonzero(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("0");UpdateData(FALSE);}void CCalcDlg::OnButtonadd(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='+';}void CCalcDlg::OnButtonsubtract(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='-';}void CCalcDlg::OnButtondivide(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='/';}void CCalcDlg::OnButtonmultiply(){// TODO: Add your control notification handler code hereFirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='*';}void CCalcDlg::OnButtonequer(){// TODO: Add your control notification handler code hereint TempResult; //定义存储结果的临时变量int FirstInputValue,NewInputValue; //定义进行运算的临时变量FirstInputValue=atoi(FirstInput.GetBuffer(24)); //将字符串变量转换成整型值FirstInput.ReleaseBuffer(-1);NewInputValue=atoi(m_Display.GetBuffer(24)); //将字符串变量转换成整型值m_Display.ReleaseBuffer(-1);switch(CompuType) //开关语句判断运算符类型{case '+':TempResult = FirstInputValue + NewInputValue; //将加法运算结果传给出临时变量TempResultbreak;case '-':TempResult = FirstInputValue - NewInputValue; //将减法运算结果传给出临时变量TempResultbreak;case '*':TempResult = FirstInputValue * NewInputValue; //将乘法运算结果传给出临时变量TempResultbreak;case '/':TempResult = FirstInputValue / NewInputValue; //将除法运算结果传给出临时变量TempResultbreak;}sprintf(m_Display.GetBuffer(24),"%d",TempResult); //将运算结果变量值传递给出编辑控件变量m_Displaym_Display.ReleaseBuffer(-1);UpdateData(FALSE); //刷新编辑控件变量,并在编辑框中显示运算结果}void CCalcDlg::OnButtonclear(){// TODO: Add your control notification handler code herem_Display.Empty(); //清空存储在变量m_Display中的数据UpdateData(FALSE);}void CCalcDlg::OnButtonabout(){// TODO: Add your control notification handler code hereCAboutDlg DlgAbout;DlgAbout.DoModal();}。

嵌入式实验报告-简易计算器

嵌入式实验报告-简易计算器

1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器2实验要求(1)数字和结果用数码管显示。

(2)数字、+—*/、=、C用4X4键盘实现。

(3)计算结果正确,有出错提示。

二实验原理框图基本工作原理:本设计利用数码管和4*4 矩阵式键盘实现了简易计算器的功能。

接通电源,数码管显示全0。

计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。

进行第二次运算时,按 C 键清除键盘结果。

当计算出现错误时,LED 灯亮报警。

当计算结果超出数码管显示出现溢出时,报警电路也会报警。

报警输出为-- 。

四系统软件设计1. 数据输入模块原理:通过4*4 矩阵模块输入数字,在数码管上显示出来。

2. 运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。

3. 输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。

当输出结果溢出是LED亮四次,同时数码管显示都为-- 。

五实验调试首先按清零键清零。

然后进行调试。

输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88 。

若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警, 同时数码管显示都为--。

如输入999999加上2,结果就溢出,LED灯亮四次报警。

六程序#include "LPC2468.h" /* LPC24xx definitions */#include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h" extern BYTE seg_buf[50]; // LPC2468 开发板使用此数组的 0~5 显示六个数 码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];extern BYTE KEY; // LPC2468 开发板使用此数组的 0~5 显示六个数码管; LPC2478板 使用 1~6 enum { Add =1, Dec, Mut, Div, nofuntion}funtion;********* ** Main Function main()********************************************************************* int main (void) {unsigned long Num1 =0;/*第一个输入的数字 */ unsigned long Num2 =0;/*第二个输入的数字 */ unsigned long Num3 =0;/*第二个输入的数字*/计算输入的数字的个数,超过 6 个则报警, 允许输入数字标志 */ 允许输入数字标志 */ 运算功能 */unsigned char Ne_num = 0;/* 负数标志 */DWORD value=0,i=0;TargetResetInit(); enable_timer(1);SPI_Init(8); // Seg_Init(); // LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0; seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1; funtion_type = nofuntion;while ( 1 ){value = KEY;/* 输入数字 */ if(value>0 && value<11)if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){ unsigned char counter = 0; /* 运算结果超过 6 位数也报警 */unsigned char cal_allow = 1; /*unsigned char input_allow = 1;/* unsigned char funtion_type = 0;/* SPI 总线速率为28.8/8 = 3.6 MHz 数码管初始化seg_buf[counter+1-i] = seg_buf[counter-i];}seg_buf[1] = value-1;} counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/* 如果是“ C”键,则清除显示,清除计算标志*/ if(value == 11){for(i=0;i<7;i++){ seg_copy1[i]=0; seg_copy2[i]=0;seg_buf[i]=0;counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/* 负数标志*/ funtion_type = nofuntion;}/* 如果是“ +”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/* 备份第一次输入的数字*/ seg_buf[i]=0; /* 字*/}funtion_type = Add;counter = 0; /* cal_allow=1; /* input_allow = 1; /* }else{ 计数器清零允许第二次计数*/ 再等号按下前不能再按第二次*/ 允许第二次输入数据*/input_allow = 0; /* 禁止按下2 次功能键时候输入数据*/显示清零以准备第二次输入数}/* 如果是“ - ”键,则显示结果*/ if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*seg_buf[i]=0; /* 字*/}funtion_type = Dec;counter = 0; /*cal_allow =1; /*input_allow = 1; /*}else{input_allow = 0; /*}}备份第一次输入的数字*/显示清零以准备第二次输入数计数器清零允许第二次计数*/ 再等号按下前不能再按第二次*/ 允许第二次输入数据*/禁止按下 2 次功能键时候输入数据*//* 如果是“X”键,则显示结果*/ if(value == 15 && cal_allow == 1) {if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] seg_buf[i]=0; = seg_buf[i];/*/*备份第一次输入的数字 */ 显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /* 计数器清零允许第二次计数 */cal_allow =1; /* 再等号按下前不能再按第二次 */input_allow = 1 } else {input_allow =; /*允许第二次输入数据 */; /* 禁止按下 2 次功能键时候输入数据 */}} /* 如果是“ / ”键,则显示结果 */if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字 */ seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数 */ cal_allow =1; /*再等号按下前不能再按第二次 */ }else{input_allow = 0; /* 禁止按下2 次功能键时候输入数据*/}}/* 如果是“ =”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/* 拷贝第二次输入的数字*/}/* 把输入的数字串1 合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+ seg_copy1[4]*1000 +seg_copy1[3]*100+ seg_copy1[2]*10 +seg_copy1[1];/* 把输入的数字串2 合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+ seg_copy2[4]*1000 +seg_copy2[3]*100+ seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:Num1 = Num1+Num2;/* break;}case Dec:{if(Num1==Num2) Num1 = 0; else if(Num1>Num2) {Num3 = Num1-Num2;/* Num1 = Num3;}else if(Num2 > Num1) {Num3 = Num2-Num1; Ne_num =1;Num1 = Num3;} break;}case Mut:{Num3 = Num1*Num2;/* 计算结果存在 Num1 中*/ Num1 = Num3;break;}case Div:if(Num1>=Num2&&Num2!=0) {Num3 = Num1/Num2;/* 计算结果存在 Num1 中 */ } 计算结果存在Num1中*/ 计算结果存在Num1中*/Num1 = Num3;break;} default:break;}/* 显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/* 显示横杠表示计算溢出错误!*/ }for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/* 显示负号*/}}} delayMs(1,200);*********End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

简单计算器—实训报告

简单计算器—实训报告

Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。

用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。

3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 147. 实训中遇到的主要问题及解决方法 ---------------- 158. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。

简易计算器实验报告

简易计算器实验报告
2.系统软件设计
2.1 设计目标和实现方法
为了满足简易计算器的基本要求,可以进行基本的加、减、乘、除运算以及数据归零操作,我们采用基于51单片机设计计算器,并用七段共阴极LED数码管显示数据,4*4的矩阵键盘实现数据的输入。
2.2 整体方案论述
根据简单计算器的功能和本方案中的设计指标要求,本系统选用了MCS 51单片机为主控机。通过扩展必要的外围接口电路,实现对简单计算器的设计。具体设计考虑如下:
现如今,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店、办公室、学校……因此设计一款简单实用的计算器会有很大的实际意义。
本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。通过本设计的学习,使我掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决毕业设计实际问题的能力,为单片机应用和开发打下良好的基础。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用此振动器。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
综上所述我们在本方案中选用了上电自动复位电路。
上位自动复位电路图和手动复位电路图如下图
如图3—1两种复位方式
3.2 时钟振荡电路的设计
能够产生振荡电流的电路叫做振荡电路。一般由电阻、电感、电容等元件和电子器件所组成。由电感线圈l和电容器c相连而成的lc电路是最简单的一种振荡电路,其固有频率为f=[sx(]1[]2πlc。 § 一种不用外加激励就能自行产生交流信号输出的电路。它在电子科学技术领域中得到广泛地应用,如通信系统中发射机的载波振荡器、接收机中的本机振荡器、医疗仪器以及测量仪器中的信号源等。

北京理工大学 数据结构 实验报告 实验二 简易计算器

北京理工大学 数据结构 实验报告 实验二  简易计算器

实验二简易计算器姓名:任子龙学号:1120140167 班级:05111451一.需求分析1.程序要求可对一实数算术表达式进行简单的数学运算,可以识别带+、-、*、/、%、^(乘方)等等运算符及括号的中缀表达式,从键盘上输入一算术表达式(一般为中缀表达式),计算出表达式的值。

2.按照四则运算规则,求表达式的值。

一般规则如下:1)先括号内,再括号外。

2)先乘方,再乘除,后加减。

b.同级运算从左到右顺序执行。

3.有良好的提示信息,引导用户在键盘上输入规定的运算指令;如表达式有误,也应给出相应的提示信息。

4.建立两个工作栈,分别保存运算符,操作数或运算结果。

二.概要设计1.抽象数据类型的定义为实现上述功能,建立两个工作栈;算符为字符型变量,算数为单精度浮点型变量,则需要定义两种数据类型分别存储。

typedef struct StackChar{char c;struct StackChar*next;}SC;typedef struct StackFloat{float f;}SF;2.本程序包含两个模块(1)主程序模块主函数只包含了输入输出部分。

流程为:首先输入算式,然后调用算符优先算法函数EvaluateExpression(s)进行计算,结果输出;然后循环下去,直到输入OUT指令,退出程序;(2)链栈单元模块——实现栈的链式存储的抽象数据类型。

各函数之间的调用关系:三.详细设计1.结点类型typedef struct StackChar{char c;struct StackChar*next;}SC;float f;struct StackFloat*next;}SF;2.子函数(1)算符优先算法的主干函数float EvaluateExpression(char*e)实现算符优先算法主干的函数。

首先判断是算符还是算数,如果是算符,与算符栈栈顶元素进行优先级比较,如果该算符优先级比原栈顶元素优先级高,则进栈,否则进行运算;如果是算数,则入算数栈。

简易计算器实训报告(一)

简易计算器实训报告(一)

简易计算器实训报告(一)简易计算器实训报告实训目的本次简易计算器实训的目的在于让学生了解python语言的基本语法和运算符,同时通过实践操作,提升学生的编程思维和实际应用能力。

实训内容本次实训内容主要包括以下方面:1.简易计算器的基本功能:加、减、乘、除。

2.计算器的界面设计与功能实现。

3.错误处理与异常捕获。

实训步骤步骤一:设计计算器界面在本次实训中,我们采用tkinter库来设计计算器的用户界面。

具体步骤如下:1.创建一个窗口;2.在窗口中添加各种按钮和文本框,用于输入和显示计算结果;3.将按钮按照功能分类,为每个按钮设置对应的事件处理函数。

步骤二:实现基本计算功能根据下拉菜单中所选的运算符,我们可以对输入的两个数进行相应的计算。

具体实现方法如下:1.在计算器窗口中添加一个下拉菜单,用于选择运算符;2.根据所选运算符,获取相应的输入数据,并调用对应的计算函数;3.将计算结果输出到窗口中。

步骤三:错误处理与异常捕获在实际应用中,我们不能保证用户输入的一定是数字,所以我们需要对输入做一些错误处理。

具体方法如下:1.在获取用户输入时,先对输入的字符串进行判断,如果用户输入不合法,弹出提示窗口;2.对于除数为0等异常情况进行相应的异常捕获处理,避免程序崩溃。

实训总结通过本次实训,我们学习了python语言的基本语法和运算符,并通过实践操作,学习了tkinter库的使用方法。

通过本次实训,我们还深入了解了计算器的界面设计和功能实现过程。

此外,我们也学会了一些常用的错误处理和异常捕获方法。

未来拓展本次实训只是简易计算器的基本实现,还有很多可以拓展的功能,如:1.添加科学记数法、三角函数、对数函数、平方根等高级数学运算;2.设计多个数字输入框,实现多操作数的计算;3.添加历史记录功能,记录用户计算过程和结果;4.将计算器移植到移动设备或网页上,提供更为便捷的计算服务。

5.添加输入历史记录及回显功能,便于用户查错和复查。

简易计算器实验报告

简易计算器实验报告

目录1.概述 (1)2.系统软件设计 (1)2.1设计目标和实现方法 (1)2.2整体方案论证 (1)3.系统硬件的设计 (2)3.1复位电路的设计 (2)3.2时钟振荡器电路的设计 (3)3.3输入电路的设计 (4)3.4输出电路的设计 (7)4.系统程序的设计与介绍 (9)4.1读键输入程序流程图设计 (9)4.2 LED显示程序流程图设计 (11)4.3主程序流程图设计 (12)5.程序设计体会........................................... . (12)附 1 源程序代码 (14)附 2 计算器电路图 (24)1.概述随着社会的发展, 科学的进步, 人们的生活水平在逐步地提高, 尤其是微电子技术的发展犹如雨后春笋般的变化。

电子产品的更新速度快就不足惊奇了。

计算器在人们的日常中是比较常见的电子产品之一, 如何使计算器技术更加的成熟, 充分利用已有的软件和硬件条件, 设计出更出色的计算器, 使其更好地为各个行业服务, 成了如今电子领域重要的研究课题。

1、现如今, 人们的日常生活中已经离不开计算器了, 社会的各个角落都有它的身影, 比如商店、办公室、学校……因此设计一款简单实用的计算器会有很大的实际意义。

2、本设计旨在进一步掌握单片机理论知识, 理解嵌入式单片机系统的硬软件设计, 加强对实际应用系统设计的能力。

通过本设计的学习, 使我掌握单片机程序设计和微机接口应用的基本方法, 并能综合运用本科阶段所学软、硬件知识分析实际问题, 提高解决毕业设计实际问题的能力, 为单片机应用和开发打下良好的基础。

对字符液晶显示模块的工作原理, 如初始化、清屏、显示、调用及外特性有较清楚的认识, 并会使用LCD(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程, 设计LCD和单片机的接口电路, 以及利用单片机对液晶显示模块的驱动和操作;在充分分析内部逻辑的概念, 进行软件和调试, 学会使用, 并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。

《动手做》数学教案二:教你制作简易计算器

《动手做》数学教案二:教你制作简易计算器

今天我们来学习如何制作一个简易的计算器。

这个计算器可以进行加、减、乘、除四种基本运算,除此之外还可以进行开方和取模运算。

它的界面简洁、易于操作,是我们日常生活中必不可少的工具。

让我们来了解一下计算器的基本原理。

计算器主要由两个部分组成:输入和输出。

在输入方面,我们需要一个键盘。

而在输出方面,我们需要一个屏幕来显示结果。

同时,我们还需要一个小小的计算机芯片来进行计算工作。

这样,我们就可以把它们连接起来,制作出一款真正的计算器了。

接着,让我们一步步地来制作这个计算器吧。

我们需要准备一块面包板、一些连线、一个电池盒和一个开关。

将电池盒安装在面包板上并与开关连接。

接下来,我们需要把计算机芯片插入面包板的相应位置,并用连线连接好各个引脚。

电路连接完毕后,我们就可以进行软件编程了。

在编程方面,我们可以使用Arduino。

Arduino是一个开源硬件平台,它能够帮助我们轻松实现各种功能。

在这里,我们需要安装Arduino IDE软件,并将我们的计算器代码写入其中。

代码如下:```#include <Keypad.h>const byte ROWS = 4; //使用4行/列输入键const byte COLS = 4;char keys[ROWS][COLS] = { //设定输入键{'1','2','3','+'},{'4','5','6','-'},{'7','8','9','*'},{'C','0','=','/'}};byte rowPins[ROWS] = {9, 8, 7, 6}; //设定输入键的行和列byte colPins[COLS] = {5, 4, 3, 2};Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //生成键盘int num1 = 0;int num2 = 0;char op = ' ';void setup() {Serial.begin(9600);}void loop() {char key = keypad.getKey();if (key){Serial.println(key);if(key >= '0' && key <= '9'){ if(op == ' '){num1 *= 10;num1 += key - '0';} else if(op == '+'){num2 *= 10;num2 += key - '0';} else if(op == '-'){num2 *= 10;num2 += key - '0';} else if(op == '*'){num2 *= 10;num2 += key - '0';} else if(op == '/'){num2 *= 10;num2 += key - '0';}} else if(key == '+'){op = '+';} else if(key == '-'){op = '-';} else if(key == '*'){op = '*';} else if(key == '/'){op = '/';} else if(key == '='){if(op == '+'){Serial.println(num1 + num2);} else if(op == '-'){Serial.println(num1 - num2);} else if(op == '*'){Serial.println(num1 * num2);} else if(op == '/'){Serial.println(num1 / num2);}num1 = 0;num2 = 0;op = ' ';} else if(key == 'C'){num1 = 0;num2 = 0;op = ' ';}}}```通过这段代码,我们可以实现计算器的基本功能。

实验2:简单的算数运算器

实验2:简单的算数运算器

实验2:简单的算数运算器一、目的与意义1.了解数据类型转换的意义和方法。

2.体验类监听器的用途和实现方法。

3.理解事件处理的基本过程。

4.理解界面布局的意义和方法。

5.掌握内部类、匿名类的使用方法。

二、内容与要求在MyEclipse环境下,完成程序的编写、调试和运行。

三、程序源代码import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*;class MyWin_3extends JFrame{JTextField n1,n2,n3;JButton b1,b2,b3,b4;MyWin_3(){setVisible(true);n1=new JTextField(10);n2=new JTextField(10);n3=new JTextField(10);n3.setEditable(false);b1=new JButton("+");b2=new JButton("-");b3=new JButton("*");b4=new JButton("/");setLayout(new GridLayout(5,2));add(new JLabel("N1:"));add(n1);add(new JLabel("N2:"));add(n2);add(new JLabel("result:"));add(n3);add(b1);add(b2);add(b3);add(b4);b1.addActionListener(new ActionListener(){@Overridepublicvoid actionPerformed(ActionEvent e) {int r=Integer.parseInt(n1.getText().toString())+Integer.parseInt (n2.getText().toString());n3.setText(String.valueOf(r));}});b2.addActionListener(new ActionListener(){@Overridepublicvoid actionPerformed(ActionEvent e) {intr=Integer.parseInt(n1.getText().toString())-Integer.parseInt(n2.getText().toString());n3.setText(String.valueOf(r));}});b3.addActionListener(new ActionListener(){@Overridepublicvoid actionPerformed(ActionEvent e) {intr=Integer.parseInt(n1.getText().toString())*Integer.parseInt(n2.getTe xt().toString());n3.setText(String.valueOf(r));}});b4.addActionListener(new ActionListener(){@Overridepublicvoid actionPerformed(ActionEvent e) {intr=Integer.parseInt(n1.getText().toString())/Integer.parseInt(n2.getTe xt().toString());n3.setText(String.valueOf(r));}});}publicstaticvoid main(String[] args) {new MyWin_3();}}四、运行结果初始界面:输入数据并点击+按钮后的界面:五、实验总结界面布局、监听器、事件处理是Java程序设计的重要内容,掌握界面布局、监听器、事件处理是掌握Java面向对象程序设计的基础。

实验二 计算器

实验二 计算器

实验二计算器
一、项目目标
1、设计一个计算器,外观和windows附件中的计算器类似,要求实现数字按钮、+、-、*、/、清空键、退格键等键的click 事件代码。

(计算器外观用代码实现)
2、设计一个计算器界面,外观和windows附件中的计算器外观尽量一致。

(计算器外观采用拖动控件的方式设计)
3、比较这两种方式的特点。

二、项目要求
项目1要求:
1、使用awt或swing的类实现计算器的各个控件,包括框架、文本框、按钮等。

2、所有的按钮由于大小、颜色等很多属性都一致,因此最好使用数组设计。

3、设计数字键、+、-、*、/等运算符、C键、退格键等的click 事件。

4、数字键按钮的事件代码
A、当按数字键时,文本框中将显示该数字并将该数字接到已有数字的后面
B、当按了运算符按钮或等号按钮后,再按数字键,该文本框中已有的数字将删除,该数再显示到文本框
5、运算符+按钮的事件代码
A、当第一次按运算符键时,文本框中不会有任何改变,但是要将文本框中的数字记录到一个变量(比如num)中,并用一个逻辑变量记录这个键已经按了(比如press=true)
B、当press=true时,再按运算符键时,就将num中的数字与文本框中的数字相加。

并将和显示到文本框中。

项目2要求:
该项目要求设计出来的计算器外观要做到和附件中计算器的外观非常相似。

三、代码思路及实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验2
说明:从下列2个实验题目中任选一个。

1、简易计算器(栈)
(1)问题描述
通过模拟一个简单的计算器来进行+、-、*、/、%、^(乘方)等运算,从键盘上输入一算术表达式(一般为中缀表达式),计算出表达式的值。

(2)基本要求
编写程序,要求可对一实数算术表达式进行简单的数学运算。

可以识别带加减乘除等运算符及括号的中缀表达式。

a. 按照四则运算规则,求表达式的值。

一般规则如下:
1)先括号内,再括号外。

2)先乘方,再乘除,后加减。

b. 同级运算从左到右顺序执行。

c.如表达式有误,应给出相应的提示信息。

(3)数据结构与算法分析
解决表达式求值问题的方法之一是:第一步将中缀表达式转换为后缀表达式,第二步按后缀表达式求值。

解题时可以结合字符串的相关知识。

(4)测试
4.5+5+6.5*1.06=16.39
2、停车场
(1)问题描述
一个汽车厂要将生产的汽车停放到停车场,设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序依次排序,若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆要离开时,在其之后开入的车辆必须先退出停车场让路,待该辆车开出大门外,其他车辆再按原次序进入停车场,每辆停放在停车场在其离开停车场时必须按其停留的时间长短交纳费用。

按上述要求试编写一停车场管理模拟程序。

(2)具体要求
该程序要求能够记录车辆的基本信息(如:汽车编号)、车辆到达时间、车辆所在位置、车辆离开时间等。

为了便于叙述车辆所在的位置,将狭长通道称“停车位”,将门外的便道称“便道”。

具体要求如下:
a. 车辆进入停车场管理功能:记录进入停车场的车辆的汽车编号、进入的时间、进入的车位,并将结果显示在屏幕上。

b. 车辆离开停车场管理功能:记录离开停车场车辆的车牌号、离开时间,同时修改相关车辆的状态。

c. 查询停车场停车状态功能:在屏幕上显示停车位及便道上各位置的状态。

(3)数据结构与算法分析
使用一个顺序栈来描述停车位,为每个停车位分配一个固定的编号,如设置停车位1、停车位2、停车位3……。

进入停车场的车要顺序停放。


有车要进入停车位时,先判断栈中是否已满,即判断是否有空的停车位。

如栈未满,则进行入栈操作,即车辆进入停车场;如果栈已满,则不能进行入栈操作,车辆进不了停车场,车辆必须进入便道等待。

a. 当某辆车要离开时,比它后进入的车要先退出,暂时离开停车位。

b.使用一个队列来描述便道,为便道上的每个位置分配一个固定编号,如可用便道1、便道2、便道3、……表示。

当停车场已满时,再到来的车辆按先后次序顺序存放在便道上。

当有车从停车位离开时,停在便道上的第一辆车进入停车位。

(4)测试。

相关文档
最新文档