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

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

  Все выпуски  

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


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

Он идет как продолжение июньского (15-го) выпуска.

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

  Это на мой взгляд излишне жесткие и непонятно кому нужные требования к
алгоритму (или к себе :-) ). Лично я склонен рассматривать любовь как нечто
взаимное ( т.е., 1) безответная любовь - ~как патология :-) 2) взаимность -
по всем параметрам, - в том числе и по продолжительности :-) ). И у Овидия
дано именно в этом ключе.

>В том, что вывести алгоритм любви не удалось Стендалю, и сомневаться не
>приходится. Что же касается "симптоматики", то согласны ли Вы, что
>описание симптомов не есть алгоритм?! "Отомщу" Вам цитатой из моего

  Ну, в общем, согласен. Хотя переход от алгоритмов к симптомам (или
наоборот) построить можно.

>> Почему не готовы? Это Вам так кажется. Пришлите мне какой-нибудь
>> небольшой
>> (операторов 10-15, не больше) б/м самостоятельный кусок того текста на
>> Фортране, который Вам нужно перекинуть в Си, - прямо в XLS.
>>
[...]
>Пример взят из школьного курса математики -

  Как пример годится, но по моему опыту всегда лучше брать реальные задачи:
тут важна мотивация доведения решения до конца.

>квадратное уравнение. Если высказать свое мнение, я бы, пожалуй,
>предпочел первый вариант. Серой заливкой обозначается последний блок, то

  Я тоже из всех вариантов алгоритмов предпочитаю самые понятные (самые
легко исполнимые).

--------------------
Две формы текстового представления алгоритма.

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

:10_Ввод A, B, C
___________1_внести в следующие записи
___________2_A
___________3_B
___________4_C
:20__A = 0?
___________5_внести в следующую запись
___________6_Равна ли запись #2 (з2) нулю?
___________7_сли да, - перейти к записи #8 (з8). Если нет, - к записи #19 (з19).
:____да_,- линейное уравнение
:30___B = 0?
___________8_внести в следующую запись
___________9_Равна запись #3 (з3) нулю?
___________10_Если да, - перейти к 11-й записи. Если нет, - к 16-й.
:_____да
:40____C = 0?
___________11_внести в следующую запись
___________12_Равна ли запись #4 (з4) нулю?
___________13_Если да, - перейти к 14-й записи. Если нет, - к 15-й.
:______да
:50_____Сообщение = "х - любое число"
___________14_произнести вслух :-) : "корень уравнения может быть любым числом"
:_______Вывод результатов
:______нет
:60_____Сообщение = "Корней нет"
___________15_произнести вслух :-) : "у данного уравнения корней нет"
:_______Вывод результатов
:_____нет
:70____x = - C/B
___________16_посчитать и внести результат в следующую запись
___________17_= - з4/з3
:____Вывод результатов
___________18_произнести вслух :-) : "Корень данного уравнения равен <з17>".
:____нет
:80___D = B^2 - 4*A*C  _____  (D - дискриминант)
___________19_посчитать и внести результат в следующую запись
___________20_з3^2 - 4*з2*з4
:90___D?
:______D < 0
___________21_внести в следующую запись
___________22_з20 меньше нуля?
___________23_Если да, - перейти к з24. Если нет, - к 25-й.
:100____Сообщение = "Действительных корней нет"
:_______Вывод результатов
___________24_произнести вслух :-) : "У данного уравнения действительных
корней нет."
:______D = 0
___________25_внести в следующую запись
___________26_з20 равно нулю?
___________27_Если да, - перейти к 26-й записи. Если нет, - к 31-й.
:110____x = -B/(2*A)
___________28_посчитать и внести результат в следующую запись
___________29_ - з3/(2*з2)
:_______Вывод результатов
___________30_произнести вслух :-) : "Корень данного уравнения равен <з29>".
:______D > 0
___________31_внести в следующую запись
___________32_з20 больше нуля?
___________33_Если да, - перейти к 34-й записи. Если нет, - куда угодно. :-)
:120____x1 = (B + sqrt(D))/(2*A)
___________34_посчитать и внести результат в следующую запись
___________35_(з3+sqrt(з20))/(2*з2)
:_______x2 = (B - sqrt(D))/(2*A)
___________36_посчитать и внести результат в следующую запись
___________37_(з3-sqrt(з20))/(2*з2)
:_______Вывод результатов
___________38_произнести вслух :-) : "Корни данного уравнения равны <з35> и
<з37>".


Записи #32 и #33 даны только для соблюдения единообразия условий. Их
спокойно можно убрать, скорректировав ссылки. (Отмечу, что сам я условий в
алгоритмах не люблю, и предпочитаю сделать два новых алгоритма, а не ветвить
старый.)

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

Здесь даны две формы. Если кто знает третью (4-ю, 5-ю ... :-) ) формы, -
пишите: опубликуем... :-)

Вариант "вертикальной расплющенности" :-) (через модифицированные диаграммы
Несси-Шнейдермана , - Грэхем Р. Практический курс языка Паскаль для
микро-ЭВМ.- М.:Радио и связь, 1986 и Уолш Б. Программирование на Бейсике.-
М.: Радио и связь, 1988) и его соответствие элементам блок-схемы дан в:
Очков В.Ф., Пухначев Ю.В. 128 советов начинающему программисту. - М.:
Энергоатомиздат, 1992 (с.14, 46).

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

  Не всегда желаемое совпадает с действительным... :-( Общий объем моих
файловых архивов за тот же период составляет ~1.104Г. ;-)

>> Я так и не понял, в чем препятствие к использованию Excel"я:
>> справляется
>> со своими функциями и ладно. Я по Вашиму описанию сунул туда один
>> свой
>> алгоритм: да, пожалуй, иногда в нем держать удобнее, чем на бумаге или
>> просто в текстовом файле. Можно также и WinWord использовать: режим
>> "Структура документа".
>>
>Согласен. Но есть ограничение по горизонтали: WinWord переносит длинные
>строки, чего Excel не делает. Следовательно, WinWord пригоден лишь для
>самых примитивных алгоритмов.
>> >Разумеется, я далек от мысли считать Excel идеальным инструментом для
>> >составления алгоритмов. Более того, недостатков больше, чем
>> преимуществ.
>> Какие это недостатки?
>>
>Главный - невозможность (по крайней мере просто) "сворачивать" блоки,
>как Explorer это делает с папками, а Regedit - с ключами реестра. Иными
>словами, представлять алгоритм в виде дерева. Такие редакторы есть
>(InfoPhilia, например), и во множестве, но у них плохо обеспечен
>экспорт/импорт. Впрочем, можно обдумать идею применение дерева
>директорий (сиречь папок) в виде дерева алгоритма. "Лист" такого дерева
>- файл, содержащий линейные блоки. Недостаток - в низкой скорости
>дисковых операций (относительно оных с оперативной памятью). Далее -
>создать ключ в реестре с каким-нибудь явно "несистемным" именем, типа
>VasiaPupkin, и внутри этого ключа "вырастить дерево". Преимущество -
>множество форматов данных реестра, каждый из которых имеет особые
>свойства. Недостаток - любые игрища с реестром подобны гусарской
>рулетке, одно неверное движение - и система падает с легкостью
>необыкновенной.
>Короче говоря, тут есть о чем подумать и поговорить. Вот поэтому я и
>предложил Вам организовать дискуссию на эту тему прямо в рассылке.
------------

Ну, можно и дискуссию... Как в английском анекдоте :-) :

"В лодке сидят трое удильщиков.
- Какая сегодня чудесная погода! - изрекает первый.
Проходит час, и второй возражает ему:
- Нет, сегодня отвратительная погода!
Проходит еще час, и подает реплику третий:
- Джентельмены, перестаньте спорить!"

;)

Но как бы то ни было, вместе с Константином Даниленко мы открываем в этой
рассылке рубрику "Работа с большими алгоритмами". Присылайте свои идеи,
способы, ссылки на полезные программы и пр.

В заключение ссылки на дружественные сайты и рассылки:
------------
Лента новостей "Тренды TMT рынков" - http://www.sotovik.ru/news/sbs.htm
Сведения о SBS Consulting - http://www.sotovik.ru/news/sbs000055.htm
-----------
Рекомендуем подписаться на рассылку "Практика эффективного управления"!
На страницах расылки Вы найдете интересные и полезные статьи "О
стереотипах", "О демотивации", "О сопротивлении изменениям" и многие
другие
http://subscribe.ru/catalog/economics.school.managepractice
-------------

Сергей Пушкарев, pushkaryov@newmail.ru


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

В избранное