Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_kollokviumu.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
498.91 Кб
Скачать

1. Блок действия

Как известно, алгоритм состоит из последовательности действий.Блок действияиспользуется для представления отдельного действия алгоритма:

Два действия представляют собой два блока, следующих один за другим:

2. Блоки с разветвлением

Блок с разветвлением используется, когда в алгоритме возможны два варианта действий, а выбор того или иного варианта действия зависит от некоторого условия:

Такая алгоритмическая конструкция (ветвление) представляется двумя смежными блоками действий; действие слева выполняется, если условие верно, действие справа — если условие неверно. Например:

Возможно также неполное ветвление, при котором некоторое действие выполняется не всегда, а только при определенном условии:

3. Блок множественного выбора

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

Например, в задаче выбора разных видов обуви для разных видов спорта:

4. Блок цикла с предусловием

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

Действия, которые повторяются (так называемое “тело цикла”), представлены самостоятельным блоком внутри блока цикла с предусловием. Например, для задачи: “Накачать спущенную велосипедную шину”:

Так как условие проверяется перед выполнением тела цикла, возможно, действия не будут выполнены ни разу (если условие ложно в самом начале, вы немедленно выходите из цикла).

Цикл с заданным количеством повторений тела цикла (в языках программирования его называют “цикл с параметром” или “цикл со счетчиком”) — это тоже цикл с предусловием. Действия повторяются определенное количество раз и отсчитываются перед каждым выполнением. Например, разбить в миску шесть яиц:

Подсчет действий происходит в начале. Так, если бы вы считали вслух, вы бы сказали “один” перед тем, как разбить первое яйцо.

5. Блок цикла с постусловием

Блок цикла с постусловием используется, когда в алгоритме действия должны повторяться до наступления определенного условия (условие проверяется после выполнения действий):

Например, в задаче приготовления теста для блинов:

Действия в цикле с постусловием всегда выполняются хотя бы один раз, потому что проверка осуществляется в конце цикла. Так, при приготовлении теста для блинов немного молока будет добавлено и размешано до того, как будет проверена консистенция теста.

6. Блок подпрограммы

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

Диаграмма, иллюстрирующая действия в подпрограмме, оформляется отдельно.

Подпрограмма “Очистить травосборник

Перечисленные блоки могут произвольным образом вкладываться один в другой. Проиллюстрируем сказанное на примере задачи: “Найти наименьшее число в следующей последовательности чисел: 51 25 35 79 13 26 65”.

Рассматривая приведенную последовательность чисел, вы можете увидеть, что 13 — наименьшее число в ней, но как вы это определили? Можете ли вы вывести общее правило для определения наименьшего числа в любой последовательности чисел?

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

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

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

1. Нулевой шаг детализации

2. Первый шаг детализации

Как вы нашли наименьшее число? Вы просмотрели всю последовательность, рассматривая каждое число и проверяя, не наименьшее ли оно. Это повторяющееся действие — значит, должен быть цикл. Какой? Так как количество повторений известно, то может быть применен цикл с параметром, в N – S-диаграммах являющийся циклом с предусловием:

3. Второй шаг детализации

Так что же делать, чтобы понять, какое наименьшее? Детализируем внутренний блок на последней диаграмме. Вот что мы делаем, сравнивая каждое число снаименьшим, найденным до сих пор: если следующее число меньше, оно становится наименьшим, в противном случае старое остается наименьшим.

4. Третий шаг детализации

Но как вы получили первое наименьшее число? Простейший способ сделать это — принять за наименьшее число первое число в последовательности чисел:

Проверим работу этого алгоритма на примере последовательности чисел:

51 25 35 79 13 26.

1. Установить в качестве наименьшего числа первое число последовательности (51).

2. Конец последовательности? — Нет.

3. Следующее число — 25.

4. 25 < 51? — Да.

5. Устанавливаем в качестве наименьшего числа число 25.

6. Конец последовательности? — Нет.

7. Следующее число — 35.

8. 35 < 25? — Нет.

9. Конец последовательности? — Нет.

10. Следующее число — 79.

11. 79 < 25? — Нет.

12. Конец последовательности? — Нет.

13. Следующее число — 13.

14. 13 < 25? — Да.

15. Устанавливаем в качестве наименьшего число 13.

16. Конец последовательности? — Нет.

17. Следующее число — 26.

18. 26 < 13? — Нет.

19. Конец последовательности? Да.

Таким образом, наименьшее число в последовательности равно 13.

Рисунок -Фрагмент алгоритма сортировки методом "поплавка"

11. CASE-технологии. Основные понятия

Изложенный подход, названный SWITCH-технологией, предназначен для алгоритмизации и программирования задач логического управления и является одним из направлений широко развиваемой в настоящее время CASE-технологии (ComputerAidedSoftwareEngineering) (интересное совпадение с меткой case в операторе switch).

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

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

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

Подход позволяет снять с Программиста необходимость знания особенностей технологического процесса, а с Разработчика — особенностей программирования. При этом появляется возможность общения между Заказчиком, Разработчиком, Программистом и Пользователем не традиционным путем в терминах технологического, а на промежуточном полностью формализованном языке (своего рода техническом эсперанто). Например, "в третьем графе переходов в пятой вершине на четвертой позиции изменить значение 0 на значение 1", что не вызывает разночтений, характерных даже для одного естественного языка, как, например, это имеет место в такой фразе как "косой пошел с косой", и не требует привлечения специалистов, знающих технологический процесс, для корректного внесения изменений.

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

Предложенный подход позволяет обеспечить программирование с единых позиций в базисе различных языков, входящих в состав программного обеспечения современных программируемых логических контроллеров, таких как, например, программируемые логические контроллеры, для которых программирование может выполняться, во-первых, с помощью языков, рекомендуемых международным стандартом IEC 1131 — последовательных функциональных диаграмм (SequentialFunctionChart — SFC), функциональных блоков (FunctionBlokDiagram — FBD), лестничных схем — (LadderDiagram — LD), инструкций (InstructionList — IL), а, во-вторых, с помощью таких языков как язык Ассемблера и Си.

12. Основные понятия и определения формальных языков

Язык Lесть множество конечных цепочек (= предложений), построенных путем объединения элементов из алфавита (= словаря, конечного множества атомарных символов) по правилам грамматики G, заданной для данного языка.

Множество цепочек, составляющих язык L, может быть конечным или бесконечным.

Цепочки языка L могут иметь длину. Длина цепочки  (обозначается ||) есть число входящих в нее символов.

Среди цепочек языка L может быть пустая цепочка # (|#| = 0).

Множество V есть алфавит языка L.

Множество V* есть множество всевозможных цепочек в алфавите V и пустая цепочка #.

Множество V+ есть множество всевозможных цепочек в алфавите V без пустой цепочки #.

V* = V+ {#}.

Язык L в алфавите V есть подмножество цепочек конечной длины в алфавите V, то есть подмножество множества V*.

Порождающая грамматика G есть четвёрка {Vt, Vn, R, S}

где

Vt – алфавит терминальных символов,

Vn– алфавит нетерминальных символов,

Vt Vn =  (алфавиты Vt и Vn не пересекаются) и

VtVn = V,

R – множество правил; элемент (, ) множества R есть правило вывода и записывается в виде  . Общий вид правил таков:  , где , , ,  – цепочки на алфавите V, которые могут быть пустыми (#) за исключением .

S – начальный символ (= цель) грамматики (S  Vn).

При записи правил вывода с одинаковыми левыми частями (1 2 ... n) используется сокращенная запись

 1 | 2 |...| n.

Цепочка V*непосредственно выводимаиз цепочки V+ в грамматике G (обозначение:  ), если  = 12,  = 12,

где 1, 2,  V*,  V+ и правило вывода   содержится в R.

Цепочка  V*выводимаиз цепочки  V+ в грамматике G (обозначение: ), если существуют цепочки 0, 1, ... , n (n  0), такие, что  = 0 1 ...  n= .

Последовательность 0, 1, ... , n называется выводом длины n.

Пример: формальная грамматика G

Vt = {S}, Vn = {a, b, c}, R = {SaSb | ab}

Saaabbb, длина вывода 3:

S aSb aaSbbaaabbb.

Язык L, порождаемый грамматикой G, есть множество L(G) = { Vt* | S }.

L(G) включает все цепочки в алфавите Vt, которые выводимы из S по правилам R.

L(G) = {anbn, n 0}

13. Алгоритм перебора с возвратом 14. Задача о лабиринте 15. Задача о коммивояжере

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]