Octave 八度GNU:未定义的变量';x',即使它';定义为函数输入
只是想写一个简单的程序来求n个数的gcd。我不知道如何修复这个错误,我已经阅读了所有的八度函数文档,并试图找到像这样的问题。。。刚刚开始在八度的btw编程。 代码如下:Octave 八度GNU:未定义的变量';x',即使它';定义为函数输入,octave,gnu,Octave,Gnu,只是想写一个简单的程序来求n个数的gcd。我不知道如何修复这个错误,我已经阅读了所有的八度函数文档,并试图找到像这样的问题。。。刚刚开始在八度的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 !
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
谢谢:)您的代码是一个函数定义。您的函数称为
gcd
您必须将代码保存在名为gcd.m
的文件中,然后创建一个新文件,以便从中调用该函数
在保存的同一目录中,创建一个文件(例如:gcdtest.m
),并将以下代码放入其中:
test = gcd(40, 50)
然后保存并运行此文件。如果输出不能按预期工作,重新启动Octave应该可以修复它
我选择的数字只是一个例子
说明: 如果您只有函数定义文件(即,
gcd.m
),当您点击“保存并运行”时,Octave本身将调用您的函数,但它不够聪明,因此不会使用任何参数。这就是为什么会出现“未定义变量”错误。这类似于您的测试文件中只有test=gcd()
但是,如果使用参数调用函数,它们将正确初始化变量x
和y
,代码将正常工作
您也可以从倍频程命令行简单地调用gcd(40,50)
,以进行测试
以下是有关函数和函数文件的Octave文档的链接(我知道你说你读过它们,但新手可能没有):
现在,我注意到您的代码中有几个问题:
在第16行-这不会运行,甚至不会运行一次,因为您在第3行中将while(r!=0)
定义为0,以后不会为其分配新值r
elseif(x对于那些到此结束的人,Octave假设任何以
关键字开头的代码都是所谓的“函数文件”,只能从“脚本文件”中调用。如果要防止这种荒谬的混淆,只需在代码上方添加任何内容即可。例如:function
1; function foo = bar(baz) % do some stuff end
更多信息。您是从其他脚本调用它,还是尝试按原样运行此文件?请注意,if/while语句周围不需要括号。此外,函数末尾不需要使用
语句。我曾尝试按原样运行此文件。但由于Marc.2377,它现在已修复。我注意到您已编辑了您r问题:根据给出的答案更正代码;不应该这样做,否则新来者将无法找出错误所在。它现在已被还原。只需添加您不必创建第二个m文件,您可以使用放入gcdtest.m中的文本从命令行调用gcd。初学者通常不会识别错误区别。gcd.m文件是一个函数文件,gcdtest.m文件是一个脚本文件,脚本文件只是解释器命令的列表。非常感谢,所有问题都已解决。我还注意到另一个问题:在while循环中,它应该是h=q;l=r;-而不是q=h;l=r;。我通常将函数命名为与文件名相同的函数,然后从中调用我的函数在这里面。我认为它就像void main()。@LukeDupin你可能已经知道这一点,但只是觉得值得一提。期待看到更多的人在上面。return
1; function foo = bar(baz) % do some stuff end