Структурные алгоритмы

advertisement
Тема урока: Алгоритм. Понятие структурного алгоритма.
Цель урока: Сформировать у учащихся понятие алгоритм, структурный
алгоритм.
Задачи урока:
1. Определение алгоритма через его свойства.
2. Формальное определение алгоритма как свойство машины
Поста или Тьюринга.
3. Понятие структурного алгоритма, возможность записи любого
алгоритма, как структурного.
Оборудование урока: компьютер, проектор.
План урока
1. Организационный момент .
- Здравствуйте, садитесь. Кто сегодня отсутствует?
2. Изучение нового материала.
Начнём с определения. Любое понятие можно определить двумя
способами. Во-первых, можно дать определение пользуясь обычными
общепринятыми терминами и понятиями и во-вторых, можно дать строгое
определение. Первый способ даст определение более понятное, но менее
точное, второй наоборот, более точное, но менее понятное.
Первое определение. Алгоритм – это линейная последовательность
однозначно выполняемых действий.
Что здесь понятно. После внимательного прочтения данного
определения становится ясно, что алгоритм состоит из описания действий,
ясно также, что эти действия выполняются одно за другим, другими словами
пока не выполнено очередное нельзя переходить к выполнению следующего.
Ясно также, что каждое из действий можно выполнить только одним
способом и его выполнение всегда приводит к одному результату.
Что здесь неточно. Когда мы говорим о действиях, то сразу нужно
говорить о том, кто их будет выполнять. Ясно, что однозначность
выполнения действий прямо зависит от свойств исполнителя. Просто пример.
Пусть стоит задача посчитать количество яблок в куче. Возьмём
исполнителя, память которого позволяет запомнить только одно однозначное
число. Тогда количество подсчитанных им яблок не будет превышать 9. Если
мы возьмём исполнителя способного запоминать одно двузначное число, то
его результат может оказаться другим, но в обоих случаях он будет
однозначно определенным.
Второе определение. Для того, чтобы дать более точное
определение нам придется воспользоваться не совсем обычным приемом.
Заключается он в том, что мы точно определим понятие исполнителя, а
затем объявим, что алгоритм это то, что может делать этот исполнитель.
Вариант первый – Машина Поста. Машина Поста это модель некоего
универсального компьютера. Взяв такого исполнителя мы, конечно, сильно
ограничиваем свое определение алгоритма. Например, алгоритм совершения
покупок в магазине для такого исполнителя не запишешь, как и многие
другие, которые можно описать на естественном языке, но в качестве
вознаграждения за потерю общности мы получим очень высокую степень
точности в описании.
Машина Поста – одна из первых попыток создания строго
определения алгоритма. Необходимо сразу понять и запомнить, это не
реальная машина, существует она только теоретически. Устроена машина
очень просто. Она имеет память, представленную бесконечно длинной
лентой разграфленной на ячейки, в которые можно записать либо ноль, либо
единицу. Каретку, которая свободно движется вдоль ленты в обоих
направлениях и может записывать в ячейку либо ноль, либо единицу. В виде
картинки её можно представить так:
Итак, алгоритм это любая последовательность операций, которую
может выполнить машина Поста.
Вариант
второй.
Машина
Тьюринга.
Конечно,
можно
сразу
предположить, что машина Поста не единственный способ создать
универсального исполнителя, через которого можно дать определение
понятия исполнителя. Второй такой интересный и более сложный вариант –
это машина Тьюринга.
Каретка Машины Поста ставит в ячейке ноль или единицу в
зависимости от заложенной в ней программы и от того, что она видит в
ячейке перед собой. От настроения самой каретки ничего не зависит, потому
как у неё нет настроения. У каретки машины Тьюринга есть настроение и от
него многое зависит и этим она отличается от машины Поста. А именно,
машина Тьюринга может находиться в одном из множества заранее
заданных состояний и решение о том, что делать каретка принимает в
зависимости от текста программы, состояния ячейки на которую указывает
каретка и состояния каретки (более правильно конечно будет говорить не о
состоянии каретки, а о состоянии машины). Результатом выполнения шага
работы будет изменение состояния ячейки и состояния каретки.
Структурные алгоритмы
Итак, теперь мы знаем, что такое строгое определение алгоритма, но
нам оно нужно только для точного понимания, в реальной программисткой
деятельности пользоваться этими определениями мы не будем. А сейчас
поговорим о реальной алгоритмической – программисткой работе и
рассмотрим понятие структурного алгоритма.
Сложность и размер алгоритма очень сильно зависят от задачи.
Существуют задачи, алгоритмы решения которых, очень велики. В общем-то,
таких задач большинство. Из базового курса мы уже знаем, что алгоритмы
состоят из выполняемых команд, которые объединяются в сложные команды
с помощью ветвлений и циклов. Эти циклы и ветвления могут быть сколь
угодно сложно устроены. Каких либо ограничений на вложения циклов и
ветвлений друг в друга нет. Чем больше и чем сложнее образуемые
алгоритмические конструкции, тем труднее они для понимания.
Существует один тип алгоритмов, которые наиболее легки для
понимания – это линейный алгоритм. В нём команды выполняются одна за
другой и однажды выполненная команда уже никогда не в процессе
исполнения алгоритма не понадобиться. Было бы очень хорошо, если бы все
задачи можно было решать линейными алгоритмами. К сожалению это
невозможно, но все, же возможности, для упрощения работы, есть. Легкость
линейного алгоритма опирается на то, что любая часть алгоритма имеет
установленный стандартный вид:
Здесь черные прямоугольники – это команды, а стрелки показывают
передачу порядка выполнения между командами. Возникает очень разумная
идея: может быть можно разрешить какое-то усложнение линейного
алгоритма так, чтобы можно было записать любой мыслимый алгоритм и в
то время, чтобы получившаяся структура была не слишком сложной. То есть,
надо добавить циклическую конструкцию, но не любую, а самую простую и
добавить ветвление, но не любое, а самое простое. Тогда получится, что
любой алгоритм можно будет записать с помощью структур трёх видов:
линейной, циклической и ветвления. Формы цикла и ветвления выглядят так:
ветвление
цикл
Форма записи алгоритмов в виде таких рисунков называется блоксхемами. Блок – схема – это форма графического представления алгоритма,
показывающая
структуру
алгоритма.
Состоит
блок
схема
из
трех
графических элементов:
 Стрелка – указывает на команду, которая должна выполняться
следующей за данной.
 Ромб – Обозначает условие, могущее принимать только два
значение истина или ложь. Из ромба всегда выходит две стрелки,
одна указывает на команду, выполняемую, если условие истинно,
другая указывает на команду, выполняемую, если условие ложно
 Прямоугольник – имеет две функции. Во-первых, обозначает
элементарную команду и, во-вторых, обозначает линейную
последовательность
любых
структурных
команд:
циклов,
ветвлений, элементарных команд.
Приведенные выше структурные блок-схемы означают следующее:
 Проверка любого условия может дать только два возможных
результата: истину или ложь. В зависимости от результата
управление выполнением передаётся либо на одну линейную
группу структурных команд, либо на другую и эти две группы
команд между собой никак не пересекаются.
 Тело цикла состоит из линейной группы структурных команд. И на
каждом шаге цикла эта группа команд не меняется и порядок
команд в ней остаётся постоянным.
Важное замечание о блок-схемах.
Иногда, чтобы сделать языка блок-схем более выразительным в него
добавляют дополнительные элементы, но любой алгоритм можно записать с
помощью только этих трех.
Блок-схемы очень наглядны, но у них есть один существенный
недостаток
–
запись
серьёзного
алгоритма
будет
выглядеть
очень
громоздкой, поэтому мы воспользуемся ими только для определения того,
что такое структурный алгоритм.
Условие задачи: Дано число. Выяснить, является ли оно простым.
Общая идея решения задачи такова: вводим число и затем проверяем
все числа, которые могут быть его делителями, делители они на самом деле
или нет. Если будет найден хотя бы один делитель, то число составное иначе
оно простое.
Структурный алгоритм:
1. Ввести ЧИСЛО
2. Флаг =0
3. Для всех чисел от 2 до ЧИСЛО-1 делать
1. Если число делит ЧИСЛО нацело То Флаг=1
4. Если Флаг=1. То ЧИСЛО составное. Иначе ЧИСЛО простое
5. Конец работы
Неструктурный алгоритм:
1. Ввести ЧИСЛО
2. Для всех чисел от 2 до ЧИСЛО-1 делать
 Если число делит ЧИСЛО нацело, ТО переход на п.5
3. ЧИСЛО простое
4. Переход на п.6
5. ЧИСЛО составное
6. Конец работы
Эти два алгоритма выдают совершенно одинаковый результат, но их
свойства
различны.
Видно,
что
логика
передачи
выполнения
в
неструктурном алгоритме заметно сложнее, но в то же время неструктурный
алгоритм для больших чисел может заметное сэкономить ресурсы
процессора (время выполнения будет меньше), так как он заканчивает свою
работу сразу, как только найден первый делитель (а только первый и нужен),
а структурный алгоритм будет работать дальше.
Это
означает,
что
неструктурные
алгоритмы
иногда
более
эффективны, но не всегда. Даже в нашем примере возможен структурный
алгоритм свободный от указанного недостатка. Его можно записать,
например, так:
1. Ввести ЧИСЛО
2. Флаг =0
3. число = 2
4. Пока Флаг = 0 и число меньше чем ЧИСЛО - 1 делать
 Если число делит ЧИСЛО нацело то - Флаг = 1
5. Если Флаг = 1 То ЧИСЛО составное Иначе ЧИСЛО простое
6. Конец работы
Заметьте, что в неструктурном алгоритме есть несколько команд
перехода. Это кстати одна из примет, того, что алгоритм неструктурный.
Структурный
Алгоритм
ввести ЧИСЛО
Флаг=0
число = 2
да
число<ЧИСЛО-1
нет
да
нет
число делит ЧИСЛО
Флаг = 1
число = число +1
да
нет
Флаг = 0
ЧИСЛО простое
Число составное
Конец работы
Неструктурный
Алгоритм
ввести ЧИСЛО
число = 2
да
число<ЧИСЛО-1
да
нет
нет
число делит ЧИСЛО
число = число +1
ЧИСЛО простое
Число составное
Конец работы
В двух нарисованных блок-схемах, примерно одинаковое количество
команд, но вы можете заметить, что расчетную часть (ту, где есть циклы и
переходы) можно разделить на две части соединенные только одной
стрелкой.
Во второй блок-схеме стрелки запутаны больше и логика её
сложнее.
3. Домашнее задание.
Повторить изученный материал. Выучить основные понятия.
4.Подведение итогов:
Выставление оценок ученикам, которые хорошо работали на уроке.
Download