на главную страницу
визитка
темы
А почему бы машине самой не
разрабатывать для се6я маршрут. Действительно, если задан какой-то маршрут, то
по абсолютным значениям адресов ячеек несложно вычислять их относительные адреса
друг к другу.
Сначала построим маршрут, который рассчитывается сразу от начала до
конца. Длина такого маршрута будет ограничиваться десятью точками, так как будут
использоваться структуры программы PTable2, которая рассчитана на 10 операций. И
затем следует попробовать сделать так, чтобы программа рассчитывала следующий
шаг маршрута после выполнения предыдущего при том, что весь маршрут её задан с
самого начала.
Другими словами, следует предусмотреть выполнение
программы в целом и по шагам.
Неопределенность- это вещь, пожалуй,
самая неприятная из возможных неприятностей. Если в машине что-то отказало,
что-то не работает, то это неприятно, но, во всяком случае, ясно, "кто виноват",
а часто, и "что делать". Но если возникает неопределенность, то сложность её
вылавливания заключается в том, что неизвестно, что ловить, поскольку нечто
проявляет себя в разных признаках, сбоях, которые возникают самым неожиданным
образом и в самых неожиданных местах.
Кажется, программирование, что
тут может быть неопределенного? Попробуйте запрограммировать сами
неопределенность - ведь, пожалуй, что не получится. Для других это, может быть,
и будет выглядеть как неопределенность, но не для вас, потому что вы знаете, что
за вашей "неопределенностью" стоит жесткий детерминизм.
И вот, как бы там
ни было, а вот так. А вы, "товарищ Шура", пилите. Вот и продолжим пилить. Я
торжественно сказал себе: "Ищи жесткость". Вот поиском этой жесткости и
займемся. Здесь всё выглядит так, как в медицине: принял лекарство и устранил
недуг, но приобрел множество других недугов, от которых есть свои лекарства,
которые, в свою очередь, производят свои недуги, и так до бесконечности. Так что
в этом отношении медицина бессмертна, внося всевозможные разбалансировки в
организм и устраняя одни ради получения десятка других. Вот и я кручусь в этом
нескончаемом круге. А в этом деле долго молчишь, но, наконец, у тебя, как на
карусели, начинает кружиться голова, и ты соображаешь, что уже не способен ни к
какой сообразительности, и нужно отвлечься, нужно поговорить.
Я,
конечно, был доволен, когда в части программы получилось то, чего я хотел. Я
выловил то, что не давало мне решения проблемы, но, как всегда, когда человек
становится "слишком счастлив", оказывается, что преждевременно, потому что те
вещи, которые ты перед этим точно также отлаживал, в них проявилось поведение
человека, который неожиданным образом набрался. И ты оказываешься перед этим
очередным фактом с глупым видом и отчаявшейся физиономией, и тебя накрывает
псих, и ты думаешь: "а ну его..."
Что же получается? Ты получаешь
жесткость в одном месте, и следствием этого являет себя мягкость в других
местах, которая перед этим была отлажена и была жесткой.
Здесь потому
и накрывает псих, что создается впечатление, что ходишь по кругу.
Посему попробуем делать то, что делали, но отмечать при этом то, что мы
делаем. Итак, очередная жесткость связана с выбором маршрута. Эта программа не
закончена, в неё должна быть осуществлена "заключительная, но не последняя по
значимости" вставка. Однако существует внутренний бзик: отладить программу до
этой разработки, притом, что понимаешь, что следовало бы переключиться на другую
тему, отвлечься, тогда и на проблему неопределенности взглянешь другими глазами.
Тебе кажется, что это было бы правильно. Но тут же возникает возражение, что
сейчас ты "в теме", а если это дело отложить, то придется начинать всё заново. И
тут подаёт свой голос лень, начинать "всё заново" тебе не хочется, ну, и ходишь
т.о. по кругу до бесконечности.
Хорошо, при выборе маршрута
последовательность подпрограмм: 1-6-5-8-9-7
Первая подпрограмма - выбор
режима работы, в данном случае, выбор маршрута. 6 - ввод маршрутного поля, на
котором будут осуществляется построение координат маршрута и запись их в память.
5- построение маршрута. 8- поле маршрута. 9- это не сделанная часть программы, в
которой маршрут должен будет воспроизводиться по шагам и в целом. При этом в том
и в другом случае промежуточные пункты должны будут отмечаться в
последовательности выполнения. 7- сброс информации, накопленной в таблице, и
процесс может начинаться сначала.
Итак, здесь мы крутимся, и здесь у
нас всё в порядке. До этого у нас всё в порядке было с двумя другими режимами -
построением операций пользователем и применением им операций, заданных по
умолчанию. Поступим так же глупо, как мы делали это до сих пор: выберем для
начала операцию по умолчанию. То, чего не было в двух последних операциях до сих
пор - это очистки таблицы по окончании работы с тем, чтобы можно было "начать
всё заново".
Выбираем режим "по умолчанию". Последовательность здесь: 1-2-3-4
Подпрограмма 1- выбор режима, подпрограмма 2 - ввод операций по умолчанию ,
подпрограмма 3- запись и проверка записи введенных операций. 4 - осуществление
движения: мы набираем в окне sodu операцию, которую хотим реализовать, и щелкаем
мышью на ячейке, относительно расположения которой осуществляется операция.
И, наконец, когда мы закончили нашу игру, мы должны привести
программу в исходное состояние. Для этой цели можно взять какое-то число,
введение которого в ячейку приводило бы к тому, что при щелчке на ячейке
программа устанавливалась бы в начальное положение. Правда, это было бы не очень
логично и не очень красиво. В то же самое время создавать для этого
специальную кнопку - пожалуй, это было бы логичнее всего и удобнее. Это было бы
наилучшим решением. Но так как "нормальные герои всегда идут в обход", то
возникла идея использовать окно выбора подпрограммы и кнопку "Пуск". Что стоит
за этой идеей? Во-первых, возможность путаницы, если подпрограмм много и они
относятся к разным уровням. Но положительная сторона такого подхода состоит в
приобретении опыта использования одной кнопки и одного окна для множества
качественно различных вещей, что представляется экономичным. Ну, как бы там ни
было, а это - новый опыт, и хотя бы ради этого его и применим.
И вот тут мы наталкиваемся на одну любопытную вещь. Во-первых,
оказывается, что только что высказанная мысль относится не к настоящему, а к
прошлому, поскольку в режиме маршрута выбор программ автоматизирован, и из-за
этой автоматизации возникла забывчивость по поводу того, что режимы введения
собственных операций и применения операций по умолчанию являются ручными
режимами: прежде, чем кликнуть на ячейке, мы должны ввести в окно "sodu" номер
операции, который является её именем, и только после этого щёлкнуть на ячейке.
Если мы введем в sodu код 77 и кликнем на произвольной ячейке,
появится окно "окончить". Нажатие на "ок" приведет к выходу программы в
исходный режим. Аналогично, для того, чтобы выйти из режима, можно ввести в окно
"подпрог" имя 7 подпрограммы очистки.
И оказывается,
что всё работает, нужно только знать, как работает. Это значит, что проблема
хождения по кругу, о которой я говорил, связана не с объективной реальностью, а
с субъективной, и на самом деле нужно "лечить" не объективную реальность, а
собственную голову. Глючит не программа во внешности, а сложившийся автоматизм в
голове. И средством излечения головы от головной боли и недопущения в связи с
этим идеи существования всевозможных потусторонних сил является переход от
непроизвольно складывающихся стереотипов к стереотипам по правильным образцам,
которые могут быть описаны и представлены с тем, чтобы любое действие могло быть
проверено на свою правильность. Оказывается, что в подавляющем числе случаев
причиной наших неудач является не реальность, а наше неадекватное отражение её.
Теперь нам остаётся обратиться к недостающей части программы в
режиме маршрута, обеспечивающей его выполнение.
Начнём с предпосылок. У нас есть операции,
представляющие собой приращения относительно выбранной ячейки и есть имена
операций, по которым мы можем выбрать нужную нам операцию. Для того, чтобы
осуществить переход, нам нужно иметь адрес ячейки, относительно которой
совершается переход. Представляется, что, во всяком случае, адрес ячейки начала
маршрута нам должен быть дан. Тогда, задав соответствующую операцию приращений,
мы переходим в следующую ячейку, которую у нас принято отмечать звёздочкой. Что
бы хотелось? - чтобы существовала возможность предварительной записи адреса
ячейки, в которую осуществлен переход. Но для того, чтобы получить такой адрес,
нужен клик на ячейке. А как еще иначе это же самое можно сделать?
Итак, что у нас есть? У нас есть
операции. Что представляют собой операции? Каждая операция состоит из адресов
двух ячеек, одна из которых содержит в качестве своего значения величину
приращения столбцов, другая - строк. Если мы к существующему адресу столбца
ячейки добавим соответствующее выбранной операции приращение, и то же самое
сделаем относительно строки, то мы получим адрес другой ячейки, и сможем
обратиться как к её содержанию, так и ввести в неё свою информацию. Мы можем
также относительно любой данной ячейки применить не одну операцию приращений, а
какое угодно их число, осуществляя соответствующее сложение приращений
относительно столбцов и строк. Т.о. мы получаем возможность перехода в любую
точку маршрута.
Вначале, когда мы строим маршрут, мы рассчитываем
приращения на каждом шаге маршрута, а затем применяем противоположную операцию,
добавляя сделанные нами приращения к исходному значению столбца и строки. Т.о.
мы получаем последовательность выражений, соответствующих каждой следующей
"станции" маршрута. Например, если начальные значения столбца и строки есть,
соответственно, col и row, а приращения, определяемые операциями, есть,
соответственно относительно столбцов и строк di0, di1,... и dj0, dj1,..., то
будем иметь:
col, row; col+dii11,
row+djj1, col+dii1+dii2,
row+djj1+djj2,
..., где буквы с индексами представляют имена операций приращения в
порядке, определяемом маршрутом
Ясно, что нам понадобятся массивы данных
подобного рода, которые должны сохраняться в памяти. И вот тут мы, по обычной
нашей привычке, делаем скачок и обращаемся к несколько иной теме с тем, чтобы
иметь позже возможность возвратиться к нерешенному вопросу о выполнении
маршрута, но уже "на следующем витке спирали", уже гораздо лучше
вооруженными. Пока же ограничимся программой PTable3 и
подождём, какие результаты даст нам следующее занятие.
15.01.09 г.