Для чего нужен язык описаний

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

    Эти соображения привели нас к мысли о необходимости языка - посредника на котором можно было бы кратко и достаточно точно выразить алгоритм и в тоже время запись на таком языке была бы отлична от программы записанной на языке высокого уровня. Такой язык должен быть слабо формализованным и должен содержать минимум средств большой выразительной силы. Для построения языка были использованы две идеи:

  1. Для приближения к естественному языку необходимо отказаться от жесткого набора операций и структур данных. И то и другое должно определяться выражаемым смыслом.

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

 Описание изложенное ниже не стоит рассматривать, как некий уже устоявшийся стандарт. 


Специальные  имена

 

    Любое данное может быть названо любым именем, но ряд имен зарезервировано под специальные смыслы. Список таких имен может быть расширен программистом под свои цели.

 

Индекс - номер текущего элемента массива

 

Результат - данное возвращаемое из процедуры

 

Координаты - пара координат на плоскости или если речь идет о n -мерном пространстве, то n - координат 

 

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

 

Следующий - элемент упорядоченного множества следующий за очередным в том порядке который определен для данного множества.

 

Первый, Последний - элементы упорядоченного множества: первый и последний в соответствии с установленным порядком.

 


 

 

 

 


Структуры данных

 

    Структуры данных никак не объявляются. Если есть необходимость, то в предварительном описании указывается смысл используемых данных.

 


 

 

 


Операции

 

    Операции это все, что можно выразить достаточно понятно короткой фразой или общепринятым символом. 

 

Например: Сортировка пузырьком Исходного массива

 

   Ясно, что нет необходимости описывать общеизвестный алгоритм сортировки и если термин "Исходный массив" ясен из текста, то данная операция имеет право на существование. 


 

 

 


Конструкции цикла

 

Цикл перечисления

 

Для всех  Элементов заданного множества выполнить

 

   Данная форма применима, если выполняются следующие условия:

   Пример:

 

   Сумма = 0

   Для всех Элементов массива выполнить

        Сумма + Элемент массива

 

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

 

Цикл со счетчиком

 

Для Переменной от Начального значения до Конечного с заданным Шагом выполнить

 

По умолчанию Шаг = 1

Пример с суммой в данной форме можно переписать следующим образом

 

Сумма = 0

Для Индекса от 1 до Кол-ва элементов в массиве выполнить

   Сумма + Очередной элемент массива

   Перейти к следующему элементу

 

или

 

Сумма = 0

Для Индекса от 1 до Кол-ва элементов в массиве выполнить

   Сумма + элемент массива с данным Индексом

 

Команда перехода к следующему опущена, так как переменная с и именем Индекс зарезервирована для индексации используемого массива, а так как иного о массиве не сказано, то можно предположить, что Индекс используется по своему прямому назначению.

 

Цикл повторов

 

Выполнить Указанное количество раз

    Последовательность операций

 

Сумма =0

Выполнить N раз 

    Ввести Число

    Сумма = Сумма + Число

 

Цикл с предусловием

 

Пока Условие выполнить

    Последовательность команд

 

Пример:

 

Счетчик = 0

Пока в множестве есть не выбранные элементы выполнить  

    Выбрать Очередной элемент

    Если Очередной = Числу то Счетчик +1

 

Цикл с постусловием

 

Повторять

    Последовательность команд

До Условия

 

Пример:

 

Сумма = Первому элементу

Очередной элемент = Первому

Повторять

    Очередной = Следующему

    Сумма = Сумма + Очередной

До достижения Последнего


 

 

 


Конструкции выбора

 

Выбор из двух возможностей

Если верно Условие1 То выполнить Последовательность действий 1 Иначе Выполнить последовательность действий 2

 

Пример 1:

 

  Если Индекс четный То Сумма1 + Элемент массива Иначе Сумма2 + Элемент массива 

 

Пример 2:

 

  Если Элемент массива > Максимального

        То 

                Максимальный = Элементу массива

                Номер = Индексу

 

Выбор из нескольких вариантов

 

Варианты:

    Имя варианта: Последовательность действий 1

    Имя варианта: Последовательность действий 2

    ........

    ........

Иначе Последовательность действий

 

Пример

 

Варианты

    Число четное    : Сумма1 = Сумма1 + Число

    Число нечетное: Сумма2 = Сумма 2 + Число 

    

 


 

 

 


Присвоения

 

    Для присваиваний возможны два варианта записи:

 

Полный:    Имя Данного = Выражение допустимого типа

 

Пример: Элемент массива = Данное  Число * 5

 

Краткий:   Имя Данного : Знак операции : Выражение допустимого типа

 

Пример: Индекс +1

 

Краткая форма применяется если Имя  Данного длинно и есть необходимость в экономии записи

 


 

 

 


Описание процедуры  и её вызов

 

Описание процедуры

 

Имя процедуры

   Аргументы

        Список аргументов

 

Перечень команд процедуры

 

Вызов процедуры

 

Вариант 1

 

Имя процедуры (список переменных - аргументов)

 

Если имена переменных длинны то

 

Вариант 2

 

Имя процедуры

   Список передаваемых аргументов с кратким описанием.

 


 

 

 

 

Hosted by uCoz