for循环只进行一次迭代

时间:2015-04-04 22:44:20

标签: ti-basic

我正在尝试创建一个简化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

除了这个循环只运行一次这个事实之外,程序运行得很好。如有必要,我会发布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

1 个答案:

答案 0 :(得分:4)

关闭你的循环

您的问题似乎源于错误匹配您的If语句,循环及其End语句。

发生了什么

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

此行为使某些奇怪的代码片段在语法上有效。例如,此代码段将无错误地运行:

 For(A,1,10
     Disp A

结果

               1
            Done

显然这与运行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