Отправляет email-рассылки с помощью сервиса Sendsay

Алгоритмы для всех

  Все выпуски  

Алгоритмы для всех


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
Рассылка "Алгоритмы для всех".
Выпуск 15-й, июнь 2001 г.

В выпуске:
 1. Приглашение к участию.
 Дальнейшие пункты идут как куски из переписки с Константином Даниленко.
 2. С.В.Пушкарев Способ перевода с одного языка программирования на другой.
 3. Про алгоритм любви. :-)
 4. Про алгоритмы сочинения стихов и прозы. :-)
 5. К.Б.Даниленко Создание алгоритмов в электронной таблице.

1. Создается рабочая группа ("пред-фирма") под рабочим названием "Консультационная
поддержка для всех". Области интересов:
  Определение стратегических целей организаций и жизненных целей лиц
  Определение фактических текущих целей организаций и лиц
  Управление временем
  Переговоры
  Разработка бланков (включая алгоритмы) для повседневной работы под конкретные
потребности заказчика.
  Измеримое повышение целеустремленности (как в профессиональном, так и в личном
плане)
  Решение текущих задач
  Проблемы взаимоотношений (деловые партнеры, семья...)
  Принятие сложных решений. Просто принятие решений. Для взрослых и детей.
  Работа со сложно адаптирующимися психологическими типами.
 (Получить примерное представление о круге моих собственных интересов можно
по архиву моей рассылки "Алгоритмы для всех": http://subscribe.ru/archive/people.algorithm/
 .)
 Предполагаемые товары и услуги: органайзер(ы), консультирование (в том числе
и других консультантов :-) ), обучение. Возможны варианты.
 Идеал - достижение клиентом его цели без какого бы то ни было изменения (Ну,
разве что он сам об этом попросит. :-) ) его психологии, представлений и пр.
с нашей стороны.
 Организационная структура предполагается (но не сразу :-) ) ~ в духе реинжиниринга:
владельцы процессов (руководители проектов) нанимают друг друга (и в прямом,
и в переносном смысле :-) ) для обеспечения полного цикла "клиент -> товар ->
деньги".
 Заинтересованным просьба писать на мой адрес.
 Буду благодарен за перепечатку этого объявления в других рассылках.
  (И вдвойне буду благодарен за сообщение мне об этом: чтоб оценить на будущее
перспективность аудитории той рассылки.)
  Сергей Пушкарев, pushkaryov@newmail.ru .

2-5. Здесь - начало. Продолжение будет в следующем выпуске.
  Мои вставки или изъятия кусков писем для рассылки даны в квадратных скобках.

>Это письмо в папку:             От: "Danilenko Constantin B."
>10/04/2001 15:19:49  Тема: Редактор для алгоритмов  

> С алгоритмами имею дело с 1987 г. Программирую на
>Фортране, Бейсике, Паскале и Си. Однако программы писал и пишу большей
>частью для решения собственных маленьких задачек, то есть то, что
>называется "примочками". Так что алгоритмы, как правило, держал в
>собственной голове. Если и возникала необходимость их формального
>изложения (в отчетах), то пользовался каким-нибудь простейшим
>графическим редактором (типа Drawing в Word).
>Но вот недавно в рамках диссера я столкнулся с такой задачей.
>Имеются две программы на Фортране, написанных моим руководителем лет
>8-10 назад. Программы большие, по полтора десятка модулей (исходники
>больше 120 кб каждый). Алгоритмы, как утверждается, отлаженные и
>проверенные. Так вот, моя задача состоит в следующем:
>1) Полностью понять алгоритм;
  Да, в голове это сделать будет, пожалуй, непросто... :-(

>2) Перевести программы на какой-нибудь более современный язык
>(предположительно Visual С++);
>3) Усовершенствовать (а на самом деле - полностью переделать) интерфейс;
>4) Совокупить программы в одну общую, чтобы она решала как отдельные,
>так и совместные задачи.
>Но, как Вы догадались, мой вопрос к Вам по специальности рассылки -
>пункту 1. Во-первых, в голове такой объем информации не удержишь.
  У меня все алгоритмы изначально - на бумаге. Естественным образом запоминаются
только те, которыми я часто пользуюсь.

>Во-вторых, на дальнейших стадиях (в особенности 4) алгоритм придется
>серьезно перерабатывать.
  Если он будет задан (в том числе) в обычном словесном виде, то я думаю, это
не составит проблемы.

>В-третьих, нужно преодолеть неструктурность
>Фортрана.
  Всякие отступы легко описывается ветвями деревьев. По поводу текстового представления
сложных условий см. выпуски про алгоритм распознавания.

>Так вот, пора сформулировать задачу. Мне нужна утилита (редактор),
>обладающий следующими свойствами:
>1) Возможность наглядного воплощения блок-схем;
>2) Легкость редактирования (вставка/удаление/изменение блоков);
>3) Совместимость с традиционными редакторами.
  Боюсь соврать, но вроде бы какие-то такие редакторы мне попадались на DOWNLOAD.RU
 . Вообще, я пробовал блок-схему для представления алгоритмов, но дерево и/или
специальная таблица (бланк для алгоритмов) оказались гораздо удобнее.

>Я все пытаюсь приспособить для этого Excel. По крайней мере, второе и
>третье условия удовлетворяются со свистом. Но вот с первым пунктом есть
>некоторые сомнения - а не толку ли я воду в ступе? [...] Поэтому я и думаю,
что мой
>вопрос покажется Вам наивным и простым. Тем легче будем Вам на него
>ответить.
  Я бы не сказал, что тут все так легко... :-( В письме могу только кратко изложить
идею решения. Не знаю, правда, насколько она будет работоспособна для исходников
по 120К...

Допустим, в программе есть оператор:
 ...
dim Picture(5,3)
 ...
  Нужно задать к нему вопрос: "Что этот оператор означает на обычном языке?"
и записать ответ над ним:
 ...
REM задать массив "Картинки" с пятью строками и тремя столбцами, И НА БЭЙСИКЕ
ЭТО БУДЕТ
dim Picture(5,3)
 ...
  Или если пронумеровать строки, то можно этот обычный текст давать не внутри
программы, а, н-р, рядом на бумаге.
  "Присказку" (связку) в конце строк в любой момент можно прекратить писать
или давать в сокращенном виде, - н-р: ИНБЭБ :-)

Далее к каждому такому предписанию задать вопрос "А зачем это нужно?" и тоже
записать ответ сверху, - с указанием отношения:
 ...
REM завести место для хранения номеров, ширины и высоты пяти картинок, А ДЛЯ
ЭТОГО НУЖНО
REM задать массив "Картинки" с пятью строками и тремя столбцами
dim Picture(5,3)
 ...
  Здесь связку лучше сохранять, - хотя бы в сокращенном виде: АДЭН.
  На бумаге связи задаются линиями. Две основные связи (А ДЛЯ ЭТОГО НУЖНО ...,
А ПОТОМ НУЖНО ...) описаны, кажется, в третьем выпуске рассылки.

  Далее следует задавать этот вопрос ("А зачем ...") к каждому ново записанному
предписанию и в точно таком же виде писать ответ над ним. Это выполняется процедура
определения целей (целеполагание). Делать это следует до тех пор, пока над-цели
для разных (соседних) операторов не начнут совпадать.
  В этот момент, я полагаю, алгоритм станет более или менее понятным, и не составит
большого труда в соответствии со словесными предписаниями заменить и взаимоувязать
операторы.

>"Danilenko Constantin B."
>14/05/2001 13:59:28  Тема: Не спуститься ли на землю?  

> В ответе были ссылки на предыдущие
>выпуски (я их добросовестно перечитал) и неуверенный совет зайти на
>DOWNLOAD.RU. Зашел. Обнаружил лишь один подобный редактор, но:
>1) сильно ориентированный на Паскаль;
>2) демо-версия, требующая забашлять для получения полноценной.
>И вот тут-то, еще раз перечитав рассылку, я осознал, что я чего-то
>кардинально не понимаю. [...]
>Лично у меня слово "алгоритм" ассоциируется прежде всего с терминами
>"программа" и "блок-схема", и лишь в последнюю очередь - с понятиями >"счастье",
"деловой успех", "бизнес". Вашу рассылку я рассматривал (и,
>каюсь, рассматриваю до сих пор) как оригинальную (забавную, смелую)
>попытку "поверить алгеброй гармонию", свести абстрактные понятия типа
>счастья к листку в клетку, расчерченному карандашом. Более того, мне
  Ближайший выпуск, наверно, будет про алгоритм счастья. :-) [В мае который
был.]

>Ваши изыскания можно рассматривать как попытку создания искусственного
>интеллекта с очень нестандартной позиции: если можно алгоритмизировать
  Я бы сказал, не искусственного, а ВНЕШНЕГО. - Не что-то отдельное и параллельное
тому, что в голове, а что-то извлеченное из нее, перенесенное на внешний носитель
и работающее как дополняющий (усиливающий) ее инструмент.

>достижение жизненной цели, то можно алгоритмизировать и все что угодно -
  На счет всего, чего угодно, не поручусь :-) , но

>музыку,
  это, наверно, можно. Кой-какие идеи на этот счет есть. :-)

>стихи,
  Уже вроде есть. Были описаны какие-то попытки машинного сочинения стихов еще
на заре программирования. Правда, там всякие шутники свои стихи за машинные
выдавали, так что не разберешь. См. Пекелис "Кибернетическая смесь"

>любовь...
  Вы будете смеятся, но алгоритм любви был создан еще лет так за тысячу до появления
самого понятия "алгоритм" и при этом в стихах (! ;-) ): это "Наука любви" Овидия.
У Стендаля ("О любви") в этом плане все гораздо беднее: фактически только симптоматика,
да и то какая-то сильно специфическая или абстрактная.

>наивным. Мне казалось, что составлять алгоритмы наиболее эффективно
>учатся именно в программировании, где сама идея сконцентрирована,
>спрессована в скупые, не допускающие разночтений схемы. Любое другое
>воплощение алгоритмов неизбежно оказывается разбавленным посторонними
>соображениями (хотя бы "не хочу", "не люблю", "не нравится").
  Ну, это дело вкуса: кто-то алгоритм сочинения романа пишет (я встречал, -
правда, без упоминания термина "алгоритм"), кто-то программирование искусством
считает. :-)

>Неужели же, думал я, ни перед кем такая задача не вставала? Неужели
>никому не приходило в голову заменить "пачку листов А4 толщиной,
>наверно, в сантиметр" (цитата из рассылки) на простенький редактор?
  Это про рабочий образец органайзера говорилось: пустые бланки, по штуке каждого.
Максимальный размер программ у меня, кажется, 2К, а соответствующие им алгоритмы
- ,наверно, на страницу А4.

>Неужели шуршать бумагами удобнее, чем кликать мышой? А поиск? Надо
>перерыть все, чтобы найти искомое.
  У меня к бумагам оглавление есть. Ну, бывает, и в нем сложно найти нужный
алгоритм или таблицу, но это все же проще, чем рыться в файловых архивах.

>А редактирование? Да от линий зарябит
>в глазах!
  Сдается мне, что от вглядывания часами в монитор зарябит еще сильнее... И
не только зарябит... :-(

>Более того, я убежден в обратном. Не будет серьезный программист
>усложнять себе задачу, заменяя привычный, почти родной, монитор на лист
>бумаги, а клавиатуру - на карандаш. На начальном, примитивном уровне
  А как у этого "серьезного программиста" со зрением и с кой-какими другими
органами? :-/

>надо уметь составлять алгоритмы от руки, но сколь-нибудь сложная задача
>превращается тогда в войну с бумажным морем, и алгоритмизация вместо
  Это только кажется. СУММАРНАЯ толщина ВСЕХ моих записей (приведенных к формату
А4) с 1991 по 2001 год составляет всего ~1.3 метра.

>упрощения работы ведет вначале к ее усложнению, а затем - к полному
>ступору.
  Кого ведет? Когда лично у Вас последний раз был такой ступор? :-)

>Точно так же, чтобы выкопать ямку для саженца, пользуются
>лопатой, но никому не придет в голову тупо переносить этот же метод на
>рытье котлована здания. Более масштабные проекты неизбежно требуют более
>совершенных технических средств.
  По моим задачам в большинстве случаев мне хватает "ручного" составления бумажных
алгоритмов. Для оставшегося меньшинства :-) случаев есть идея как автоматизировать
создание алгоритмов. (Собственно, я поэтому и давал объявление в рассылке про
доступную программу нахождения кратчайшего пути. Отклики на объявление были,
но из конкретных - только указания на программу "Метро", - но там нельзя использовать
внешние данные.)

>В конце концов, можно избрать компромисс - алгоритм детализируется до
>такой степени, что один блок помещается на один лист, и нет этих
>километровых стрелок. Блок номер такой-то, берем лист и смотрим.
  У меня не было таких проблем. Максимальный мой алгоритм состоял, кажется,
из 110 шагов и помещался на 2-х листах А4.

>В конце концов, можно избрать компромисс - алгоритм детализируется до
>такой степени, что один блок помещается на один лист, и нет этих
>километровых стрелок. Блок номер такой-то, берем лист и смотрим.
  [В моих алгоритмах вообще нет стрелок: все переходы задаются ссылками на номера
строк. Да и в деревьях решения задач, строго говоря, стрелок тоже нет: просто
линии + определенные правила их чтения.]

>Мне казалось, что цель рассылки - научить подписчиков составлять
>алгоритмы, а какими именно средствами - на листе бумаги, на доске, на
  Про свои цели я бы сказал, например, так: научить не боятся алгоритмов как
таковых, научить их использовать везде, где они могут принести пользу, а не
только там, где они традиционно применяются... Впрочем, я допускаю и какие-то
иные цели... Проверяется это, наверно, только экспериментально: присылаете свои
материалы для публикации в рассылке, если я их публикую, значит, цели этих материалов
входят в набор возможных целей рассылки. :-)

>Конечно, серьезные программисты вряд ли подпишутся на рассылку,
>призванную научить составлять алгоритмы - они и сами это умеют.
  Без комментариев. :-)

>Неужели
>самый объемный, сложный, изощренный алгоритм проще реализуется на
>клетчатом листочке?
  Не знаю, насколько уж там "сложны и изощренны" мои алгоритмы (вообще говоря,
я бы отнес названные свойства к недостаткам таких алгоритмов), но до сих пор
у меня было именно так.

>То, что искомые мною редакторы существуют, и в несметном количестве
>вариантов, у меня нет никаких сомнений. И я не видел (как не вижу
>сейчас) человека, более, чем Вы, осведомленного в вопросе о том, какой
>из них подойдет мне для решения конкретной задачи, описанной мною в
>предыдущем письме.
  Увы, увы... :-( "Играем как умеем" :-) Главным образом на бумаге в клеточку.
:-) Или на распечатках своих же бланков.

>Я ведь не против алгоритмизации достижения счастья, как и не против
>котлованов и экскаваторов. Но на моем, примитивном, уровне, для моих
>целей, мне больше подходит лопата. Не спрашивать же мне об этом
  И как эта "лопата" должна выглядеть в Вашем случае? Какие требования Вы к
ней предъявляете?

>Вы ведь не сразу пришли к тем знаниям, которыми обладаете, так же как
>Лобачевский начинал с арифметики. Считайте, что я просто пытаюсь
>повторить Ваш путь.
  А, может, не стоит? :-)  Тут нет связи (тем более, обратной) между понятностью
и продвинутостью. В качестве аналогии могу привести пример интерфейсов для DOS
и Windows.

>Вот такие вот мысли родились у меня по прочтении Вашего ответа. Судя по
>всему, корень моего непонимания ситуации сидит где-то очень глубоко, и
>придется до него докапываться.
  Я так и не понял, в чем препятствие к использованию Excel'я: справляется со
своими функциями и ладно. Я по Вашему описанию сунул туда один свой алгоритм:
да, пожалуй, иногда в нем держать удобнее, чем на бумаге или просто в текстовом
файле. Можно также и WinWord использовать: режим "Структура документа".

>А пока поделюсь с Вами собственными идеями по тому, как приспособить для
>визуализации алгоритмов всем известный редактор, занимающий, пожалуй,
>второе место в мире по популярности после Word, а именно, редактор
>электронных таблиц Microsoft Excel.
>Такое решение напрашивалось, ибо изначальное наличие строк и столбцов,
>во-первых, упрощает интерпретацию алгоритма, во-вторых, создает иерархию
>(слева - высшие элементы, справа - низшие), и, в-третьих, не
>ограничивает объем элемента (будь то оператор или комментарий к нему)
>физическим объемом ячейки, позволяя втиснуть в маленький прямоугольничек
>даже небольшую повесть о тяжелой и неказистой жизни простого
>программиста.
>Итак, оператор, комментарий, операнд или ключевое слово конструкции
>занимает одну ячейку. Последовательность (группа) операторов считается
>блоком и имеет тот же, что и оператор, порядок иерархии.
>Конструкция (цикл или ветвление) также является блоком, при этом
>оператор(ы), входящие в конструкцию, имеют низший порядок и,
>следовательно, сдвигаются на один столбец вправо. То же относится к
>вложенным конструкциям, наличие которых создает все более низкие уровни
>иерархии.
>Каждый блок можно для пущей наглядности окружить рамкой, благо в Excel
>это делается нажатием одной кнопки. Далее, в первом столбце можно писать
>номер блока. Я всегда пишу его напротив верхнего левого угла блока.
>Поскольку дочерний элемент находится относительно материнского не только
>правее, но и ниже, такая нумерация указывает на данный блок совершенно
>однозначно. Номер блока можно использовать для ссылки, в том числе
>электронной.
>Оформление конструкций остается на выбор составителя. Например, цикл
>можно оформить по-русски, типа "i от 1 до 100 шаг 5", в конце "конец
  Я бы рекомендовал именно так и оформлять. У меня все сначала (на бумаге, в
алгоритме или в дереве решения задачи) по-русски, а потом, где надо, (параллельно
в файле) пишу команды, операторы... Из алгоритма таким образом вычленяется программа
(одна или несколько). И в конце концов сам бумажный алгоритм либо полностью
переходит в программу, либо изрядно "съеживается": вместо нескольких/многих
шагов теперь стоит один: вызов программы (эквивалент оператора CALL в BATCH-программах).

>цикла по i" или "следующее i". Оформление ветвления также очевидно: в
>первом (старшем, материнском) столбце, например, "выбор по х", в том же
>столбце варианты, например, "x > 5", " -3 <= x <= -1", а во втором
>(дочернем, младшем) столбце, на строчку ниже (это важно) -
>соответствующий блок. Блок завершается строкой на материнском уровне
>"конец выбора по х". Впрочем, язык и степень условности (формализации)
>целиком произвольны - главное, чтобы автор тратил минимум времени на
>разбор того, что сам наваял (чиновнику следует прекратить движение по
>карьерной лестнице, когда он перестает понимать собственный почерк).
>Памятуя о том, что в традиционной блок-схеме разные виды конструкций
>оформляются зрительно по разному, автор может выбрать разные цвета для
>рамки, шрифта или заливки. Мне это представляется излишним.
>Если не обращать внимания на буквы и цифры (например, посмотреть на
>Print Preview), то получаем нечто напоминающее блок-схему. Если,
>напротив, сбросить результат в текстовый файл (tab-delimited), то
>получаем программу на выбранном языке, готовую к употреблению тем более,
>чем ближе к правилам данного языка были избраны правила оформления
>алгоритма. Весьма удобно, что автоматически образуются абзацные
>(табуляционные) отступы, то есть правила оформления программ,
>характерные для большинство языков структурного программирования,
>автоматически соблюдаются.
>Однако вряд ли это пригодится. Алгоритм по определению не должен быть
>привязан к конкретному языку. Алгоритм (насколько я его понимаю, у Вас
>может быть иное мнение)
  Есть. И именно иное. :-)

>- это "межъязычный" язык (типа международного
>языка жестов или дорожных знаков).
  Процитирую Вас же: "главное, чтобы автор тратил минимум времени на разбор
того, что сам наваял". :-)

>Еще одно важное свойство Excel - предельная простота редактирования. Нет
>ничего легче вставить строки, уж не говоря об их удалении. Если уровень
>иерархии меняется, то блоки сдвигаются вправо или влево. При этом, как и
>положено, остальные блоки никак не затрагиваются.
>Разумеется, я далек от мысли считать Excel идеальным инструментом для
>составления алгоритмов. Более того, недостатков больше, чем преимуществ.
  Какие это недостатки?


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное