ZEman, 18 байт потому как цифры требуют +6 байт
меньше 12
if inkey$=a$ then
но a$ чота занимать тоже будет
Вид для печати
ZEman, 18 байт потому как цифры требуют +6 байт
меньше 12
if inkey$=a$ then
но a$ чота занимать тоже будет
Почитайте книгу "... Для пользователей и программистов". Ту, главу, в которой описывается формат хранения переменных. Должно помочь.
Есть вариант числа пихать в функцию VAL$. Правда, это потребует хранение переменной K$ в виде числовой переменной, либо и ее пихать в фукцию VAL$. Побочный эффект, работает медленнее.
Почти все ухищрения связанные с уменьшением обьема программы, палка о двух концах, которая помимо затруднения чтения листинга, замедляет работу программы.
понял уже.
хотя мне всё-же удалось ещё освободить прилично места в программе и провести кое-какую оптимизацию, прога стала работать явно быстрее.
так-что скоро будет 1.7.2 версия.
Чисто на бейсике, подобную конструкцию, врятли можно оформить как-то короче.
Можно попробовать использовать значение переменной, как аргумент команды перехода. Правда, в плане экономии памяти, не все так очевидно, ибо потребуется использовать пространство в 256 с чем-то строчек и "команды-заглушки".
10 LET K= CODE INKEY$
12 GOTO 20+K
....
52 GO TO 10
....
68 GO TO (ЕСЛИ НАЖАТА КЛАВИША "0")
....
275 GOTO 10
- - - Добавлено - - -
Если времени и желания осваивать ассемблер, нет - критичные по времени куски если не всю программу, логичней писать изначально под компилятор (например, тот же MCoder2 от Евдокимова). После компиляции создается исполняемый код, не требующий присутствия самого кода компилятора в памяти (т.е. "верхняя память", над скомпилированной программой, становится свободной для использования), и вроде как даже есть функция компиляции с диска (т.о. частично решается проблема нехватки памяти).
прошу помощи.
вопрос такой:
даётся переменная в виде числа от 0 до 255.
в моём случае Let g= ... (число от 0 до 255).
как можно перевести её в двоичную систему ?
должно получиться число в виде восьми нулей и единиц.
BIN
Шынни, данная команда, переводит числа из двичной формы в десятичную. Не наиборот.
ZEman, то, что тебе нужно zx-бейсик не умеет, умеет токо наоборот с помощью BIN.
- - - Добавлено - - -
Хотя наверно можно составить какую-то хитрую подпрограммку, которая будет юзать poke/peek и выводить, что тебе нужно.
неужели нет никакой формулы чтоб применить в программе можно было ?
ZEman, загляните в книжку: "как написать игру на бейсике". Там есть пример.
Либо:
Код:10 LET n="число которое надо перевести"
15 LET n$=""
30 IF n>127 THEN LET n$=n$+"1": LET n=n-128: GOTO 40
35 LET n$=n$+"0"
40 IF n>63 THEN LET n$=n$+"1": LET n=n-64: GOTO 50
45 LET n$=n$+"0"
50 IF n>31 THEN LET n$=n$+"1": LET n=n-32: GOTO 60
55 LET n$=n$+"0"
60 IF n>15 THEN LET n$=n$+"1": LET n=n-16: GOTO 70
65 LET n$=n$+"0"
70 IF n>7 THEN LET n$=n$+"1": LET n=n-8: GOTO 80
75 LET n$=n$+"0"
80 IF n>3 THEN LET n$=n$+"1": LET n=n-4: GOTO 90
85 LET n$=n$+"0"
90 IF n>1 THEN LET n$=n$+"1": LET n=n-2: GOTO 100
95 LET n$=n$+"0"
100 IF n>0 THEN LET n$=n$+"1": LET n=n-1: GOTO 110
105 LET n$=n$+"0"
110 PRINT n$
Формула есть. Только оно ж тормозно будет.
10 DEF FN V(x,y)=x-y*INT (x/y)
20 DEF FN b$(b)=STR$ INT (b/128)+STR$ INT (FN V(b,128)/64)+STR$ INT (FN V(FN V(b,128),64)/32)+STR$ INT (FN V(FN V(FN V(b,128),64),32)/16)+STR$ INT (FN V(FN V(FN V(FN V(b,128),64),32),16)/8)+STR$ INT (FN V(FN V(FN V(FN V(FN V(b,128),64),32),16),8)/4)+STR$ INT (FN V(FN V(FN V(FN V(FN V(FN V(b,128),64),32),16),8),4)/2)+STR$ INT FN V(FN V(FN V(FN V(FN V(FN V(FN V(b,128),64),32),16),8),4),2)
30 INPUT "input num 0 to 255 ";a
40 PRINT FN b$(a)
null_device, угу видел такое, но оно слишком громоздкое.
видимо придётся пойти на хитрость и использовать что-то типа poke 22400 (g) - где g число от 0 до 255.
и получившеюся черту переводить в двоичное число.
похоже надо мудрить в цикле 0-7 со степенями двойки и десятки
ZEman, громоздкое? Зато не использует сложных вычислений. И относительно быстрое.
Если вы собираетесь использовать отображение бинарного числа линией пикселей и команды POINT, врятли получится короче и быстрее. К тому же ЕМНИП, команда не работает со служебной частью экрана...
Не совсем понятно какую цель вы преследуете переводя числа из одной системы в другую? Возможно есть способ короче, проще и элегантней.
Могу сделать маленькую процедурку в коде. Раз забить ее через POKE и потом вызывать, предварительно положив нужное число через POKE и установив место вывода через PRINT AT x,y; Будет точно быстрее.
В конкурсах бейсик-игр процедурки в кодах под запретом, например.
большое спасибо за советы, но я уже сам разобрался с данной задачкой.
просто думал что может есть простенькое решение в виде одной строчки формулы.
на днях выложу новую версию rararura, хотя нового там не так уж и много.
ZEman, в бета-бейсике есть оператор переводящий из десятичной в двоичную )
ZX_NOVOSIB, только вот, сам он "сьедает" килобайта три, если не больше.
ZEman, а надо было перевести в строку, а то я печаталку сделал :)
Двоичное число: 2^7*d7+2^6*d6+2^5*d5+...+2^0*d0, здесь d7-d0 двоичные числа.
- - - Добавлено - - -
или так:
http://i93.fastpic.ru/big/2017/0715/...49dce408cd.pngВложение 61655
2 килобайта спасут прекалком(:
Компромис между скоростью и прекалком:
Код:10 DEF FN c$(a)=z$(1+a TO 4+a)
20 DEF FN b$(n)=FN c$(INT (n/16)*4)+FN c$((n-INT (n/16)*16)*4)
25 LET z$="0000000100100011010001010110011110001001101010111100110111101111"
Или даже двухмерный символьный массив сделать. :)
пришло время для очередного обновления.
хотя добавлено немного и скорее всего больше обновлений не будет.
Rararura 1.8.0
- добавлен Data symbol mode режим.
- оптимизация программы.
Data symbol mode режим - перевод из численного значения (0 - 255) в строку для UDG символа.
вызывается этот режим клавишей "Х".
во вложении сама программа файлы для примера и мануал.
прошу помощи.
вопрос такой - как можно вернуть строчке в листинге программы обычный (стандартный) цвет ?
например имеем 2 строки:
10 print "text"
20 print
в 10 строке слово текст написаано с использованием закраски.
то-есть я вхожу в extend mode и нажимаю цифру (например 2) придавая фону текста красный цвет.
беда в том что последующие строчки тоже окрашиваются в красный цвет.
можно задать любой цвет экрана (paper) но строчки будут цветные.
а мне нужно чтоб они были стандартными прозрачными, как это можно сделать ?
в конце строки нажать extend mode и нажать "7".
строка станет белой.
если я после этого сделаю например
paper 5 : cls
то получим голубой экран и на нём белая строка.
а должна быть прозрачная (обычная)
наберите любой листинг и меняйте цвет экрана.
строчки всегда будут иметь тотже фон что и экран.
видимо никак - а зачем в процессе фон менять то ?
как-то можно, мне встречались программки с таким листингом, а вот как получается такой фокус непонятно.
ZEman, 8 — прозрачный цвет. Как ввести с клавиатуры не знаю, просто ввёл тот же красный цвет, а затем сделал poke 23768,8.
ZEman, войти в тот же самый EXT MODE и набрать управляющие коды INK 8 и PAPER 8 (ЕМНИП, второе работает через зажатый шифт).