
- •0. Алгоритм и его свойства.
- •1. Почему необходимо формализовать понятие алгоритма?
- •Пример формализации – машина Поста.
- •Базовые программные конструкции и их графическое представление.
- •Определите понятие «модульное программирование».
- •Метаязыки описания языков программирования.
- •Как сравнить между собой алгоритмы сортировки, поиска?
- •Идея алгоритма быстрой сортировки.
Определите понятие «модульное программирование».
Модульное программирование - это организация программы как совокупности небольших независимых блоков (модулей), структура и поведение которых подчиняется определенным заранее правилам.
Модулем (в модульном программировании) называется множество взаимосвязанных подпрограмм (процедур) вместе с данными, которые эти подпрограммы обрабатывают.
Модульное программирование предназначено для разработки больших программ.
Разработкой больших программ занимается коллектив программистов. Каждому программисту поручается разработка некоторой самостоятельной части программы. И он в таком случае отвечает за конструирование всех необходимых процедур и данных для этих процедур. Сокрытие данных (запрет доступа к данным из-за пределов модуля) предотвращает их случайное изменение и соответственно нарушение работы программы. Для взаимодействия отдельных частей (модулей) программы коллективу программистов необходимо продумать только интерфейс (взаимодействие) сконструированных модулей в основной программе.
Метаязыки описания языков программирования.
Для строгого и точного описания синтаксиса языка программирования, как правило, используют специальные метаязыки (языки для описания других языков). Наиболее распространенными метаязыками являются металингвистические формулы Бэкуса-Наура (язык БНФ) и синтаксические диаграммы Вирта .
Язык БНФ (называемый также языком нормальных форм) представляет компактную форму в виде некоторых формул, похожих на математические. Для каждого понятия языка существует единственная метаформула (нормальная формула). Она состоит из левой и правой частей. В левой части указывается определяемое понятие, а в правой - задается множество допустимых конструкций языка, которые объединяются в это понятие. В формуле используют специальные метасимволы в виде угловых скобок, в которых заключено определяемое понятие (в левой части формулы) или ранее определенное понятие (в ее правой части), а разделение левой и правой частей указывается метасимволом "::=", смысл которого эквивалентен словам "по определению есть".
Например, метаформулы
<переменная>::=A|B
<выражение>::=<переменная>+<переменная>|<переменная>-<переменная>
Означают, что в том (сугубо модельном) языке, на который эта метаформула распространяется, под термином <переменная> понимается любая из букв А или В, а под термином <выражение> - любая из следующих 10 записей: A; B; A+A; A+B; B+A; B+B; A-A; A-B; B-A; B-B; знак | следует читать "или".
Как сравнить между собой алгоритмы сортировки, поиска?
В сети этого не лежит, так что чуть-чуть отсебятины. Во-первых их можно сравнить по простоте написания, что очень часто является немаловажным фактором.) Во-вторых по скорости работы. Берём два алгоритма и два одинаковых массива и смотрим, за какое время / количество шагов они дадут нам желаемый результат (конечно, очень хотелось бы, чтобы результаты, полученные от этих алгоритмов совпали). Потом делаем массивы, для которых условия поиска / сортировки на этих алгоритмах были бы наихудшими. Снова же замеряем время / число шагов.
Теперь немного отменятины
В-третьих ещё вроде можно сравнивать по кол-ву требуемой памяти, ведь можно сложность алгоритма поиска / сортировки свести к линейной за счёт больших затрат памяти