Биты и гексаграммыКак-то, разглядывая одну из книг, посвящённых древней китайской философии, я с удивлением обнаружил, что на некоторых рисунках комбинации из сплошных и прерывистых чёрточек, которые называются триграммы или гексаграммы, в зависимости от количества палочек, располагаются в ужасно знакомом двоичном порядке. На рисунке приведены все возможные восемь триграмм, расположенных в порядке Фу-си. Таким образом, можно предположить, что эти загадочные триграммы и гексаграммы, в первую очередь, не что иное, как двоичная запись чисел. Как оказалось, это пришло мне в голову не первому. Мысль двигалась дальше, и я уже с учётом этого обстоятельства рассматривал знаменитый знак Дао, символизирующий единство двух противоначал - мужского Ян и женского Инь. Теперь мне виделось в нём не что иное, как изображение бита - элементарной единицы измерения информации. Действительно, присмотритесь: бит должен выглядеть именно так. Некое единство, таящее в себе две потенциальные возможности - Да или Нет, 0 или 1. Таким образом, теперь я воспринимал рисунки древних китайских мудрецов едва ли не как плакаты для обучения информатике. Не буду настаивать на всемирном историческом значении своих открытий, но описанные ассоциации представляются вполне логичными, обоснованными и уместными. Попробуем составить программу на языке Бейсик построения всех возможных три-, тетра-, пента- и так далее ...грамм. Их количество определяется формулой M=2n - два в степени количества чёрточек. То есть, общее количество триграмм равно M=23=8, общее количество тетраграмм равно M=24=16, общее количество пентаграмм равно M=25=32, общее количество гексаграмм M=26=64 и так далее... по степеням двойки. В нашей программе последовательность непрерывных и прерывистых чёрточек опишем как массив, элементами которого будут нули и единицы. Ядром процедуры будет цикл, моделирующий прибавление единицы к двоичному числу, состоящему из заданного количества двоичных разрядов. k=1 p=TRUE while p if b(k)=0 then p=FALSE b(k)= NOT b(k) k=k+1 wendЗдесь k представляет собой счётчик позиций, который перед каждым очередным выполнением цикла устанавливается в 1. Цикл выполняется, пока значение p=TRUE. Если в массиве встречается элемент, равный 0, то p получает значение FALSE. При этом элемент b(k) всегда меняет своё текущее состояние на противоположное b(k)=NOT b(k), а счётчик позиций продвигается на 1 вперёд. После того, как ядро программы написано, нам осталось лишь добавить к нему код вывода результатов, то есть рисование палочек. Так и поступим. dim b(10) n=6 for i=0 to 2^n-1 for j=1 to n if b(j)=0 then line x,y,x+5,y line x+10,y,x+15,y y=y+4 endif if b(j)=1 then line x,y,x+15,y y=y+4 endif next j if x=140 then x=0 y=y+10 else x=x+20 y=y-n*4 endif k=1 p=TRUE while p if b(k)=0 then p=FALSE b(k)= NOT b(k) k=k+1 wend next iЕсли значение n=6, то результатом её работы будет всё множество возможных гексаграмм, расположенных в двоичном порядке. Программа пригодна не только в качестве подспорья для гадания по Книге перемен, но и как основа для решения некоторых традиционных задачек по программированию, связанных с полным двоичным перебором всех возможных вариантов взаимных сочетаний элементов какого-либо множества. Кроме того, теперь вы можете путём загибания пальцев одной руки сосчитать не до пяти, как все прочие граждане, а до 32, а с помощью всех десяти пальцев - до 1024. А. КОЛЕСНИКОВ,
Чтобы разместить новость на сайте или в блоге скопируйте код:
На вашем ресурсе это будет выглядеть так
Пишем на Бейсике программу построения всех возможных три-, тетра-, пента- и так далее ...грамм
|
|