Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие по информатике

.pdf
Скачиваний:
145
Добавлен:
21.03.2015
Размер:
2.03 Mб
Скачать

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

Рис. 23. Вершины ориентированно о рафа

На практике при составлении блок-схем удобно использовать следующие графические знаки:

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

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

91

Алгоритмические языки считаются машинно-независимыми. Запись на алгоритмическом языке используют, например, при публикации алгоритмов.

Чтобы выполнить вычислительный алгоритм на компьютере, его записывают на языке программирования. Для подготовки алгоритма, записанного на языке программирования, к выполнению, применяют автоматические средства. Специальная программа – транслятор переводит каждую команду алгоритма в последовательность инструкций процессора. Получается программа на машинном языке, которая уже может быть

выполнена.

 

Отдельная инструкция

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

о ератором. Про рамма

это упорядоченная последовательность

операторов. Способ отделения операторов друг от друга определяется правилами языка. Во многих ранних языках программирования существовало правило: новая строка – новый оператор.

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

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

операторах, обычно указывают их назначение (оператор

рисваивания,

условный о ератор, о ератор цикла, о ератор вызова

од ро раммы

и т. п.).

 

4. Организация потока управления действиями алгоритма

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

Линейный – несколько функциональных блоков выполняются последовательно, кроме того, каждый блок обязательно выполняется и не более одного раза. (Пример алгоритма привести самостоятельно).

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

Команда «ветвление» имеет две формы: полную (рис. 24) и сокращенную (рис. 25). Полная команда ветвления в записи псевдокодом и синтаксической диаграммой имеет вид:

92

если условие

то

серия 1

иначе

серия 2

конец-если

 

да

 

нет

 

 

 

Условие

 

 

 

 

 

 

 

серия 1

 

 

 

серия 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 24. Полная форма ветвления

Условие – это логическое выражение, способное принимать одно из двух возможных значений – истина или ложь.

Команда выполняется следующим образом: сначала проверяется, соблюдается ли условие. Если оно соблюдается, то выполняется серия 1, работа команды завершается, и осуществляется переход к команде, стоящей после ключевого слова «конец-если». Если же условие не соблюдается, то выполняется серия 2, и работа команды завершается – осуществляется переход к команде, стоящей после ключевого слова «конец-если». Команды серий реализуются подряд, каждая по своим правилам.

Сокращенная команда «ветвление» имеет вид:

если условие

то

серия

конец-если

да

Условие

 

нет

 

 

 

 

 

серия

Рис. 25. Сокращенная форма ветвления

Выполнение команды: проверяется, соблюдается ли условие. Если оно соблюдается, то выполняются команды серии, и на этом работа команды завершается, осуществляется переход к команде, стоящей после ключевого слова «конец-если». Если же условие не соблюдается, то серия игнорируется, и работа команды завершается – осуществляется переход к команде, стоящей после ключевого слова «конец-если». В языках программирования высокого уровня русские слова заменяются на английские: «если» – If; «то» – Then; «иначе» – Else.

Циклический – многократное повторение функционального блока, в зависимости от проверки логического условия.

Цикл с редусловием (рис. 26) можно описать составной командой пока выполнять, которую можно представить псевдокодом и графически так:

93

ока условие вы олнять

серия

конец-цикл

да

условие

нет

 

 

серия

Рис. 26. Цикл с редварительным о исанием условия

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

В языках программирования высокого уровня русские слова заменяются на английские: «пока» – While; «выполнять» – Do.

Цикл с остусловием (рис. 27) можно описать командой – выполнять пока. В записи псевдокодом и синтаксической диаграммой команда будет иметь вид:

вы олнять

 

 

 

 

 

 

 

 

 

 

серия

 

 

 

 

 

 

 

 

серия

 

 

 

 

 

 

 

 

да

 

 

нет

 

 

условие

ока условие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 27. Цикл с

оследующим о исанием

 

 

 

 

условия

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

Цикл с араметром (рис. 28) предназначен для циклов, которые должны быть проделаны определенное число раз, пока переменная i будет изменяться от j1 до j2 с шагом изменения j3.

Таким образом, серия выполняется, если соблюдается условие i j2, и не выполняется, если i > j2, или когда в процессе повторений значение i превзойдет j2. Если фраза шаг j3 пропущена, по умолчанию предполагается

j3 =1.

Для описания цикла с параметром предназначена команда для выполнять:

94

для i от j1 до j2 [шаг j3] вы олнять

i j1, j2, [j3]

серия

серия

конец-цикл

Рис. 28. Цикл с араметром

В языках программирования высокого уровня русские слова заменяются на английские: «для» – For; «до» – To; «выполнять» – Do.

5. Формализация понятия алгоритм

Абстрактные (т. е. существующие не реально, а лишь

ввоображении), машины Поста и Тьюрин а, предназначенные для доказательств различных утверждений о свойствах программ для них, были предложены независимо друг от друга (и практически одновременно)

в1936 г. американским математиком Эмилем Постом и английским математиком Алланом Тьюрингом. Эти машины представляют собой универсальных исполнителей являющихся полностью детерминированными, позволяющих «вводить» начальные данные, и после выполнения программ «читать» результат. Машина Поста менее популярна, хотя она значительно проще машины Тьюринга. С ее помощью можно вести обучение первым навыкам составления программ для ЭВМ.

Машина Поста

Абстрактная машина Поста представляет собой бесконечную ленту, разделенную на одинаковые клетки, каждая из которых может быть либо пустой, либо заполненной меткой «V», и головки, которая может перемещаться вдоль ленты на одну клетку вправо или влево, наносить

вклетку ленты метку, если этой метки там ранее не было, стирать метку,

если она была, или проверять наличие в клетке метки. Информация о заполненных метками клетках ленты характеризует состояние ленты, которое может меняться в процессе работы машины. В каждый момент времени головка («-») находится над одной из клеток ленты и, как говорят, обозревает ее. Информация о местоположения головки вместе с состоянием ленты характеризует состояние машины Поста, рис. 29.

Рис. 29. Состояние машины Поста

Команда машины Поста имеет следующую структуру: n K m,

где n – порядковый номер команды, K – действие, выполняемое головкой, m – номер следующей команды, подлежащей выполнению.

95

Существует всего шесть команд машины Поста, рис. 30.

Рис. 30. Команды машины Поста

Ситуации, в которых головка должна наносить метку там, где она уже имеется, или, наоборот, стирать метку там, где ее нет, являются аварийными (недопустимыми).

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

-на n-м месте команда с номером n;

-номер каждой команды совпадает с номером какой-либо команды списка.

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

-останов по команде «стоп». Такой останов называется результативным и указывает на корректность алгоритма (программы);

-останов при выполнении недопустимой команды. В этом случае останов называется безрезультативным;

-машина не останавливается никогда. В этом и в предыдущем случае мы имеем дело с некорректным алгоритмом (программой).

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

96

Рассмотрим реализацию некоторых типичных элементов программ машины Поста (рис. 31).

Рис.31. Пример фра мента ро раммы машины Поста

1.Пусть задано исходное состояние головки и требуется на пустой ленте написать две метки: одну в секцию под головкой, вторую справа от нее. Это можно сделать по следующей программе (справа от команды показан результат ее выполнения, рис. 3).

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

Программа будет иметь следующий вид, представленный на рисунке 32.

Рис. 32. Про рамма машины Поста

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

3. Остановимся на представлении чисел на ленте машины Поста и выполнении операций над ними.

Число k представляется на ленте машины Поста идущими подряд k + 1 метками (одна метка означает число «0»). Между двумя числами делается интервал как минимум из одной пустой секции на ленте. Например, запись чисел 3 и 5 на ленте машины Поста будет выглядеть так

(рис. 33):

97

Рис. 33. За ись чисел 3 и 5 на ленте машины Поста

Обратим внимание, что используемая в машине Поста система записи чисел является непозиционной.

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

Рис. 34. Увеличение числа на единицу

Для решения задачи можно переместить головку влево (или вправо) до первой пустой клетки, а затем нанести метку.

Программа, добавляющая к числу метку справа, имеет вид (рис. 35):

Рис. 35. Текст ро раммы, добавляющей метку с рава

Программа, добавляющая к числу метку слева, имеет вид (рис. 36):

Рис. 36. Текст ро раммы, добавляющей метку слева

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

Предположим, что головка расположена на расстоянии нескольких клеток слева от числа, к которому нужно прибавить единицу. В этом случае программа усложняется. Появится «блок поиска числа» – две команды, приводящие головку в состояние, рассмотренное в предыдущем примере (рис. 37):

98

Рис. 37. Блок оиска числа

Рассмотрим полные тексты программ (рис. 38), добавляющие единицу слева и справа соответственно:

Рис. 38. Тексты ро рамм

В первом случае не нужно перемещать головку к крайней левой метке числа.

Машину Поста можно рассматривать как упрощенную модель ЭВМ.

Всамом деле, как ЭВМ, так и машина Поста имеют:

-неделимые носители информации (клетки – биты), которые могут быть заполненными или незаполненными;

-ограниченный набор элементарных действий – команд, каждая

из которых выполняется за один такт (шаг).

Обе машины работают на основе программы. Однако в машине Поста информация располагается линейно и читается подряд, а в ЭВМ можно читать информацию по адресу; набор команд ЭВМ значительно шире и выразительнее, чем команды машины Поста, и т. д.

Машина Тьюринга

Машина Тьюринга подобна машине Поста, но функционирует несколько иначе. Машина Тьюринга состоит из счетной ленты (разделенной на ячейки и ограниченной слева, но не справа), читающей и пишущей головки, лентопротяжного механизма и операционного исполнительного устройства, которое может находиться в одном из дискретных состояний q0, q1, ..., qs, принадлежащих некоторой конечной совокупности (алфавиту внутренних состояний). При этом q0 называется начальным состоянием.

Читающая и пишущая головка может читать буквы рабочего алфавита А = {a0, а1, ..., аt}, стирать их и печатать. Каждая ячейка ленты в каждый момент времени занята буквой из множества А. Чаще всего

99

встречается буква a0 – «пробел». Головка находится в каждый момент времени над некоторой ячейкой ленты – текущей рабочей ячейкой. Лентопротяжный механизм может перемещать ленту так, что головка оказывается над соседней ячейкой ленты. При этом возможна ситуация выхода за левый край ленты (ЛК), которая является аварийной (недопустимой), или машинного останова (МО), когда машина выполняет предписание об остановке.

Порядок работы МТ (с рабочим алфавитом a0, а1 ..., аt и состояниями q0, q1, ..., qs) описывается таблицей машины Тьюринга. Эта таблица является матрицей с четырьмя столбцами и (s + 1)(t + 1) строками. Каждая строка

имеет вид qi aj vij qij, 0 ≤ i < s, 0 ≤ j ≤ t, где qij принадлежит { q0, q1, ..., qs }

Здесь через vij обозначен элемент объединения алфавита {a0, а1 ..., аt} и множества предписаний для лентопротяжного механизма:

l – переместить ленту влево, r – переместить ленту вправо, s – остановить машину;

vij – действие машины Тьюринга, состоящее либо в занесении в ячейку ленты символа алфавита a0, а1 ..., аt либо в движении головки, либо в останове машины;

qij – следующее состояние.

МТ работает согласно следующим правилам: если машина Тьюринга находится в состоянии qi, головка прочитывает символ aj в рабочей ячейке. Пусть строка qi aj vij qij, начинающаяся с символов qi aj , встречается только один раз в таблице. Если vij – буква рабочего алфавита, то головка стирает содержимое рабочей ячейки и заносит туда эту букву. Если vij – команда r или l для лентопротяжного механизма, то лента сдвигается на одну ячейку вправо или влево (если не происходит выход за край ленты) соответственно. Если vij = s, то происходит машинный останов.

Машина Тьюринга начинает работу из некоторой начальной конфигурации, включающей в себя начальное состояние (обычно q0) и положение считывающе-записывающей головки над определенной ячейкой ленты, содержащей один из символов рабочего алфавита А.

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

100