for 循环只进行一次迭代

For loop only going through one iteration

我正在尝试创建一个程序来简化 TI-BASIC 中的部首。然而,一个 FOR 循环似乎只完成了一次迭代,而其余的工作正常。这是代码:

Input "Root=",A
Input "Radical=",B
B→Z
ClrList L₃
prgmPRMNTOL1
prgmGETPRIME

有问题的 FOR 循环从这里开始...

For(Y,1,10)
0→Z
For(X,1,dim(L₂))
If L₁(Y)=L₂(X)
Then
Z+1→Z
End:Disp Z
End
If Z≥A
Then
int(Z/A)*A→C
int(Z/A)→D
For(T,1,D)
L₁(Y)→L₃(1+dim(L₃))
End
For(R,1,C)
ClrList L₄
For(S,1,dim(L₂))
If L₂(S)=L₁(Y) and C>0
Then
–1→L₂(S)
C-1→C
End
End
For(Q,1,dim(L₂))
If L₂(Q)≠–1
Then
L₂(Q)→L₄(1+dim(L₄))
End
End
ClrList L₂
For(Q,1,dim(L₄))
L₄(Q)→L₂(Q)
End
End
End

...到此结束。

1→E
For(M,1,dim(L₃))
E*L₃(M)→E
End
1→F
For(N,1,dim(L₂))
F*L₂(N)→F
End
Disp "OUTSIDE",E,"ROOT",A,"INSIDE",F

除了这个循环只运行一次之外,该程序运行完美。如有必要,我也会 post prgmPRMNTOL1prgmGETPRIME,尽管它们可能没有任何影响,因为它们仅修改 L₁L₂.

编辑:添加了缩进版本。

Input "Root=",A
Input "Radical=",B
B→Z
ClrList L₃
prgmPRMNTOL1
prgmGETPRIME

For(Y,1,10)
    0→Z
    For(X,1,dim(L₂))
        If L₁(Y)=L₂(X)
        Then
            Z+1→Z
        End
    End
    If Z≥A
    Then
        int(Z/A)*A→C
        int(Z/A)→D
        For(T,1,D)
            L₁(Y)→L₃(1+dim(L₃))
        End
        For(R,1,C)
            ClrList L₄
            For(S,1,dim(L₂))
                If L₂(S)=L₁(Y)
                Then
                    –1→L₂(S)
                End
            End
        For(Q,1,dim(L₂))
            If L₂(Q)≠–1
            Then
                L₂(Q)→L₄(1+dim(L₄))
            End
        End
        ClrList L₂
        For(Q,1,dim(L₄))
            L₄(Q)→L₂(Q)
        End
    End
End

1→E
For(M,1,dim(L₃))
    E*L₃(M)→E
End

1→F
For(N,1,dim(L₂))
    F*L₂(N)→F
End

Disp "OUTSIDE",E,"ROOT",A,"INSIDE",F

结束你的循环

您的问题似乎源于不正确匹配您的 If 语句、循环及其 End 语句。

发生了什么事

在所有循环和 If 语句关闭之前到达文件末尾时,TI-Basic 的行为是静默失败,终止程序,而不是提醒用户错误。

此行为使某些奇怪的代码片段在语法上有效。例如,这段代码 运行 不会出错:

 For(A,1,10
     Disp A

结果

               1
            Done

显然这与 运行ning Disp 1 相同,因此,没有理由在您的代码中使用它。它的作用只是让无声的和烦人的错误出现在代码中。

修复

假设代码的缩进版本表示您希望如何嵌套循环,下面的代码应该可以解决您的问题。

Input "Root=",A
Input "Radical=",B
B→Z
ClrList L₃
prgmPRMNTOL1
prgmGETPRIME
For(Y,1,10)
0→Z
For(X,1,dim(L₂))
If L₁(Y)=L₂(X)
Z+1→Z
End
If Z≥A:Then
int(Z/A)*A→C
int(Z/A)→D
For(T,1,D)
L₁(Y)→L₃(1+dim(L₃))
End
For(R,1,C)
ClrList L₄
For(S,1,dim(L₂))
If L₂(S)=L₁(Y)
–1→L₂(S)
End
End:"Inserted this End
For(Q,1,dim(L₂))
If L₂(Q)≠–1
L₁(Q)→L₄(1+dim(L₄))
End
ClrList L₂
For(Q,1,dim(L₄))
L₄(Q)→L₂(Q)
End
End
End
1→E
For(M,1,dim(L₃))
E*L₃(M)→E
End
1→F
For(N,1,dim(L₂))
F*L₂(N)→F
End
Disp "OUTSIDE",E,"ROOT",A,"INSIDE",F

如果这不能解决问题,则缺少的 End 在您的代码中的其他地方。