在简单的TI-Basic程序中以循环方式重新分配变量

时间:2019-06-19 11:14:33

标签: ti-basic

在我的笔记中(从90年代末开始!),我找到了一个简单的TI-Basic程序,该程序采用整数N,并输出大于或等于N的最小素数。

Prompt N
If (N/2) = int (N/2)
1+N -> N
For (I, 3, 2+iPart(√N, 2)
If (N/I) = iPart(N/I)
Then
2+N -> N
1 -> I
End
End
Disp
Stop

在第7和8行中,程序的作者(可能是我,我不记得了!)重新分配了变量I和N。这在For循环中发生。我想问一下在TI-Basic语言中“在循环中重新分配变量”如何工作,或者作者是否引入了错误,犯了错误,或者总体上显示出不良的编程风格。

请允许我按照我的理解来描述该程序:

  1. 询问输入N,假设为int
  2. 如果N为偶数,则将N更新为下一个奇数
  3. For循环:声明一个变量I,该变量将用作N的除数。我以3开头,因为我们知道N不是偶数。我要增加2s(所以3、5、7,...,2 + int(√N))。
  4. For循环的主体是单个If-Then-End。逻辑似乎可行:如果I是N的除数,则N不是质数,并且N的当前值应增加到下一个奇数,否则继续。但是,这就是我困惑的根源:为什么要重新分配1-> I?我认为For循环结构可以照顾我。

由于N和I在循环期间被重新分配,这如何影响具有相同名称的For循环变量?在整个循环中2 + int(√N)的值是否仍然是原始值?

我不确定Ti-Basic中是否发生以下情况之一:

n=3
For (i, 1, n)
"""""""""""""Does n get updated?
Disp i, n
n+1->n
End

示例输出:

1, 3
2, 4
3, 5
4, 6
5, 7
6, 8
7, 9
...

或者,假设每次修改For End循环的结束绑定值时都会重新初始化,则输出示例:

1, 3
1, 4
1, 5
1, 6
1, 7
1, 8
1, 9
...

如果我们在循环中类似地重新分配i,会发生什么情况?

我是否需要了解有关局部变量和局部作用域的任何信息?

要使该程序在数学上起作用,我认为每当发现N具有适当的除数时,For循环就需要重新启动。但这似乎并没有在程序中发生,不是吗?

我尝试安装模拟器没有成功。我不再拥有TI计算器。我意识到有几种TI基本语言(据我所知,TI-83的版本除其他外没有局部变量)。如果我的问题的答案取决于TI-Basic,那么我不知道还有什么要说的。

2 个答案:

答案 0 :(得分:1)

允许将值存储到用作循环计数器的变量,例如,它可以用于重新启动循环。将I设置为1意味着(由于For(完成的加​​法,且步长为2),下一次迭代具有I=3,所以可以。

将新值存储到用作(或 in ,循环边界可以是复杂表达式)的变量中,也允许使用循环边界,但是在执行过程中不会重新评估循环边界循环,因此对循环没有影响。因此,在此程序中,循环绑定实际上并没有增加,尽管它确实依赖于此。但是我找不到任何实际出错的例子。我想这里必须要做的是,由于2+,它需要一个素数间隙,其中有两个 平方(因此平方根的整数部分可以增加2,同时我们没有遇到素数),然后第二个正方形可能会被误认为素数(如果它是素数的平方)。 a conjecture并没有发生这种情况-尽管未经证实,但没有任何不可靠的说法意味着,最低的示例无论如何都无法满足TI-BASIC程序的要求。我不希望作者想到这一点。

TI-BASIC中没有局部变量,没有像词法作用域那样的东西。程序中使用的变量与用户可以从主屏幕(和其他适用位置)操作的变量相同,并由其他程序共享。

答案 1 :(得分:0)

稍作修改(程序如下所示)

    Input N
    If (N/2)=int(N/2)
    1+N→N
    For(I,3,2+iPart(√(N)),2)
    If (N/I)=iPart(N/I)
    Then
    2+N→N
    1→I
    End
    End
    Disp N

有效。 简短的答案是,在ti-basic中,结束命令一直停留在这是代码块的结尾。可以解释为

    Input N
    If (N/2)=int(N/2)
    1+N→N
    For(I,3,2+i```Part(√(N)),2)
        If (N/I)=iPart(N/I):Then
            2+N→N
            1→I
    Disp N

有帮助吗?