只是想写一个简单的程序来找到n个数字的gcd。我不知道如何解决这个错误,我已经阅读了所有的 Octave 函数文档并试图找到这样的问题……顺便说一句,刚开始用 Octave 编程。
这是代码:
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
谢谢 :)
最佳答案
您的代码是一个函数定义。您的函数称为 gcd
.
您必须将代码保存在一个名为 gcd.m
的文件中。然后创建一个新文件,以便您可以从中调用该函数。
在您保存的同一目录中 gcd.m
,创建一个文件(例如: gcdtest.m
)并将以下代码放入其中:
test = gcd(40, 50)
然后保存并运行此文件。如果输出没有按预期工作,重新启动 Octave 应该可以修复它。
我选择的数字只是一个例子。
解释:
如果你只有函数定义文件(即
gcd.m
),当你点击“保存并运行”时,Octave 会自己调用你的函数,但它不够聪明,不会使用任何参数。这就是您收到“ undefined variable ”错误的原因。这类似于您只有 test = gcd()
在您的测试文件中。但是,如果您使用参数调用函数,它们将初始化变量
x
和 y
正确,您的代码将起作用。您也可以直接调用
gcd(40, 50)
从 Octave 命令行,用于测试目的。以下是有关函数和函数文件的 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)
在第 16 行 - 这不会运行,甚至不会运行一次,因为您定义了 r
在第 3 行中为 0,以后不要为其分配新值。 elseif(x<y)
(第 9 行)和 else
(第 12 行)两者都做同样的事情。最好删除 elseif
条件完全,只有 else
反而。 祝你学业好运。
关于Octave GNU : Undefined variable 'x' , 即使它被定义为函数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44508581/