只是想写一个简单的程序来找到n个数字的gcd。我不知道如何解决这个错误,我已经阅读了所有的八度音程功能文档,并试图找到这样的问题......刚开始用Octave btw编程。 这是代码:
function divisor = gcd(x, y)
q=0;
r=0;
l=0;
h=0;
if(x>y)
h=x;
l=y;
elseif(x<y)
h=y;
l=x;
else
h=y;
l=x;
endif
while(r != 0)
q=floor(h/l);
r = h-l*q;
q=h;
r=l;
endwhile
divisor = q;
printf("%d", q);
return;
endfunction
错误:
error: 'x' undefined near line 6 column 6
error: called from
gcd at line 6 column 3
谢谢:)
答案 0 :(得分:5)
您的代码是函数定义。您的函数名为gcd
。
您必须将代码保存在名为gcd.m
的文件中,然后创建新文件,以便您可以从中调用该函数。
在保存gcd.m
的同一目录中,创建一个文件(例如:gcdtest.m
)并将以下代码放入其中:
test = gcd(40, 50)
然后保存并运行此文件。如果输出没有按预期工作,重新启动Octave应该修复它。
我选择的数字只是一个例子。
说明:
如果您拥有的是功能定义文件(即gcd.m
),当您点击&#34;保存并运行&#34;时,Octave本身会调用您的功能,但它并不聪明足够,并且不会使用任何参数。这就是为什么你得到一个未定义的变量&#34;错误。这与您在测试文件中只有test = gcd()
的情况类似。
但是,如果您使用参数调用函数,它们将正确初始化变量x
和y
,您的代码将起作用。
您也可以从Octave命令行中调用gcd(40, 50)
进行测试。
以下是关于功能和功能文件的Octave文档的链接(我知道你说你读过它们,但新手可能没有):
https://www.gnu.org/software/octave/doc/interpreter/Defining-Functions.html
https://www.gnu.org/software/octave/doc/interpreter/Function-Files.html
现在,我注意到您的代码中存在一些问题:
while(r != 0)
- 由于您在第3行中将r
定义为0并且不指定新值,因此不会运行,甚至不会运行一次以后。
elseif(x<y)
(第9行)和else
(第12行)都完全相同。最好完全删除elseif
条件,而只改为else
。
祝你学习顺利。
答案 1 :(得分:0)
对于那些在这里结束的人,Octave 假设任何以 function
关键字开头的代码都是所谓的“函数文件”,只能从“脚本文件”。如果您想防止这种荒谬的混淆,只需在代码上方添加任何内容即可。例如:
1;
function foo = bar(baz)
% do some stuff
end
更多信息here。