编译原理一个简单的计算器程序
- 格式:docx
- 大小:44.65 KB
- 文档页数:4
简易计算器程序源代码下面是一个简易计算器程序的源代码,它可以执行基本的四则运算:```python#定义加法函数def add(x, y):return x + y#定义减法函数def subtract(x, y):return x - y#定义乘法函数def multiply(x, y):return x * y#定义除法函数def divide(x, y):if y == 0:return "除数不能为0"else:return x / y#显示菜单print("选择操作:")print("1. 相加")print("2. 相减")print("3. 相乘")print("4. 相除")#获取用户输入choice = input("输入你的选择(1/2/3/4): ")#获取用户输入的两个数字num1 = float(input("输入第一个数字: "))num2 = float(input("输入第二个数字: "))#根据用户选择执行相应操作if choice == '1':print(num1, "+", num2, "=", add(num1, num2))elif choice == '2':print(num1, "-", num2, "=", subtract(num1, num2)) elif choice == '3':print(num1, "*", num2, "=", multiply(num1, num2)) elif choice == '4':print(num1, "/", num2, "=", divide(num1, num2))else:print("请输入有效的选择")```运行这个程序,你将看到一个简易的计算器菜单。
8086汇编语⾔实现简易计算器8086汇编语⾔实现简易计算器本周看了⼀个很有意思的知识。
C语⾔的编译器最初是怎么来的?最初应该是由汇编语⾔实现⼀个简化版C语⾔,然后使⽤简化版的C语⾔进⾏多次迭代,功能更新,从⽽出现了如今强⼤的C语⾔。
本⼈找到了⼀个古⽼的课程设计,当时学汇编时候的⼀个⼩demo分享出来。
1.概述为了更深⼊地理解计算机⼯作原理以及CPU的功能和结构,掌握汇编语⾔的使⽤。
本⽂以简易计算器程序的汇编语⾔实现为主要任务,进⾏对程序的⼀些算法和汇编语⾔语法的论述。
计算器是最简单的计算⼯具,简单计算器具有加、减、乘、除四项运算功能。
想要⽤汇编语⾔实现简单的计算器,就必须通过对数据存储,寄存器的使⽤,加减乘除相关指令以及模块的调⽤等汇编语⾔知识进⾏运⽤,以实现⼀个基本功能完善,界⾯友好,操作简便易⾏的计算器。
⽤汇编语⾔实现简单计算器还涉及到输⼊输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。
通过对各种指令的合理使⽤,设计各个功能模块。
当实现各个程序模块后,通过程序的调⽤最终实现⼀个简单的计算器。
本⽂以⽤8086汇编语⾔实现简易计算器为⽬标,对程序的算法以及结构进⾏分析和解释。
汇编语⾔的语句类型有指令语句、伪指令语句和宏指令语句。
在实现简易计算器的过程中暂不需要宏指令语句,故对此语句不进⾏介绍。
计算器的实现需要使⽤输⼊输出,DOS系统的01H,02H,09H号调⽤可以完成所需功能。
由于简易计算器对结果没有很⾼的范围要求,故对四则运算只需考虑ADD,SUB,MUL,DIV等指令。
在计算器中,输⼊的是10进制数字,⽽在汇编语⾔中读⼊字符只能⼀位⼀位的读取,故需要使⽤MUL设置⼀个循环算法,将输⼊的数字以16进制形式放⼊寄存器中,⽽输出则是使⽤MOD设置⼀个循环算法,将16进制转化为10进制后处理为ASCII码进⾏输出。
2.程序算法结构简易计算器程序的任务主要有处理输⼊数据,选择运算⽅式进⾏计算,显⽰算式结果。
汇编语⾔实现简单的计算器运算汇编语⾔实现简单的计算器运算DA TAS SEGMENTx dw 0op db 0DIV ARRAY dw 10000,1000,100,10,1DA TAS ENDSstack segmentdb 100 dup(?)stack endsCODES SEGMENTASSUME CS:CODES,DS:DA TAS,ss:stack START:MOV AX,DATASMOV DS,AXnext:call do_cal ;输⼊第⼀个表达式如:5+3=call show ;输出表达式结果mov dl,0dhmov ah,02hint 21hmov dl,0ahmov ah,02hint 21h ;回车换⾏jmp next ;跳回输⼊第⼆个表达式do_cal: ;输⼊表达式call input ;输⼊数cmp al,'e'jz exitMOV OP,ALCMP OP,'+'jnz next1call do_addjmp next5CALL DO_SUBJMP NEXT5NEXT2:CMP OP,'*'JNZ NEXT3CALL DO_MULJMP NEXT5NEXT3:CMP OP,'/'JNZ NEXT4CALL DO_DIVjmp next5NEXT4:cmp op,'='call shownext5:ret ;判断运算符input: ;输⼊数字xor bx,bx mov cx,10skip: MOV AH,1INT 21Hcmp al,'0'jl skip1cmp al,'9'jg skip1push axmov ax,bxmul cxmov bx,axpop axand al,0fhxor ah,ahadd bx,axjmp skipcall input ;输⼊第⼆个数add bx,xretdo_sub: ;减法mov x,bxcall input ;输⼊第⼆个数sub x,bxmov bx,xretdo_mul: ;乘法mov x,bxcall input ;输⼊第⼆个数mov ax,bxmul xmov bx,axretdo_div: ;除法mov x,bxxor dx,dxcall input ;输⼊第⼆个数mov ax,xcwddiv bxmov bx,axretshow: ;显⽰输出MOV CX,5MOV AX,bxMOV SI,OFFSET DIV ARRAY LP1: mov dx,0 DIV WORD PTR [SI]PUSH DXADD AL,30Hadd si,2POP AXLOOP LP1retexit: MOV AH,4CH INT 21H CODES ENDS END START。
c语言制作简单的计算器在计算机编程领域中,C语言是一种广泛使用的编程语言之一。
它具有简单易学的特点,并且能够进行复杂的计算和逻辑处理。
今天,我们就来学习一下如何使用C语言来制作一个简单的计算器。
首先,我们需要明确我们计算器的功能和界面设计。
本次制作的计算器将具有基本的四则运算功能,即加法、减法、乘法和除法。
我们将在控制台中实现计算器的操作,并通过简单的用户界面进行交互。
接下来,我们需要创建一个C语言程序的框架。
首先,我们需要包含头文件,以便在程序中使用各种函数和变量。
我们可以使用"#include" 来引入头文件,例如:```c#include <stdio.h>```然后,我们需要定义主函数 `main()`。
在这个函数中,我们将编写计算器的逻辑代码。
让我们开始编写函数吧!首先,我们需要声明一些变量来存储用户输入的数字和运算符。
我们可以使用 `int` 来定义整数变量,并用 `char` 定义字符变量。
例如:```cint num1, num2, result;char operator;```接下来,我们需要提示用户输入要进行的运算,并读取用户输入的数字和运算符。
我们可以使用 `printf` 和 `scanf` 函数来完成这个任务,例如:```cprintf("请输入第一个数字: ");scanf("%d", &num1);printf("请输入运算符(+, -, *, /): ");scanf(" %c", &operator);printf("请输入第二个数字: ");scanf("%d", &num2);```注意,我们在读取运算符之前添加了空格,这是为了消除输入缓冲区中可能残留的换行符等字符。
接下来,我们需要编写代码来进行实际的计算操作。
Go编译原理实现计算器(测试驱动讲解)本⽂不需要你掌握任何编译原理的知识。
只需要看懂简单的golang语⾔即可,完整的代码⽰例在, 代码是从这本书抽取了简单的部分出来, 如果需要进⼀步了解,请详阅此书.听到编译原理,就觉得很⾼⼤上。
记得上⼤学时,这门课要记忆⼀些BNF,LEX,AST,CFG这些有的没的。
⼀个听不懂,⼆个没兴趣。
随着使⽤了⼏门语⾔之后,也尝试⽤编译原理的基本知识写过⼀个sql转es的⼯具之后。
发现其实了解⼀点点编译原理的知识,能够提⾼我们的⽣产效率,做出⼀些很酷的⼩⼯具来。
本⽂将⽤golang和编译原理的基本技术实现⼀个计算器。
虽然功能简单,⽹上也有很多⼈做过类似事情,但这篇博客会有三个优点:我暂时没有找到有⼈⽤golang写我会⽤最直⽩的语⾔去描述我们要做什么,这样当你阅读的时候,会发现该步骤和书中哪⼀步是对应的,帮助你更好的理解编译原理的知识。
我会⽤测试驱动整个博客和代码,会让⼤家看到如何慢慢得演化出这个计算器得解释器。
就像⼩说中⼈物的⿊化有⼀个发酵的过程才会好看,我希望在本⽂中能够让读者看到⼀个解释器编写发酵的过程。
⽬标整体会实现⼀个函数,输⼊⼀个String, 输出⼀个int64。
// calc.gofunc calc(input string) int64 {}⽽我们的终极⽬标是能够让我们的calc的⽅法能够通过以下的测试// calc_test.gofunc TestFinal(t *testing.T) {tests := []struct{input stringexpected int64}{{"5", 5},{"10", 10},{"-5", -5},{"-10", -10},{"5 + 5 + 5 + 5 - 10", 10},{"2 * 2 * 2 * 2 * 2", 32},{"-50 + 100 + -50", 0},{"5 * 2 + 10", 20},{"5 + 2 * 10", 25},{"20 + 2 * -10", 0},{"50 / 2 * 2 + 10", 60},{"2 * (5 + 10)", 30},{"3 * 3 * 3 + 10", 37},{"3 * (3 * 3) + 10", 37},{"(5 + 10 * 2 + 15 / 3) * 2 + -10", 50},}for _, tt := range tests{res := Calc(tt.input)if res != tt.expected{t.Errorf("Wrong answer, got=%d, want=%d", res, tt.expected)}}}我们运⾏这个测试,毫⽆疑问会失败。
如何使用Python编写一个简单的计算器前言:计算器是我们日常生活中经常使用的工具,它可以对数字进行各种运算。
现在,我们将介绍如何使用Python编写一个简单的计算器,以帮助我们更好地理解计算器的原理和实现。
一、了解计算器的基本功能在开始编写计算器之前,我们需要了解计算器的基本功能。
一个基本计算器通常具有加减乘除四则运算功能,并能够处理小数和负数。
同时,还可以实现一些其他常见的数学函数,例如开方、平方、取余等。
二、准备编程环境在编写计算器之前,我们需要准备好Python的编程环境。
首先,需要安装Python解释器。
你可以从Python官方网站下载适合你的操作系统的Python解释器,并按照官方提供的安装指南进行安装。
三、编写计算器的基本功能1. 实现加法功能首先,我们需要编写一个函数来实现加法功能。
以下是一个简单的加法函数的代码示例:```pythondef add(num1, num2):return num1 + num2```2. 实现减法功能接下来,我们可以编写一个函数来实现减法功能。
以下是一个简单的减法函数的代码示例:```pythondef subtract(num1, num2):return num1 - num2```3. 实现乘法功能然后,我们可以编写一个函数来实现乘法功能。
以下是一个简单的乘法函数的代码示例:```pythondef multiply(num1, num2):return num1 * num2```4. 实现除法功能最后,我们可以编写一个函数来实现除法功能。
以下是一个简单的除法函数的代码示例:```pythondef divide(num1, num2):return num1 / num2```四、完善计算器功能在上述代码的基础上,我们可以继续完善计算器的功能,使其更加实用。
1. 处理小数和负数为了能够处理小数,我们可以使用浮点数进行计算。
同时,我们还可以使用负数来实现减法和乘法的功能。
java 计算器编译原理下面是一个简单的Java计算器的示例代码:```javaimport java.util.Scanner;public class Calculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个操作数:");double operand1 = scanner.nextDouble();System.out.println("请输入运算符(+、-、*、/):"); String operator = scanner.next();System.out.println("请输入第二个操作数:");double operand2 = scanner.nextDouble();double result = 0;switch (operator) {case "+":result = operand1 + operand2;break;case "-":result = operand1 - operand2;break;case "*":result = operand1 * operand2;break;case "/":if (operand2 != 0) {result = operand1 / operand2;} else {System.out.println("错误:除数不能为0!");return;}break;default:System.out.println("错误:无效的运算符!");return;}System.out.println("计算结果为:" + result);}}```这个计算器程序首先从用户输入中获取第一个操作数、运算符和第二个操作数。
从零开始的程序编辑项目创建一个简单的计算器从零开始的程序编辑项目:创建一个简单的计算器计算器是我们日常生活中常见的工具,无论是进行简单的加减乘除运算还是复杂的科学计算,它都能满足我们的需求。
在本文中,我将教您从零开始创建一个简单的计算器程序,以便您可以在计算机上方便地进行各种计算。
第一步:项目规划在开始编写代码之前,我们需要先规划项目的结构和功能。
对于这个简单的计算器,我们需要实现以下功能:输入两个数字,选择运算符(加、减、乘、除),然后得到结果。
第二步:创建用户界面在这个项目中,我们可以使用Python编程语言和Tkinter库来创建用户界面。
Tkinter是Python的标准GUI开发库,它提供了创建窗口、按钮和文本框等基本组件的功能。
首先,导入Tkinter库:```pythonimport tkinter as tk```然后,创建一个名为"Calculator"的窗口:```pythonwindow = ()window.title("计算器")```接下来,我们可以在窗口中添加两个文本框用于输入数字,一个标签用于显示结果,并在窗口底部创建四个按钮用于选择运算符(加、减、乘、除)。
```pythonnum1_entry = tk.Entry(window)num1_entry.pack()num2_entry = tk.Entry(window)num2_entry.pack()result_label = bel(window, text="结果:")result_label.pack()add_button = tk.Button(window, text="+")add_button.pack(side="left")subtract_button = tk.Button(window, text="-")subtract_button.pack(side="left")multiply_button = tk.Button(window, text="×")multiply_button.pack(side="left")divide_button = tk.Button(window, text="÷")divide_button.pack(side="left")```最后,我们需要添加一个按钮,当用户点击时,调用计算函数并显示结果。
课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系输入一个简单运算表达式A=当前输入符号A是运算符吗?根据运算符的特点从栈顶部取出若干个运算对象进行该运算,将运果入栈将该字符入栈A=‘\0’程序结束是否是否图二表达式结果计算流程图结果与分析(可以加页):图三实现计算器加法功能图四实现计算器减法功能图五实现计算器乘法功能图六实现计算器除法功能图七实验计算器混合运算功能源代码:#include<stdio.h> #include<stdlib.h>#define MaxSize 99void translate(char str[],char exp[]){struct{char data[MaxSize];int top;}op;char ch;int i = 0,t = 0;op.top = -1;ch = str[i];i++;while(ch != '\0'){switch(ch){case '(':op.top++;op.data[op.top]=ch;break;case ')':while(op.data[op.top] != '('){exp[t]=op.data[op.top];op.top--;t++;}op.top--;break;case '+':case '-':while(op.top != -1&&op.data[op.top] != '('){exp[t] = op.data[op.top];op.top--;t++;}op.top++;op.data[op.top] = ch;break;case '*':case '/':while(op.data[op.top] == '/'||op.data[op.top] == '*'){exp[t] = op.data[op.top];op.top--;t++;}op.top++;op.data[op.top] = ch;break;case ' ':break;default:while(ch >= '0'&&ch <= '9'){exp[t] = ch;t++;ch = str[i];i++;}i--;exp[t] = ' ';t++;}ch = str[i];i++;}while(op.top != -1){exp[t] = op.data[op.top];t++;op.top--;}exp[t] = '\0';}float cal_value(char exp[]){struct{float data[MaxSize];int top;}st;float d;char ch;int t = 0;st.top = -1;ch = exp[t];t++;while(ch != '\0'){switch(ch){case '+':st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];st.top--;break;case '-':st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];st.top--;break;case '*':st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];st.top--;break;case '/':if(st.data[st.top] != 0)st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];else{printf("\n\terror");}st.top--;break;default:d=0;while(ch >= '0'&&ch <= '9'){d = 10*d+ch-'0';ch = exp[t];t++;}st.top++;st.data[st.top] = d;}ch = exp[t];t++;}return st.data[st.top];}int main(){char ch;while(1){char str[MaxSize],exp[MaxSize];printf("请输入一个表达式:\n");gets(str);printf("原表达式:%s\n",str);translate(str,exp);printf("逆波兰式:%s\n",exp);printf("计算机结果:%g\n",cal_value(exp));printf("continue y or n?:");scanf("%c",&ch);if(ch=='Y' || ch=='y'){gets(str);}else{break;}}//system("pause");return 0;}。
8086汇编语⾔实现简易计算器8086汇编语⾔实现简易计算器本周看了⼀个很有意思的知识。
C语⾔的编译器最初是怎么来的?最初应该是由汇编语⾔实现⼀个简化版C语⾔,然后使⽤简化版的C语⾔进⾏多次迭代,功能更新,从⽽出现了如今强⼤的C语⾔。
本⼈找到了⼀个古⽼的课程设计,当时学汇编时候的⼀个⼩demo分享出来。
1.概述为了更深⼊地理解计算机⼯作原理以及CPU的功能和结构,掌握汇编语⾔的使⽤。
本⽂以简易计算器程序的汇编语⾔实现为主要任务,进⾏对程序的⼀些算法和汇编语⾔语法的论述。
计算器是最简单的计算⼯具,简单计算器具有加、减、乘、除四项运算功能。
想要⽤汇编语⾔实现简单的计算器,就必须通过对数据存储,寄存器的使⽤,加减乘除相关指令以及模块的调⽤等汇编语⾔知识进⾏运⽤,以实现⼀个基本功能完善,界⾯友好,操作简便易⾏的计算器。
⽤汇编语⾔实现简单计算器还涉及到输⼊输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。
通过对各种指令的合理使⽤,设计各个功能模块。
当实现各个程序模块后,通过程序的调⽤最终实现⼀个简单的计算器。
本⽂以⽤8086汇编语⾔实现简易计算器为⽬标,对程序的算法以及结构进⾏分析和解释。
汇编语⾔的语句类型有指令语句、伪指令语句和宏指令语句。
在实现简易计算器的过程中暂不需要宏指令语句,故对此语句不进⾏介绍。
计算器的实现需要使⽤输⼊输出,DOS系统的01H,02H,09H号调⽤可以完成所需功能。
由于简易计算器对结果没有很⾼的范围要求,故对四则运算只需考虑ADD,SUB,MUL,DIV等指令。
在计算器中,输⼊的是10进制数字,⽽在汇编语⾔中读⼊字符只能⼀位⼀位的读取,故需要使⽤MUL设置⼀个循环算法,将输⼊的数字以16进制形式放⼊寄存器中,⽽输出则是使⽤MOD设置⼀个循环算法,将16进制转化为10进制后处理为ASCII码进⾏输出。
2.程序算法结构简易计算器程序的任务主要有处理输⼊数据,选择运算⽅式进⾏计算,显⽰算式结果。
1.实验目的
设计、实现一个简单的计算器程序
2.实验原理
2.1 多项式计算器的实现,采用后缀表达式来对输入的计算表达式进行计算。
2.2 对后缀表达式进行符号识别、词法分析、语法分析。
3.主要仪器设备
操作系统:WindowsXP
开发语言:Visual Studio C++6.0
4. 主要内容和步骤
将表达式转换为后缀表达式,编写程序源代码。
5.软件编程与设计
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 99
void translate(char str[],char exp[]) /*将算术表达式转换成后缀表达式*/
{
struct
{
char data[MaxSize];
int top; /*top为栈顶*/
}op; /*定义一个含data和top的结构体*/
charch;
inti = 0,t = 0;
op.top = -1;
ch = str[i]; /*将str的每一个数转换成ch*/
i++;
while(ch != '\0') /*ch对应不同的符号的时候对应的转换情况*/
{
switch(ch)
{
case '(': /*当是(的时候,将此括号存入栈op*/
op.top++;op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '(') /*括号内的转换优先级最高,故先提取表达式*/
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case '+':
case '-':
while(op.top != -1&&op.data[op.top] != '(')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++; /*恢复可插入位置*/
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '/'||op.top == '*') /*优先级*/
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case ' ': /*忽略空格,排除误操作*/ break;
default:
while(ch>= '0'&&ch<= '9')
{
exp[t] = ch;t++;
ch = str[i];i++;
}
i--;
exp[t] = '#'; /*分隔操作数,为了美观,也为了以后好分隔操作数*/ t++;
}
ch = str[i];
i++;
}
while(op.top != -1) /*得到剩下的部分*/
{
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0'; /*表达式结束*/
}
floatcal_value(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st; /*操作数栈*/ float d;
charch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;
while(ch != '\0')
{
switch(ch) /*运算主体*/
{
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{
printf("\n\t除0是错误的");
}
st.top--;
break;
default:
d=0;
while(ch>= '0'&&ch<= '9') /*从后缀表达式中获取操作数,#作用在此体现*/
{
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
returnst.data[st.top];
}
int main() /*可以提到前面去*/
{
char str[MaxSize],exp[MaxSize]; /*str为算术表达式,exps为后缀表达式*/ printf("请输入一个求值表达式\n");
gets(str); /*输入一个算术表达式*/
printf("原表达式是:%s\n",str);
translate(str,exp); /*将算术表达式转换成后缀表达式*/ printf("后缀表达式:%s\n",exp);
printf("计算结果:%g\n",cal_value(exp));/*通过后缀表达式来求值*/
// system("pause");
return 0;
}
6.运行结果。