Сим-салабим...

  • Автор темы Автор темы That
  • Дата начала Дата начала

That

Знаток
Пользователь
Сообщения
15
Счётчик реакций
2
Очки
65
Вот программа, печатающая символы из стандартного набора ZX Spectrum размером 8*8 знакомест по кодам, которые вводит пользователь. Я взял её из книги "48 программ для изучающих BASIC" издательства "СОЛОН".

Бейсик ZX:
10  CLS
20  INPUT "CODE=";A
30  LET A=(A-32)*8
40  FOR I=15616+A TO 15623+A
50  LET Z=PEEK I
60  LET P=128
70  IF Z<P THEN LET B=0
80  IF Z>=P THEN LET B=1: LET Z=Z-P
90  PRINT B;
100 LET P=P/2
110 IF P>=1 THEN GO TO 70
120 PRINT
130 NEXT I
140 INPUT "NEXT? 1-YES 0-NO ";C
150 IF C=1 THEN GO TO 10

Примечательно в ней то, что не имея в арсенале Бейсика команд для выключения и проверки отдельных битов в байте, программист обходит это ограничение следующим образом:
1) для выключения битов 7, 6, 5, ... , 0 из значения байта последовательно вычитаются числа 128, 64, 32 и т.д. до тех пор, пока это значение не становится равным нулю.
2) для проверки того, включен или выключен отдельно взятый бит, программист:
- на первом шаге (из восьми) внутреннего цикла сравнивает значение байта с числом 128 и, если оно меньше указанного числа, то принимает решение о том, что 7-й бит выключен (печатает нуль). В противном случае бит включен и печатается единица. Для того, чтобы 7-й бит не участвовал в последующих проверках, он намеренно выключается (см. п.1).
- на втором шаге внутреннего цикла сравнивает значение байта с числом 64 и, если оно меньше указанного числа, то принимает решение о том, что 6-й бит выключен (печатает нуль). В противном случае бит включен и печатается единица. Для того, чтобы 6-й бит не участвовал в последующих проверках, он намеренно выключается.
- на третьем шаге внутреннего цикла сравнивает значение байта с числом 32 и, если оно меньше указанного числа, то принимает решение о том, что 5-й бит выключен (печатает нуль). В противном случае бит включен и печатается единица. Для того, чтобы 5-й бит не участвовал в последующих проверках, он намеренно выключается.
- и т.д.

Вдохновившись данным примером предлагаю и вам делиться в этом разделе хитроумными трюками и нестандартными решениями из области программирования (не обязательно на языке Бейсик).
 
Последний раз редактировалось:
Назад
Вверх