我必须在MATLAB中创建一个函数,当输入时,输出将是该数字的负数。 我写的代码:
function [p] = negative(q)
% given an input , output will be negative of that input
w = subtract(0,1) ;
[p] = multiply(q,w) ;
end
我为函数减法编写的代码是:
function [m] = subtract(n,s)
m = n ;
while s
[m]= decrement(m) ;
s = decrement(s) ;
end
end
乘法代码是:
function [a] = multiply(x,y)
a = x ;
y = decrement(y) ;
while y
[a]= addition(a,x);
y = decrement(y);
end
end
添加功能:
function [a] = addition(b,c)
% adds b and c
a = b ;
while c
[a] = increment(a) ;
c = decrement(c) ;
end
end
功能增量代码:
function out = increment(in)
out = in + 1;
end
功能减量如下:
function out = decrement(in)
out = in - 1;
end
我为函数底写的代码应该按照我的方式工作,因为我将输入乘以-1。但是在MATLAB命令窗口中,当我写入负数(输入)时,没有打印出任何内容(除了w = -1)。为什么会这样,我该如何解决? 我不允许使用任何操作,包括(+, - ,*,/,<,>,==),我也不允许使用for循环。 我唯一能用的就是赋值(=)和while循环。
答案 0 :(得分:2)
首先,我不明白为什么你要为一行问题编写50行代码。
out = -1 .* input;
但是,你的问题在于:
function [a] = multiply(x,y)
a = x ;
y = decrement(y) ; % --------------!!!
while y
[a]= addition(a,x);
y = decrement(y); % --------------!!!
end
end
当y为负数时,循环会不断递减,因此它永远不会离开循环。
每当您输入负数(Q)的正数Q时,y将为负。
答案 1 :(得分:1)
如前所述,addition
,subtract
和multiply
存在一些问题,所以我试图避免使用它们。
试试这个,
function [p] = negative(q)
a = q;
b = q;
a = increment(a);
b = decrement(b);
while b && a
a = decrement(a);
b = increment(b);
end
while a
q = increment(q);
a = increment(a);
end
while b
q = decrement(q);
b = decrement(b);
end
p = q;
end
我们的想法是定义两个变量,a,b
与q
相同,然后增加一个,同时减少另一个,
所以在第一个循环之后,a
或b
中的一个将是0
而另一个将是2xq
(没有无限循环!)。
然后我们可以轻松使用另一个循环来获取-q
,因为我们有2xq
。
似乎运作良好。