ADru/Справка.odc

О примерах программ из книги:
Н.Вирт Алгоритмы и структуры данных. 
Новая версия для Оберона
ДМК Пресс, Москва, 2010
Ф.В.Ткачев, 2009-10-18; последние исправления 2012-11-09
Книга на Озоне:
Н.Вирт. Алгоритмы и структуры данных. Новая версия для Оберона. ДМК Пресс, 2010

КакприступитькБлэкбоксу
Номенклатураназваниймодулей
Оформлениепримеровпрограммизкниги
Вспомогательныемодули
Ввод-вывод
Списокмодулейспримерами

Как приступить к Блэкбоксу

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

Номенклатура названий модулей

Примеры программ из книги оформлены в виде модулей, список которых приведен ниже. 
В каждом примере в книге в первой строке справа дан комментарий с именем модуля, в котором реализован данный фрагмент (иногда с указанием имени конкретной процедуры через точку).
Например, имя модуля вида ADruS192_БМ разбивается следующим образом:
	
	ADruS192_БМ  >>  ADru + S192_БМ  >>  ADru + S + 192 + _БМ
	
	ADru  общее для всех модулей имя подсистемы в Блэкбоксе, в которой собраны примеры (в Блэкбоксе все программы организованы в подсистемы, и каждой подсистеме соответствует папка в главной папке Блэкбокса, в данном случае  папка ADru).
	S192_БМ  имя файла в папке ADru/Mod/ (в подпапке Mod хранятся исходники модулей подсистемы), расширение у имени файла  .odc, так что полное имя файла относительно главной папки Блэкбокса будет ADru\Mod\S192_БМ.odc. 
Это не обычные текстовые файлы, читать их нужно в Блэкбоксе. Потому что в Оберонах реализована мощная парадигма организации пользовательских интерфейсов, называемая тексткакинтерфейс.
	S  section = раздел.
	192  соответствует номеру раздела: 1.9.2.
	_БМ  напоминание, что речь идет об алгоритме Бойера и Мура.

Список модулей дан ниже. В таблице для каждого модуля указана соответствующая страница книги (первого издания 2010 г.). Эта страница указана и в комментарии внутри модуля.

Оформление примеров программ из книги

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

		(* фрагмент из книги, с.24: *************************************)
		y := 1.0;  i := n;
		WHILE  i > 0  DO   (* x0n  =  xi * y *)
			IF  ODD(i)  THEN  y := y*x  END;
			x := x*x;  i := i DIV 2
		END;
		(* конец фрагмента ******************************************)

Обычно фрагментам из книги что-то предшествует (заголовок модуля, глобальные объявления и т.п.).
А после фрагментов идут процедуры-драйверы, которые, собственно, и вызываются.
Команды исполнения процедур-драйверов вместе с вводимыми данными и комментариями собраны после текста модуля. 
Обычно это т.наз. коммандеры (commanders)  объекты вида , по которым кликают мышкой, чтобы выполнить процедуру.
Чтобы посмотреть, как это сделано, и почитать дальнейшие инструкции, кликнуть сюда:
ADruS13.

Вспомогательные модули 
В книжке используется несколько вспомогательных модулей (Files, Texts, Runs, Draw).
Их реализации в данном пакете названы по описанной выше схеме, но в инструкциях импорта им присваиваются такие же имена, как и в книге, так что сами фрагменты программ из книги менять не надо:
	Files 	:= ADruS171_Files
	Texts 	:= ADruS174_Texts
	Runs 	:= ADruS242_Runs
	Draw 	:= ADruS33_Draw

Ввод-вывод
В примерах в книге обычно для вывода результатов используется глобальный объект записи (Writer).
В реализациях примеров этот глобальный объект направляет вывод в стандартный для Оберона/Блэкбокса т.наз. Рабочий журнал (Log).
Во вспомогательных процедурах также используются штатное средство Блэкбокса для вывода в Рабочий журнал  модуль StdLog (обычно в сокращении Log := StdLog).
Для ввода данных в реализации примеров используется модуль i21sysIn под псевдонимом In. Модуль i21sysIn  это исправленная и чуть развитая версия модуля In, поставляемого в дистрибутиве Блэкбокса. Модуль In в Блэкбоксе взят один-в-один из книги Вирта и Райзера по программированию на Обероне, и поэтому намеренно воспроизводит одну ошибку. Подробнее: выделить двойным кликом прямо здесь имя i21sysIn и вызвать команду меню Info, Документация (ее можно вызвать и через контекстное меню, открывающееся кликом правой кнопкой).

Список модулей с примерами
Чтобы открыть исходник модуля, кликнуть по его имени.
Имя модуля	Страницы в книге	Примечание
Глава 1.
ADruS13    инструкции!	24	возведение в степень;
ADruS14	28-29
ADruS171_Files	39-40	вспомогательный модуль Files
ADruS174	47	преобразование числа <> литеры
ADruS174_Texts	48-49	вспомогательный модуль Texts
ADruS18_Поиск	50-52
ADruS183	54	поиск в таблице
ADruS191_Простой	56-57	простой поиск слова в тексте
ADruS192_KMP	56, 60, 62	Кнут, Моррис, Пратт
ADruS193_БМ	63-64	Бойер, Мур
Глава 2. Сортировка
ADruS2_Sorts	74, 76, 78-79, 82, 87, 90, 94	сортировки массивов
ADruS242_Runs	105	вспомогательный модуль Runs
ADruS24_MergeSorts	101, 108, 112, 121, 126	сортировки последовательностей
Глава 3. Рекурсивные алгоритмы
ADruS33_Draw	138	вспомогательный модуль Draw
ADruS33_Hilbert	138	гильбертовы кривые
ADruS33_Sierpinski	141	кривые Серпиньского
ADruS34_KnightsTour	146	путешествие коня
ADruS35_Queens	151, 153	8 ферзей
ADruS36_Marriages	158	стабильные браки
ADruS37_OptSelection	163	задача об оптимальном выборе
Глава 4. Динамические структуры данных
ADruS432_List	180	списки
ADruS432_List2	180
ADruS432_List3	182
ADruS432_List4	183
ADruS433_TopSort	187, 189	топологическая сортировка
ADruS441_BalancedTree	196	сбалансированные деревья
ADruS443_Tree	201-202	двоичные деревья
ADruS443_CrossRef	204
ADruS444_Deletion	206
ADruS45_AVLtrees	214, 217	АВЛ-деревья
ADruS46_OptTree	224
ADruS471_Btrees	235
ADruS472_BBtrees	245
ADruS48_PrioritySearchTrees	249, 250
Глава 5. Хэширование
ADruS53_CrossRef	259


Для компиляции всех модулей с примерами кликнуть по вот этому черному коммандеру:
DevCompiler.CompileThis
	ADruS174_Texts	
	ADruS171_Files	
	ADruS242_Runs	
	ADruS33_Draw	
	ADruS13	
	ADruS14	
	ADruS174	
	ADruS18_Поиск	
	ADruS183	
	ADruS191_Простой	
	ADruS192_KMP	
	ADruS193_БМ	
	ADruS2_Sorts	
	ADruS24_MergeSorts	
	ADruS33_Hilbert	
	ADruS33_Sierpinski	
	ADruS34_KnightsTour	
	ADruS35_Queens	
	ADruS36_Marriages	
	ADruS37_OptSelection	
	ADruS432_List	
	ADruS432_List2	
	ADruS432_List3	
	ADruS432_List4	
	ADruS433_TopSort	
	ADruS441_BalancedTree	
	ADruS443_Tree	
	ADruS443_CrossRef	
	ADruS444_Deletion	
	ADruS45_AVLtrees	
	ADruS46_OptTree	
	ADruS471_Btrees	
	ADruS472_BBtrees	
	ADruS48_PrioritySearchTrees	
	ADruS53_CrossRef