Распечатка набора списков в ti-84 ti-basic

Я хочу иметь возможность распечатать L1 до Lk (списки в ti-84) для некоторого произвольного числа k.

Списки в ti-basic — это, по сути, одномерные массивы, используемые для хранения вещественных или комплексных чисел в каждом из их элементов.

Ниже я сделал свои собственные списки с именами L1, ... L3 (не встроен, на самом деле их можно открыть и распечатать, набрав LL1, ... LL3)

Я покажу вам кое-что из того, что я пробовал, и т. д.

пусть L5 = {5,5,5}

Если я попробую следующий фрагмент кода:

PROGRAM: ITRTLST
:ClrHome
:Disp LL1
:For(J,1,3
:Disp J
:Disp LL5
:End

Этот код выводит:

1

{5,5,5}

2

{5,5,5}

3

{5,5,5}

Обратите внимание, что первая буква «L» в LL5 — это токен (доступен нажатием [2nd]+[LIST(STAT)] OPS B:)

Однако, если я попробую следующий фрагмент кода:

PROGRAM: ITRTLST
:ClrHome
:Disp LL1
:For(k,1,3
:Disp J
:Disp LLk
:End

Я получаю ERR:UNDEFINED

Это связано с тем, что он считает «LLK» именем списка, а не LL1, LL2, LL3.

Мы можем увидеть это, если я позволю LLK = {1,2,3}, тогда приведенный выше код выводит

1

{1,2,3}

2

{1,2,3}

3

{1,2,3}


person Adam Staples    schedule 14.10.2014    source источник
comment
Любые разъяснения, пожалуйста, спросите меня. Я здесь, чтобы ответить на любые вопросы, прояснить, проработать это вместе и т. д. Я знаю, что должен быть способ перебирать набор списков, как я пытаюсь, потому что в калькуляторе есть такое понятие '5-й ' строка (если вы нажмете на редактирование статистики, вы увидите число в правом верхнем углу каждого списка независимо от названия списка). В ти-84 у вас может быть до 999 элементов в списке, а я думаю даже 999 списков (вы можете меня поправить, если я ошибаюсь).   -  person Adam Staples    schedule 14.10.2014


Ответы (3)


Это можно сделать, но это боль и, вероятно, будет очень медленным.

Попробуйте этот код, заменив [Max] числом:

:ClrHome
:For(I,1,[Max])
:"Convert I into a string, this is slow
:I/10→D
:sub("0123456789",10*fPart(D)+1,1)→Str1
:int(D)→D
:While D>0
:D/10→D
:sub("0123456789",10*fPart(D)+1,1)+Str1→Str1
:int(D)→D
:End
:"Display the I'th list
:Disp expr("ʟL" + Str1)
:End

Обратите внимание, что строки, начинающиеся с ", являются просто комментариями и могут быть удалены.

person Vaelus    schedule 23.05.2015
comment
Я только что протестировал код, и он работает быстрее, чем я, если предположить, что у вас нет списков с индексами, содержащими более пары цифр. - person Vaelus; 24.05.2015

В TI-Basic этого сделать нельзя. Точно так же, как нет способа перейти от строки "X" к содержимому переменной X, нет способа перейти от числа или списка с этим числом в имени.

Если вы хотите сохранить двумерный массив данных, в TI-Basic есть матрицы, хотя они несколько ограничен по сравнению со списками (в частности, нельзя создавать именованные матрицы). Если вам нужна более сложная структура данных, вы, возможно, достигли пределов этого языка.

person Community    schedule 14.10.2014
comment
5-x ; выражение(х) = 5 ; Используя expr, вы получаете доступ к содержимому строки. - person Adam Staples; 14.10.2014
comment
Столбцы матрицы — это, по сути, списки в TI. Я могу использовать метод для преобразования набора списков в столбцы матрицы. - person Adam Staples; 14.10.2014

Это довольно уродливый (и, возможно, единственный) метод, но его можно сделать, запустив кучу If команд.

Например,

Disp ʟL1
If K≥2
    Disp ʟL2
If K≥3
    Disp ʟL3
If K≥4
    Disp ʟL4
If K≥5
    Disp ʟL5

Так далее и тому подобное.


EDIT: я не знаю, нужен ли вам еще ответ на этот вопрос, но я нашел способ сделать именно то, что вы хотите. Тем не менее, это все еще очень грязно.

  1. Преобразуйте свой номер в строку, например Str0 (вы можете выбрать один из нескольких способов: link1 ссылка2).

  2. Объедините это число с именем списка. Например, "ʟL" + Str0 → Str0.

  3. Оцените строку с помощью expr(.

Как я уже сказал, это очень уродливо, и все эти преобразования числа в строку не могут быть слишком эффективными, поэтому вам, вероятно, лучше скопировать и вставить кучу операторов If для каждого условия.

Кроме того, вы можете сжать все списки, которые вы используете, в один большой список и сохранить начальные позиции каждого списка в другом списке. Затем вы можете извлечь любой подсписок из большого списка сжатия с помощью команды seq(.

person user3932000    schedule 27.01.2015