基于MATLAB实现进制数转换

实现功能
建立数制转换对话框,在左边输入一个十进制整数和一个二到十六之间的转换后进制数,单击“转换”按钮能在右边得到十进制数转换后字符串,单击“退出”按钮退出对话框。

程序调用了trdec. m函数文件,该函数的作用是将任意十进制整数转换为二到十六进字符串。trdec. m函数文件如下:

function dec = trdec(n, b)
    ch1 = '0123456789ABCDEF';       %十六进制的16个符号
    k= 1;
    while n~= 0                     %不断除某进制基数取余直到商为0
        p(k) = rem(n,b);
        n= fix(n/b);
        k=k+ 1;
    end
    k = k- 1;
    strdec='';
    while k >= 1                      %形成某进制数的字符串
        kb= p(k);
        strdec = strcat(strdec,ch1(kb+1:kb+1));
        k=k- 1;
    end
    dec= strdec ;
end

主程序如下:

clc;clear
hf = figure( 'Color',[0,1,1], 'Position', [100, 200, 400, 200],...
            'Name', '数制转换', 'NumberTitle','off', 'MenuBar','none');
uicontrol(hf,'Style', 'Text', 'Units', 'normalized',...
            'Position',[0.05,0.8,0.45,0.1],'Horizontal','center',...
            'String','输 入 框','Back',[0,1,1]);
uicontrol(hf, 'Style', 'Text', 'Position',[0.5,0.8,0.45,0.1],...
            'Units', 'normalized', 'Horizontal', 'center',...
            'String','输 出 框','Back',[0,1,1]);
uicontrol(hf, 'Style', 'Frame', 'Position',[0.04,0.33,0.45,0.45],...
            'Units', 'normalized', 'Back',[1,1,0]);
uicontrol(hf, 'Style', 'Text', 'Position',[0.05,0.6,0.25,0.1],...
            'Units', 'normalized', 'Horizontal', 'center',...
            'String', '十进制数' ,'Back', [1,1,0]);
uicontrol(hf, 'Style', 'Text', 'Position',[0.05,0.4,0.25,0.1],...
            'Units', 'normalized', 'Horizontal', 'center',...
            'String','二-六进制','Back',[1,1,0]);
he1 = uicontrol(hf, 'Style','Edit','Position',[0.25,0.6,0.2,0.1],...
            'Units', 'normalized', 'Back',[0,1,0]);
he2 = uicontrol(hf, 'Style', 'Edit', 'Position',[0.25,0.4,0.2 0.1],...
            'Units', 'normalized', 'Back',[0,1,0]);
uicontrol(hf, 'Style', 'Frame', 'Position',[0.52,0.33,0.45,0.45],...
            'Units', 'normalized', 'Back',[1,1,0]);
ht = uicontrol(hf, 'Style', 'Text', 'Position',[0.6,0.5,0.3,0.1],...
            'Units', 'normalized', 'Horizontal','center','Back',[0,1,0]);
COMM =['n= str2num(get(he1, "String"));','b = str2num(get(he2,"String"));',...
       'dec = trdec(n,b);','set(ht,"string",dec);']; 
uicontrol(hf, 'Style','Push','Position',[0.18,0.1,0.2,0.12],...
        'String', '转换','Units', 'normalized','Call', COMM);
uicontrol(hf, 'Style', 'Push', 'Position',[0.65,0.1,0.2,0.12],...
        'string', '退出','Units', 'normalized', 'Call', 'close(hf)');

在这里插入图片描述
这运行的结果显然不符合我要的结果,我发现我代码写的没有问题,没有错误没有警告,然后我试着单步调试,发现从“ 输出框 ”那里代码执行了,但是没有效过,然后发现属性名的顺序不一样
在这里插入图片描述
就是position和units 换了位置,就执行了没有效果,然后后面的代码都是position在前面,然后我代码给改过来了。

clc;clear
hf = figure( 'Color',[0,1,1], 'Position', [100, 200, 400, 200],...
            'Name', '数制转换', 'NumberTitle','off', 'MenuBar','none');
uicontrol(hf,'Style', 'Text', 'Units', 'normalized',...
            'Position',[0.05,0.8,0.45,0.1],'Horizontal','center',...
            'String','输 入 框','Back',[0,1,1]);
uicontrol(hf, 'Style', 'Text','Units', 'normalized',...
            'Position',[0.5,0.8,0.45,0.1], 'Horizontal', 'center',...
            'String','输 出 框','Back',[0,1,1]);
uicontrol(hf, 'Style', 'Frame','Units', 'normalized',...
            'Position',[0.04,0.33,0.45,0.45], 'Units', 'normalized', 'Back',[1,1,0]);
uicontrol(hf, 'Style', 'Text','Units', 'normalized', 'Position',[0.05,0.6,0.25,0.1],...
             'Horizontal', 'center',...
            'String', '十进制数' ,'Back', [1,1,0]);
uicontrol(hf, 'Style', 'Text', 'Units', 'normalized','Position',[0.05,0.4,0.25,0.1],...
             'Horizontal', 'center',...
            'String','二-六进制','Back',[1,1,0]);
he1 = uicontrol(hf, 'Style','Edit','Units', 'normalized','Position',[0.25,0.6,0.2,0.1],...
             'Back',[0,1,0]);
he2 = uicontrol(hf, 'Style', 'Edit','Units', 'normalized', 'Position',[0.25,0.4,0.2 0.1],...
             'Back',[0,1,0]);
uicontrol(hf, 'Style', 'Frame', 'Units', 'normalized','Position',[0.52,0.33,0.45,0.45],...
             'Back',[1,1,0]);
ht = uicontrol(hf, 'Style', 'Text','Units', 'normalized', 'Position',[0.6,0.5,0.3,0.1],...
            'Horizontal','center','Back',[0,1,0]);
COMM =['n= str2num(get(he1, "String"));','b = str2num(get(he2,"String"));',...
       'dec = trdec(n,b);','set(ht,"string",dec);']; 
uicontrol(hf, 'Style','Push','Units', 'normalized','Position',[0.18,0.1,0.2,0.12],...
        'String', '转换','Call', COMM);
uicontrol(hf, 'Style', 'Push','Units', 'normalized','Position',[0.65,0.1,0.2,0.12],...
        'string', '退出', 'Call', 'close(hf)');

在这里插入图片描述
发现我把代码改了就好了。
在这里插入图片描述
就把 units 属性放在position 前面了,我后面又验证了一下,发现 二者属性反过来,总有一次代码是不成功的,而且没有错误,不知道是不是一个bug,通过一个简单的GUI控制界面,发现bug还挺多,不过,最后功能还是实现了

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值