Octave GNU : Undefined variable 'x' , 即使它被定义为函数输入

标签 octave gnu

只是想写一个简单的程序来找到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()在您的测试文件中。

但是,如果您使用参数调用函数,它们将初始化变量 xy正确,您的代码将起作用。

您也可以直接调用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/

    相关文章:

    linux - 让 VIM 在保存时添加最后一个新行

    matlab/octave 使用字典顺序比较向量?

    Octave 调用一个函数作为另一个函数的变量

    octave - 将 Octave 解释器设置为 'tex'

    gcc - shrl 与 sarl .. x86 汇编 gnu

    linux - 如何找到单词在字符串中的位置?

    numpy - 为什么 octave 的 prctile 和 numpy 的百分位数之间存在差异?

    json - 如何在Octave中解析json文件?

    ubuntu - 无法运行 GNU Smalltalk gst;致命的 : not a git repository (or any of the parent directories): . git

    c++ - 为什么要为静态和动态链接显式参数