на главную страницу
визитка
темы

Семинары доктора Марцинкевича
(занятие двадцать шестое) 

029.30 Отражение

1.Мониторинг двоичных кодов десятичных чисел

    Обычно высказанная идея тянет за собой множество других, так или иначе связанных с ней, идей. Это же относится и к идеям средств реализации идеи. Так, идея отражения в аспекте конструкции машины, её реализующей, задаёт целый ряд вопросов, на каком-то из которых нужно остановиться. Один из таких вопросов - вопрос о том, что отражается, вопрос о моделировании объективной реальности и воздействия последней на субъект, если машину в качестве отражающей отождествлять с субъектом. Её отличие от субъекта в том, что субъект в себе бесконечен, тогда как машина - конечна, и в силу этого она способна отражать лишь какую-то часть субъекта, или, другими словами, быть какой-то его частью. В качестве идеи средства этого рода представляется лента, реализуемая в форме массива. В массив могут быть в определенной последовательности, определяемой, по выражению П.Я.Гальперина, интеллектом экспериментатора, события, которые должны быть отражены. Эта идея средства порождает следующую идею, долженствующую моделировать подачу раздражений на субъект. Нам нужна идея материализации времени. В качестве средства может выступать таймер, и тогда подача событий из ячеек массива может быть синхронизирована с окончаниями очередных импульсов таймера.
   Для того, чтобы субъект что-то отражал, отражаемое должно иметь для него смысл. Субъект в силу своей природы и обстоятельств, связанных с его внутренним равновесием и его равновесием  относительно внешней среды более склонен отражать один события, и игнорировать другие. Иначе говоря, события для субъекта должны обладать субъективным смыслом, обусловленным субъективным значением события для субъекта, за которым стоит объективное значение для субъекта. Субъективность субъекта существенным образом опирается на удовлетворяемые субъектом посредством субъективных схем реализацию его инстинктов. Причем, субъективный аспект является ведущим в процессах отражения. Поэтому должен существовать еще один массив, синхронизированный с первым, которым обусловливаются выборы субъектом из свойств падающих на него событий.
   Отражение есть результат взаимодействия субъекта с внешней средой. Следовательно, должен существовать массив, содержащий в себе образы падающих на субъект событий, образы, которые, с одной стороны, производятся, с другой - используются субъектом в его поведении.
   Помимо того, что события действуют на субъект, субъект также действует на события. Поэтому должен существовать массив, содержащий поведенческие схемы субъекта, посредством которых субъект реализует себя в реальности. Поведенческие схемы также должны вырабатываться субъектом, обеспечивая целесообразный характер его поведения. Это еще один массив. Наконец, субъект должен как-то оперировать образами отражения, а для этого образы отражения должны иметь имена. Это еще массив. Т.о. в целом мы получаем в качестве единого объекта двумерный массив.

   Упражнение
   Откройте программу Pth2 на стр. TSexpert. Увидите окна, показанные на снимке. Это окна управления массивом из двух строк по четыре ячейки. Изначально ячейки массива заполнены числами.  Первая строка (строки, как всегда в массивах, начинаются с нулевой): 51,61,71,81,  вторая строка 52, 62, 72, 82.

   В первое слева направо окно заносится номер строки, равный 0 или 1, во второе окно - номер ячейки строки 0,1,2,3. В последнее окно заносится единица, если нужно открыть содержимое ячейки, и ноль, если в ячейку вносится и проверяется вводимая информация. Информация в ячейку заносится третьим окном, открывается  информация ячейки в четвёртом окне. После того, как установили нужные значения окон, нажмите кнопку MMexpert  в главном меню. Получите результат. Например, если наберете в окнах 0,2,15,_,0 и MMexpert↓, получите 0,2,15,15,0. Наберите теперь 0,2,0,0,1 и MMexpert↓ и получите 0,2,0,15,1.
   Проведем такой эксперимент: введём в первую ячейку 7, во вторую ячейку 23, в третью ячейку 99, в четвёртую - 0, затем MMexpert↓. Программа нам не откажет, несмотря на то, что в программе были объявлены только две строки с четырьмя элементами. Получим: 7,23, 99,99,0. Теперь запишем: 7,23,0,0,1, MMexpert↓, получим 7,23,0,99,1.
   Из этого мы можем сделать для себя вывод, что при программировании мы можем задавать любые значения строк и столбцов двумерного массива, и при этом расширение массива в связи с изменением числа строк и столбцов не потребует от нас изменений в объявлении массива. Другими словами, фактически двумерный массив ограничен в отношении строк и столбцов только ограничением на максимальную величину чисел типа int.


   Следующий вопрос, на который мы должны неизбежно ответить: с какого рода кодами объектов мы будем иметь дело. На предыдущих занятиях этот вопрос нами обсуждался, и мы пришли к выводу, что в качестве таких объектов удобно иметь дело с числами, поскольку они позволяют моделировать реальность с её формально-логической стороны. Ведь нам нужно иметь принцип анализа и синтеза объектов, а для этой цели как нельзя лучше подходят поразрядные логические операции. Но это означает, что мы должны будем десятичные числа переводить в двоичный код. И далее перед нами возникает дальнейший вопрос: будем ли мы использовать только двоичные числа или также двоично-десятичные.  Так как в любом случае мы будем иметь дело с двоичными числами, то следует начать с программы перевода десятичных чисел в двоичные и обратно, поскольку каждый раз заниматься их переводами вручную время затратно. 

   Программа возведения числа в степень
   Попытаемся раскрутить программу возведения в степень  Алгоритм и программа с несущественными изменениями взяты из  Википедии :

   Программа:
1. int desdo=0, dvdo=1, chdo=1; //desdo-основание, dvdo-степень, chdo = результат
2. desdo=StrToInt(Fth2->LEdesdo->Text);
    3. dvdo=StrToInt(Fth2->LEdvdo->Text);
    4. while (dvdo)
    {//w
    5. if (dvdo&1)chdo *=desdo;
    6. desdo *=desdo;
    7. dvdo>>=1;
    }//w
   Для введения и выведения данных используются окна LEdesdoLEdvdo=LEchdo, а также окно для выбора программ LEmass2yslexp
   Прежде всего нам нужно убедиться, что программа работает. Для этого в программе Pth2 выходим на стр. TSprocessdo, устанавливаем ноль в окне выбора программ, задаем натуральные значения основания и степени и нажимаем кнопку пуска MMexp ↓ → MMdvdes ↓ Убеждаемся, что с этой стороны у нас претензий к программе нет, но мы хотим уточнить, как работают операция цикла while и операция присваивания со сдвигом вправо, поскольку хохол не поверит, пока не пощупает. У Ленина, кажется, есть высказывание о том, что де мысль сравнительно с органами чувств характеризуется тем, что позволяет выразить то, что чувственно не воспринимаемо. И я никак не мог понять, что это значит, как можно мыслить то, что невозможно чувственно воспринять. Мысль - что это за штука такая, которая позволяет видеть невидимое. Поскольку в себе я такой способности не обнаруживал, то, естественно, приходил к выводу, что такая вещь, как мышление, мне недоступна. Хотя, в то же самое время, вроде бы о чем-то, как всякий человек, если не всё время, то уж, во всяком случае, время от времени, думал. Иначе даже вот так, это будет точнее. Орудием мысли является слово. Слово позволяет мысли выразить  то, что невозможно воспринять чувствами. Или еще дальше: мышление посредством слов создает понятия, которые позволяют отражать реальность в её внечувственном содержании. И думаешь: вот, понимаешь, смотри ты, какие бывают люди необыкновенные, там разные ученые или черт их знает какие, какими необыкновенными способностями они обладают. Это у нас Николай Михайлович прочитает какую-н. книжку, приходит и начинает с видом, словно преподносит тебе чудо, пересказывать её содержание, а в качестве аргумента приводит: об этом же ученый говорит. В смысле, нам, сирым и убогим, сие недоступно, а вот есть такие необыкновенные люди, которым доступны глубины. И называются они учеными.
   — Вот подожди, друг мой, подожди, — начал он, потирая руки и скороговоркою, — увидишь человека! Человек редкий, я тебе скажу, человек ученый, человек науки; останется в столетии. А ведь хорошо словечко: «Останется в столетии»? Это мне Фома объяснил… Подожди, я тебя познакомлю.
   
И, разумеется, если есть спрос, есть и предложение:
   -Ведь уж кругом весь околоток раззнакомился с ними из-за Фомки треклятого. Ведь всякому, кто ни приедет, оскорбления чинит. Чего уж мне: значительного чина не пощадит! Всякому наставления читает; в мораль какую-то бросило его, шельмеца. Мудрец, дескать, я, всех умнее, одного меня и слушай. Я, дескать, ученый. Да что ж, что ученый! Так из-за того, что ученый, уж так непременно и надо заесть неученого?.. И уж как начнет ученым своим языком колотить, так уж та-та-та! та-та-та! то есть такой, я вам скажу, болтливый язык, что отрезать его да выбросить на навозную кучу, так он и там будет болтать, все будет болтать, пока ворона не склюет. Зазнался, надулся, как мышь на крупу!

   И, конечно, проявления конкурентной борьбы у людей одинакового способа приспособления к реальности:
   — Это еще что? — вскрикнул он наконец, накидываясь на меня в исступлении и впиваясь в меня своими маленькими, налитыми кровью глазами. — Да ты кто такой?
   — Фома Фомич … — заговорил было совершенно потерявшийся дядя, — это Сережа, мой племянник …
   — Ученый! — завопил Фома, — так это он то ученый? Либерте эгалите фратерните! Журналь де деба! Нет, брат, врешь! в Саксонии не была! Здесь не Петербург, не надуешь! Да плевать мне на твой де деба! У тебя де деба, а по нашему выходит: «Нет, брат, слаба!» Ученый! Да ты сколько знаешь, я всемерно столько забыл! вот какой ты ученый!
   Если б не удержали его, он, мне кажется, бросился бы на меня с кулаками.
   (Ф.М.Достоевский. "Село Степанчиково и его обитатели")

   Собственно, с одной стороны во всём этом видится безусловное желание чуда. Та видимая реальность, которая окружает, чуда не показывает, серенькая реальность. А хочется чудесного, душа требует, ну, человек и хватается за все эти вещи: и бог есть, и бессмертие существует... а то что это - перекинулся, и ничего от тебя не осталось. Скучно.
   И точно также, как существует множество людей, уж очень по особенному сильно жаждущих чуда, точно также существует и множество людей, непременно желающих чувствовать себя пророками. При этом само по себе это чувство первично, и вопрос не в том, соответствует ли в реальности то, что человек говорит (извините, такие люди просто так ничего не говорят, они непременно пророчествуют; вспомните Солженицына, ведь это перл, ни слова просто так, всё со значением. И отказ принять медаль из рук Ельцина - ведь принял бы - и уже как все, уже не пророк. А так получилось, что, мол, мне ваша медаль, когда я выше  этого), а в том, что то, что человек говорит, совершенно независимо от того, что именно он говорит, выдается им за пророчества, за этакую непонятную высшую истину, ведомую только ему.
   И эти две стороны - и потребность в чуде и пророчество как способ создания чуда - имеют в своём основании одно: веру. Ведь что такое вера? Это вовсе не то, что имеет какое-то отношение к реальности. Более того, чаще всего то, во что человек верует, не имеет отношения к реальности. Всё дело в том, что можно взять любую вещь - мысль, призрак, что угодно, и поверить в неё, сказав себе, что да, это есть, это существует. Это, если хотите, инстинкт такой. Зачастую даже ничего и говорить не нужно, а  вера сама по себе незаметно и неизвестно как образовалась, как шушель в крупе. Поверили - и вера оказывается впереди реальности, так что уже возникает требование, чтобы реальность подчинялась вере. В основе этого лежит, пожалуй, сексуальное отношение: какие-то гормоны в тебе играют, и уже женщина - божество. Ты же действительно чувствуешь, что она - чудо, божество. Ощущаешь, что она - божество. А как расчухаешься - думаешь: тьфу ты, что это со мной было, бред какой-то, самая обыкновенная баба, да еще, может быть, и дрянцо порядочное.
   Так что вера имеет в своей основе сексуальное отношение. А уж если это сексуальное отношение да еще и духовная личность, то тут уж без бога никак не обойтись. Как-то читал работу, кажется, Фомы Аквинского. Так у него через строку объяснения любви к богу, и всё это с таким напряжением, с таким напором, что кажется, что человек вот-вот кончит, хочет кончить, но не может, сексуальная энергия у него ударяет не ниже пояса, а бьёт в голову. Ну, вот у него и получается непрерывный любовный экстаз к духу. А к духу потому, что энергия не получает выхода через нижний этаж.
    Ну, а я, как хохол,  не поверю, пока  не пощупаю. Так что и в то, что  мысли и слова якобы сами по себе, независимо от чувства, прямо-таки неизвестно каким образом дают нам истину о реальности, не поверю, пока не узнаю, как же им это удаётся.
    Есть (чувственный) образ мысли. Есть. Этот образ создан  из известных образов и их понятий,  представляемых посредством чувственных знаков. Понятие вне его чувственного знакового образа  не может существовать. Только в этом случае содержание мысли не есть непосредственное отражение содержания чувства, а сама мысль создает образы, которые затем материализует и проверяет их адекватность реальности, и там, где имеет место рассогласование, приводит образы как модели реальности в соответствие с реальностью. Мышление - это способ моделирования реальности. Мысль имеет дело с чувственностью в виде чертежей, систем знаков, являющихся её кодами, так или иначе представляющими чувственность, которая еще не существует, во всяком случае, для нас.  Идея, как правило, есть чувственный новый код реальности, которой еще не было в опыте субъекта. Особенность мысли в том, что первоначально она создает объекты, которые не существуют в реальности. В этом отношении мысль может создавать любые объекты, опираясь на коды реальности у субъекта, представляемых в форме чувств.
   Маркс писал: “… самый плохой архитектор от наилучшей пчелы с самого начало отличается тем, что, прежде, чем строить ячейку из воска, он уже построил ее в своей голове. В конце процесса труда получается результат, который уже в начале этого процесса имелся в представлении человека, т.е. идеально” Ну, да, конечно. Но ведь и архитектор и пчела делают одно и то же, только что пчела чертежей не чертит. Ну и, она, конечно, только и умеет, что соты лепить, а человек в этом отношении выглядит универсалом. Да ведь у пчелы и вещества этого меньше, посредством которого она строит, а у архитектора - больше. Он и чертит. Но способность-то одна. Пусть этот код поведения в форме инстинкта существует в пчеле, а человек создаёт эти вещи произвольно. Но сама-то способность всё это создавать у пчелы и человека - одна. Конечно, громадное качественное различие. Но ведь качества эти в своём основании имеют одну и ту же сущность и лишь разное её количественное развитие.  Так что если человека бог и создал, то и пчелу тоже, и сущность у них обоих одна. Так получается.

   Так что будем щупать. Мало ли что там говорят, что while обеспечивает цикл, если условие выполняется, если оно истинно. У нас в программе там написано while(dvdo). dvdo - это условие. И, значит, если оно истинно, то цикл выполняется, а если ложно, то тогда, конечно, извините. А ты видишь в этой записи, истинно оно или ложно? Оказывается, когда ты объявлял переменную, ты её инициализировал, придавал ей значение. Как бы там ни было, переменная должна уже иметь значение, да и, больше того, в ней уже что-то там сидит, даже если ты ничего не объявлял в ней - всё равно в ней какая-нибудь гадость заведется. Так что лучше,  инициализировать, чтобы избежать неприятных случайностей. И вот оказывается, что если ты записал в переменную ноль, то она циклом рассматривается как ложная, а в остальных случаях она - истинная.

   -Хорошо, ты мне это сказал. Теперь покажи,  что это действительно так.

   -Как скажешь. Напишем программку:

   int desdo=0, chdo=0, dvdo=0;
desdo=StrToInt(Fth2->LEdesdo->Text);
dvdo=StrToInt(Fth2->LEdvdo->Text);


while(desdo)

{//w
if(chdo<dvdo) chdo++;
else
{//e
Fth2->LEchdo->Text = IntToStr(chdo);
desdo=0;
}//e

}//w 

   Ты видишь в ней оператор цикла while, который выполняется, если переменная desdo≠0. Ты можешь придавать desdo натуральные положительные или отрицательные значения, и цикл будет работать. Но только не ноль. Ноля он не переносит.
   Цикл увеличивает переменную chdo на каждом шаге на единицу до тех пор, пока её значение не сравняется с переменной dvdo. Тогда значение chdo, =dvdo,  выносится в его окно, вслед за этим desdo обнуляется, и программа выходит из цикла.
   А теперь ты можешь сам во всём убедиться: запусти последнюю версию программы Pth2, открой её на странице TSprocessdo, задай в окне LEmass2yslexp, выполняющем в данном случае роль окна выбора программ, цифру 2, и в окнах, соответствующих переменным программы, набери соответствующие значения, например, такие: LEdesdo=5, LEdvdo=15 и нажми на кн. MMexp, MMdvdes. Получишь LEchdo=15. Теперь сотри в нём эти 15 и введи в LEdesdo 0. Запусти программу. В LEchdo ничего не появится, что говорит о том, что while отказался иметь дело с нолем.
   Что ты еще хочешь щупать?
   -Я хочу потрогать за вымя присваивание со сдвигом вправо. Я, конечно, понимаю, что это такое, но желаю это увидеть и почувствовать.
   -Я тебе сначала нарисую картинку, идёт?

   Я тебе нарисовал двоичные коды чисел и попытался показать, в какое другое число оно превращается в результате сдвига. На рис. показан сдвиг на один шаг вправо. Но, конечно, сдвиг может быть на произвольное число шагов. Ключевым является то, что число, перемещаемое из младшего разряда вправо, теряется. Поэтому, к примеру, у нас и тройка и двойка в результате сдвига вправо превращаются в единицу, и этого рода двойственность выполняется для всех пар чисел: 0 и 1, 2 и 3, 4 и 5 и т.д. А теперь покажем, что реальность выполняет идею сдвига с присваиванием.  Для этого снова сообразим маленькую программку:

    int desdo=0, chdo=0, dvdo=0;
desdo=StrToInt(Fth2->LEdesdo->Text);
dvdo=StrToInt(Fth2->LEdvdo->Text);
desdo>>=dvdo;
Fth2->LEdesdo->Text = IntToStr(desdo);

   Мы видим, что переменная desdo содержит число, которое подвергается сдвигу, переменная dvdo содержит число шагов сдвига, так что ты можешь потренироваться на сдвигах при разных шагах.
   А теперь можешь щупать. Включи программу Pth2 и т.д., в окне выбора программ поставь единичку, в LEdesdo вставь сдвигаемое число, в окно LEdvdo - число, соответствующее числу шагов сдвига, в нашем случае это будет единица, а теперь запускай программу и смотри, во что при каждом очередном запуске программы превращается записанное тобой число.

   Функции.
   Прежде, чем использовать переменные, мы их объявляем, то есть указываем их тип и обычно инициализируем, т.о. определяем их значение. Т.о. разделяются между собой две разные операции, операция объявления, это как бы создание соответствующего объекта, и затем мы пользуемся этим объектом. Прежде, чем чем-то пользоваться, его нужно создать. В случае с объявлением функции это особенно наглядно. Прежде всего, мы объявление функции помещаем в файле реализации сразу после директив препроцессора. Затем мы должны указать, что именно мы хотим получить в качестве результата функции. Это должно быть указано при её объявлении. Объявляться функция может также в отдельном файле, в котором собраны, скажем, ваши функции. При этом достаточно в головном файле включить сноску на него для препроцессора.
   Напишем программку объявления функции (А):
int leg (int X,int Y, int res )
{//su
return X+Y-res;
};//su
    и поместим её сразу после директив препроцессора. Функция возвращает то, что делает. И затем попробуем воспользоваться функцией, написав программу (В):
int i=5,j=2,es=0, z=3;
i=StrToInt(Fth2->LEdesdo->Text);
j=StrToInt(Fth2->LEdvdo->Text);
z=StrToInt(Fth2->LEchdo->Text);
es =leg(i, j, z);
Fth2->LEchdo->Text=IntToStr(es);
    И затем запустим программу по шагам. Что мы увидим? Что программа (В), дойдя до имени функции, перейдет на программу (А), причем, в ней переменные  X, Y, res примут, соответственно, значения переменных i, j, z, и выполнит свои операции. Теперь нам нужно прочитать полученный результат, и мы его записываем в переменную es.
   Теперь можем убедиться, что всё это работает. В окно выбора программы занесем 4, LEdesdo=10, LEdvdo=15, LEchdl=5. Жмём MMdvdes, получаем в LEchdo 20.

   Структура случайной программы
    Это относится к одной из предыдущих тем, связанных с рассмотрением структуры программ. Вот структурная схема построения программы, связанная с нарушением принципа движения программы сверху вниз. Данная структура позволяет произвольно соединять между собой отдельные функциональные блоки программы.

   Оператор выбора switch позволяет выбрать очередной код программы, оператор цикла while обеспечивает непрерывное выполнение программы вплоть до её окончания, то есть введения в условие программы ноля. Демонстрацию работы программы можно наблюдать, задав в окно выбора программы LEmass2yslexp = 6, LEdesdo=1, MMdvdes ↓

   К вопросу об анализе.
   Техническая трудность, реальная или мнимая, связанная с анализом раздражителей, представленных в форме числа, состоит в том, что, по задумке, в процессе анализа должны использоваться поразрядные логические операции. Но  машиной они выводятся на экран монитора  в виде десятичных чисел. Например, мы рассматриваем конъюнкцию 3&7=3. С точки зрения теории множеств, в результате конъюнкции выделяются элементы, общие для двух множеств. Если считать, что 0 - это отсутствие элемента, а единица - его наличие, с одной стороны, и если, говоря о числе, мы можем утверждать, что оно состоит из подмножества не пересекающихся множеств, которые мы называем разрядами числа, то в конъюнкции (вообще в поразрядных логических операциях) сравниваются между собой элементы одного разряда. Но так как машина оперирует двоичными числами, то и сравниваются ею разряды двоичных чисел. Поэтому пользователю нужно видеть эти двоичные коды, между тем машина такой возможности ему не предоставляет.
   Поэтому нам нужно сделать программу, которая позволяет визуализировать двоичные коды числа. Именно с этой целью мы и взялись рассматривать возведение числа в степень. В структуре программы нет ничего интересного, во всяком случае, на мой сегодняшний взгляд. Поэтому просто пройдитесь по ней, введя в окно выбора программ LEmass2ysldo=5, LEdesdo=2, LEdvdo=0, LEchdo=1, LEchisldo - какое-н. число между единицей и 1024, нажимайте MMdvdo и наблюдайте двоичный  код числа в окнах LEm0-LEm10.
   Если вы наберете в окне выбора программ вместо 5 семерку, то окажетесь снова в программе, преобразующей десятичный код в двоичный, но сделанной по общепринятому алгоритму. В ней достаточно занести десятичное число в LEchisldo и нажать MMdvdes

   Наконец, переходим к тому, ради чего варилась вся эта каша. Введите 8 в окно выбора программ, наберите в LEchisldo и LEchislsdo числа, нажмите в окне на операцию, которую нужно произвести над числами, и наблюдайте результат в окне LEchislrdo и двоичные коды чисел и резульата операций в окнах LEm,s,r.

   19.04.09 г.