Назад

Вектор фиксированной длины

Механизм стековой арифметики

Продолжим обсуждение применений стека. Стек оказался очень удобным полем, на котором можно выполнять вычисления по сложным арифметическим формулам. Мы покажем механизм стековой арифметики на простых примерах. Но сначала стоит, видимо, вспомнить некоторые понятия математики.

Упражнения по стеку

Использование нескольких стеков

о сих пор все наши манипуляции были связаны с одним-единственным стеком, и мы радовались тому, насколько содержательны возможности его использования. А нельзя ли их еще расширить, располагая несколькими стеками одновременно?

Упражнения на несколько стеков

Программирование с использованием более чем одного стека - отнюдь не экзотика. Оказывается, в этой главе мы уже встречались с существованием одновременно двух стеков.

Еще упражнения со стеком

Первый стековый язык программирования

Первым стековым языком программирования стал FORTH (по-русски: Форт), разработанный Чарльзом Муром (Charles H. Moore). Почему такое название?

Некоторые общие элементы языка FORTH

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

Примеры

Немного геометрических понятий и операций

ПостСкрипт манипулирует с таким привычным "школьным" объектом как евклидова плоскость с введенной на ней системой самых обычных декартовых координат. Представьте себе просто лист бумаги.

Упражнения к предыдущему алгоритму

Стек графических состояний

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

Операторы цикла и условного исполнения

К управляющим конструкциям относятся операторы цикла и условного исполнения. Некоторые из них нам уже встречались, сейчас мы их рассмотрим более полно и систематично. Самый простой цикл повторений реализует уже знакомое нам слово repeat

Упражнение по циклам

Кривые Безье

В ПостСкрипте предусмотрены кривые линии двух типов - дуги окружности и так называемые кривые Безье. Мы рассмотрим их отдельно.

Кривые Безье - упражнения

Тексты ПостСкрипт

В своем важнейшем использовании - для подготовки печатных документов - ПостСкрипт не может обойтись без вывода текстов.

Тексты ПостСкрипт - примеры

Шрифты в ПостСкрипте

Об этом архиважном вопросе мы до сих пор специально умалчивали. В ПостСкрипте проблема шрифтов решена очень просто, может быть, первоначальное решение было даже слишком простым. Каждый шрифт определяется как набор очень экономно написанных процедур рисования отдельных букв, изображенных в одном и том же масштабе. Готовый шрифт записывается в отдельном файле вместе с некоторой справочной информацией и получает уникальное имя, по которому может быть найден.

Рекурсия

Трудно представить, что читатель, добравшийся до этого занятия и пишущий собственные программы, - будь то на языке Паскаль, либо на C, - ничего не знает о механизме рекурсии. Но и рискуя предположить подобное, мы уверены, что уж сталкиваться прежде с указанным механизмом ему приходилось.

Механизм рекурсии

Механизм рекурсии (то есть, самовызова), фактически, представляет лишь вариант организации цикла. При этом, если не предусмотреть возможность выхода, цикл работает бесконечно, как в истории “попа и собаки”. Разумеется, выход можно организовать по-разному, но в любом случае требуется изменение некоего управляющего параметра. В “обычных” циклах с предусловием и постусловием изменение должно происходить внутри тела цикла.

Сортировка с помощью рекурсии

Согласно приведенным в ней данным, рекурсивный вариант быстрой сортировки QuickSort несколько опередил по быстродействию аналогичную программу NonRecQuickSort, представлявшую нерекурсивный механизм.

Рекурсия - упражнение 1

Рекурсия - упражнение 2

Канал связи

Для обмена информацией (еще говорят: “для передачи сообщения”) между двумя носителями (назовем их источником и приемником) нужен т.н. канал связи.

Упражнение

Задача - Транслитерация

Сжатие данных

Исключение избыточных элементов данных

Такая возможность возникает в связи с определенными ограничениями, присущими данным, причем ограничения могут диктоваться либо содержанием всего набора данных, либо контекстом, либо и тем и другим. Рассмотрим подробнее несколько таких механизмов.

Исключение избыточных элементов данных - пример

Задача

RLE алгоритм

Вновь продолжаем обсуждение механизмов исключения избыточных элементов данных, которое мы вели в двух предшествующих занятиях. Еще один механизм, ликвидирующий избыточность, уже шестой по счету в нашем рассмотрении, основан на использовании повторов “соседних” данных. Например, в приведенной ранее последовательности

RLE - Задача

Еще задача на РЛЕ

Пример RLE

Немного истории

Американский художник-портретист Сэмюэль Финли Бриз Морзе (S.F.B.Morse, 1791-1852), помимо занятий живописью, любил путешествовать. И вот, занимаясь тем и другим одновременно, он неожиданно, если учитывать к тому же еще и зрелый возраст, в 1832 г. заинтересовался проблемами электромагнетизма.

Коды переменной длины

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

Коды переменной длины - упражнение

Геометрические задачи в программировании

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

Геометрические задачи в программировании - упражнения