Ошибка основного индекса TI при циклическом просмотре списка - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь внедрить сортировку вставок в TI-BASIC на TI-84, и они почти успешны. Мое решение сортирует все, кроме первого элемента списка. Для правильной работы я считаю эту строку:

While C>1 and L1(C)>V

должно быть

While C>0 and L1(C)>V

Однако это создает ошибку, потому что, по-видимому, TI-BASIC проверяет L1(0), даже несмотря на то, что перед выходом из него мы выходим из цикла.

Может кто-нибудь объяснить, как избежать этой проблемы и заставить код работать?

Это мой код:

0->dim(L1
randIntNoRep(1,10,10)->L1
For(I,2,10)
    L1(I)->V
    I-1->C
    While C>1 and L1(C)>V
        L1(C)->L1(C+1)
        C-1->C
    End
    V->L1(C+1)
End
Disp L1

1 Ответ

1 голос
/ 15 мая 2019

После долгих проб и ошибок я нашел решение. Хитрость в том, что если C = 1, вы не можете иметь его в цикле while, вы должны иметь его в операторе If. Разместите этот блок кода после цикла while:

If C=1 and L1(C)>V
Then
L1(C)->L1(C+1)
C-1->C
End

Все это:

SetUpEditor L1
0->dim(L1
randIntNoRep(1,10,10)->L1
For(I,2,10)
    L1(I)->V
    I-1->C
    While C>1 and L1(C)>V
        L1(C)->L1(C+1)
        C-1->C
    End
    If C=1 and L1(C)>V
    Then
        L1(C)->L1(C+1)
        C-1->C
    End
    V->L1(C+1)
End
Disp L1

...