
// testcpp : 定义控制台应用程序的入口点。
// 在vc2008下调试通过
#include "stdafxh"
#include "stdioh"
#include "stdlibh"
int main()
{
FILE myfile;
myfile = fopen("e:\\testtxt","w");
char result[50];
char op;
int i = 0;
while( i++<100)
{
int a = rand() % 10;
int b = rand() % 19; // 生成 0 - 18 b为 0 - 9做加法 10 - 18 做减法
b = 9 - b;
int r = a + b;
if( b > 0)
op = '+';
else
op = '-';
b = abs(b);
sprintf(result,"%d %c %d = %d\n",a,op,b,r);
fputs(result,myfile);
}
fclose(myfile);
return 0;
}
部分结果如下
1 - 9 = -8
4 - 5 = -1
9 - 2 = 7
8 + 6 = 14
2 - 2 = 0
5 + 3 = 8
1 - 3 = -2
1 - 7 = -6
5 - 1 = 4
7 + 7 = 14
1 - 3 = -2
2 + 8 = 10
2 - 4 = -2
不过建议自己多思考,祝你成功
很显眼的一个错误
int grade(int daan,int answer)
int edd(int counter,int fenshu,int y)
你声明这两函数的候是没有形参的。,但你后来怎么又有形参了。既然有形参,而你调用的时候,也没有放入对应的实参。
投稿-31 4位可控加减法电路仿真
作者0123-刘春芝
模块(一)加法电路:以0110+1010作为展示
(1)将SUM设为0,使电路成为一个加法电路
(2)输入加数
输入加数B4B3B2B1为0101,通过调节上方的双向逻辑状态实现,B4B3B2B1数据直接输入到4位并行全加器的对应的B4B3B2B1的地方,通过连线进行连接,七段数码管显示加数为9
(3)输入另一加数后最终结果显示
输入另一加数A4A3A2A1为1010,通过调节上方的双向逻辑状态实现,A4A3A2A1的各位上的数和SUM进行异或运算,异或门显示红点则异或最终结果为1,显示蓝点则为0。
异或门的结果则从左到右对应4位并行全加器的对应的A4A3A2A1的地方
模块(二)减法电路:以0010-0001作为展示
(1)将SUM设为1,使电路成为一个减法电路
(2)输入被减数
输入被减数B4B3B2B1为0010,通过调节上方的双向逻辑状态实现,B4B3B2B1数据直接输入到4位并行全加器的对应的B4B3B2B1的地方,通过连线进行连接,七段数码管显示加数为2
(3)输入减数后最终结果显示
输入减数A4A3A2A1为0001,通过调节上方的双向逻辑状态实现,A4A3A2A1的各位上的数和SUM进行异或运算,异或门显示红点则异或最终结果为1,显示蓝点则为0。
异或门的结果则从左到右对应4位并行全加器的对应的A4A3A2A1的地方
(1)利用4位并行全加器进行加减电路仿真时,SUM=0电路为加法电路,SUM=1电路为减法电路
(2)做加法时,异或门端输出数据和原数据相同;做减法时,异或门端输出数据和原数据相反
(3)在4位并行全加器中,各位一一对应相加,即A1和B1相加,A2和B2相加,A3和B3相加,A4和B4相加
(4)各加数对应各位相加结果遵从二进制相加原则
(1)4008即为4位并行全加器,在进行4位数据相加减时,只需使用1个,不需4个
(2)各元件进行连线时,请勿直接在红点上直接连接,电路会显示错误,且不易查出原因
(3)通过7SEG-BCD(7段数码管)进行显示最终数据结果时,注意高低位顺序是从左到右为从高到低
(4)由于4008是并行全加器,不遵从我们所学的串行全加器的进位原则,故不必过于纠结于进位问题,只需注重全加器做加减法电路的过程即可
simulink仿真平台整体的功能比较局限,模块也是固定的,加减模块寻找方法为:
1、使用命令行simulink,启动simulink工具。
2、在simulink中打开库浏览器。
3、找到源信号正弦波。
4、再选择微分器模块,在连续系统里选择derivative。
5、用信号线连接各个模块,并设置源信号参数。
6、运行建立的模型,并示波器显示中查看原信号和微分信号的比较。
注意事项:
在MATLAB命令窗口中输入simulink结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称。当然用户也可以通过MATLAB主窗口的快捷按钮来打开Simulink Library Browser窗口。
编程实现两个一字节压缩型BCD码的减法,
设被减数地址在R0中,减数地址在R1中,差仍存于被减数地址单元中。
注意是单片机中啊。
------------------
一字节压缩的 BCD 码相减。
如:22-55 =-33。
注意:-33 的 BCD 补码是 67H。
MCS-51 汇编语言程序如下:
MOV R2,#22H;被减数
MOV R3,#55H;减数
CLR C
MOV A,R2
SUBB A,R3 ;先减一次,取得正负号
MOV F0,C ;暂时保存
;---------下面正式相减
MOV A,#9AH
SUBB A,R3 ;求减数的 BCD 补码=45H
ADD A,R2 ;加上被减数 22H,得 67H
DA A ;十进制调整,还是 67H
MOV R4,A ;保存差
MOV C,F0 ;用 Cy 当做“符号标志位”
--------------
如果运算数据,是:55-22 = 33,
执行本程序,将有:C = 0,R4 = 33。
首先纠正下千年同志的回答:
你的第一点,请看清楚楼主两个always块第一个是grade,第二个是grade1,grade2分别表示个位十位;
第二点:脉冲信号不能做判断条件这句,我拍这胸脯告诉你,绝对可以。。只有你用时序逻辑,在时钟沿检测脉冲信号就可以,只有保证脉冲宽度大于一个时钟周期就绝对能检测到。
第三点:楼主确实有这么点不完善,不过有些时候可以预先确知某些信号同时发生也可以不考虑的。
最后的你建议,先学C再改verilog,个人意见非常不赞同。。很多软件工程师特别喜欢把写软件哦思维带到硬件描述语言中来。。调用个函数啦。。写个for,写个while什么,最后还问为啥综合报错。。。除非你是专门做测试的用systemC或者systemverilog。that's all。
有点偏题了,说楼主的问题:
你的错误:第一点,最明显的地方是 第二个always块里面,你同时用了阻塞赋值和非阻塞赋值语句,这是典型错误。时序逻辑的always块里面都用<=,组合逻辑的always块都用=。
第二,第二个语句中X,Y两个变量的赋值的表达式根本没办法正确综合,一般%这个运算符号只能出现在仿真里(也很少用)除法/只能对2的整数幂进行相除,根本不能除以10,因为这里除法的本质就是除以2^n就等同于讲寄存器的值左移n位;请问这里10等于2的几次幂啊?!
第三个错误,第一个always块,作为组合逻辑,要把所有的敏感变量加进敏感变量列表里,而且组合逻辑你就不用边缘检测posedge 了,直接always@(add or sub or grade)就可以了。
第四个错误。。你的这个组合逻辑的always块,else 语句写在else if 语句前面,这是一种很诡异的写法,能综合个什么东西出来完全想不出来。
所有,我给你的建议是,你这段程序直接推翻重新来写,全部使用标准的时序逻辑的写法,
就是你第二段“always@(posedge clk or negedge RSTn)beign……end”这种写法,它可以保证你的所有电路行为都是发生在时钟上升沿或异步复位下降沿。
其次,每个信号第一if的分支语句一定是要if (!RSTn),即RSTn为低电平时整个加法器复位。这样做的好处在于:由于所有FPGA器件自动上电的瞬间,内部各个信号的初始态都是低电平,可以保证系统有一个自动复位的过程,所有按照这样写的寄存器都会有一个初始态。而避免了不定态X。
最后,建议你四个bit位宽的个位寄存器做成一个模为10的计数器(可以加可以减,具体靠判断sub,add哪一个信号为高)。。每次计数器满时就将十位的那个寄存器加一,而当个位寄存器为零且又检测到sub减信号时,则把个位寄存器置为4‘b1001(9);将十位寄存器也减一;这样就可以实现总累加值从0~99的加减法器了 。
这 task 可以使用任何一种编程语言来实现,以下是一个 Python 的例子:
# 定义两个变量,用于加减运算
a = 5
b = 3
# 加法运算
result_add = a + b
# 减法运算
result_sub = a - b
# 输出结果
print("加法运算的结果是:", result_add)
print("减法运算的结果是:", result_sub)
这 task 可以使用任何一种编程语言来实现,以下是一个 Python 的例子:
pythonCopy code# 定义两个变量,用于加减运算a = 5b = 3# 加法运算result_add = a + b# 减法运算result_sub = a - b# 输出结果print("加法运算的结果是:", result_add)print("减法运算的结果是:", result_sub)
通过上面的代码,可以完成一个简单的加减运算,代码的执行结果会在控制台窗口中显示出来。
要单步调试程序,可以在编程环境中打开调试器,逐行执行代码,观察每一步的执行结果,检查程序是否按照预期工作。在 Python 中,可以使用 pdb 模块来实现单步调试。在代码中插入 import pdb; pdbset_trace() 可以在这一行停止程序的执行,并打开调试器。
以下是修改后的代码,可以使用单步调试功能:
import pdb
# 定义两个变量,用于加减运算
a = 5
b = 3
# 加法运算
pdbset_trace()
result_add = a + b
# 减法运算
pdbset_trace()
result_sub = a - b
# 输出结果
print("加法运算的结果是:", result_add)
print("减法运算的结果是:", result_sub)
当代码执行到 pdbset_trace() 时,程序会停下来,打开调试器,可以逐行执行代码,并观察变量的值和程序的执行流程。可以使用 step 命令来逐行执行代码,使用 next 命令跳过函数调用,使用 print 命令来打印变量的值。例如,在第一个断点处,可以输入 step 命令,执行加法运算,并观察 result_add 的值。当执行到第二个断点时,可以输入 next 命令,跳过减法运算的步骤,直接执行下一行代码。
以上就是关于10以内加减法程序全部的内容,包括:10以内加减法程序、C语言:给小学生编写练习20以内加、减法计算的程序。、3.1 4位可控加减法电路仿真等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)