Обучение программированию для исполнителя нужно строить на последовательности решаемых задач. Очередность задач должна определяться следующими принципами:
— от простого к сложному: постепенное усложнение задач;
— новизна: каждая задача вносит какой-то новый элемент знаний (новая команда, новый прием программирования);
— наследование: следующая задача требует использования знаний, полученных при решении предыдущих задач.
В учебнике [6] рассматривается последовательность задач, которая позволяет ученикам осваивать приемы алгоритмизации в таком порядке:
— составление линейных алгоритмов;
— описание и использование вспомогательных алгоритмов;
— составление циклических алгоритмов;
— использование ветвлений в алгоритмах;
— использование метода последовательной детализации при составлении сложных алгоритмов.
Алгоритмы решения задач, которые рассматриваются ниже, приведены в [6]. Здесь же будут обсуждаться только дидактические и методические проблемы, связанные с решением каждой задачи.
Задача 1: составить алгоритм рисования буквы «Т» в центре поля рисунка. Длина горизонтального и вертикального отрезков — 4 шага. Кенгуренок находится в крайней левой точке горизонтального отрезка и смотрит на восток (направо).
При разборе этой задачи необходимо обратить внимание учеников на два обстоятельства. Первое: управление Кенгуренком для достижения поставленной цели будет происходить без обратной связи. Считаем, что рисование производится вдали от края и выход на границу поля произойти не может. В этом случае алгоритм управления будет иметь линейную структуру.
Второе: алгоритм зависит не только от сформулированной цели (искомого результата), но и от исходного состояния исполнителя. Если бы исходное состояние было другим (например, Ру находится в нижней точке вертикального отрезка и направлен на север), то был бы другим и алгоритм, несмотря на то, что в результате получается один и тот же рисунок. Для алгоритмов работы «в обстановке» начальное состояние исполнителя является исходным данным задачи. Состояние Кенгуренка определяется местом его расположения на поле и ориентацией. Результатом же выполнения алгоритма становится не только рисунок (главная цель), но и конечное состояние исполнителя.
Задача 2 естественным образом выводит на идею вспомогательного алгоритма. Задание следующее: составить алгоритм рисования числа «1919». Учитель может поступить следующим образом: предложить ученикам написать алгоритм прежними средствами, т. е. используя только три основные команды: шаг, поворот, прыжок. Такое задание, очевидно, не вызовет энтузиазма учеников, поскольку принцип им уже понятен, а писать длинный линейный алгоритм довольно скучно. В этой ситуации вполне возможно самостоятельное «открытие» учениками идеи вспомогательного алгоритма. Обратив внимание на то, что в рисунке дважды присутствуют цифры «1» и «9», ученики могут прийти к идее отдельного описания алгоритмов рисования этих цифр, а затем использования их для получения четырехзначного числа «1919». После обсуждения этой идеи учитель вводит понятие вспомогательного алгоритма и объясняет, как производится его описание и использование. На языке Кенгуренка вспомогательный алгоритм называется процедурой.
Умение использовать вспомогательные алгоритмы необходимо вырабатывать у учеников как можно раньше, уже на примерах линейных алгоритмов. Важнейший прием алгоритмизации и программирования — декомпозиция задачи, т. е. выделение в исходной задаче некоторых более простых подзадач. Алгоритмы решения таких подзадач называются вспомогательными алгоритмами, а реализующие их программы — подпрограммами (процедурами). Таким образом, решение исходной задачи разбивается на несколько алгоритмов: основной алгоритм и вспомогательные алгоритмы. Как правило, в основном алгоритме происходит многократное обращение к вспомогательному алгоритму.
Существуют две методики программирования с использованием подпрограмм: метод последовательной детализации, или «сверху вниз», и сборочный метод, или «снизу вверх». При построении сложных алгоритмов наиболее эффективным является метод последовательной детализации. В этом случае программирование начинается с составления основного алгоритма. В нем записываются обращения к вспомогательным алгоритмам, которые пока еще не составлены. Но уже на этом этапе необходимо решить вопрос о спецификациях подпрограмм, т. е. об их входах и выходах. Для графического исполнителя спецификации заключаются в ответах на вопросы: какой рисунок создает подпрограмма, каким должно быть исходное состояние исполнителя, каким будет конечное состояние исполнителя.
Задача 3: составить алгоритм рисования горизонтальной линии, проведенной от края до края поля. Эта задача вносит в данную тему следующие новые элементы: управление с обратной связью; структурная команда цикла. Обратная связь между объектом управления (Кенгуренком) и управляющей системой заключается в том, что перед выполнением каждого шага проверяется условие «впереди не край?». Если оно истинно, т. е. ответ положительный, то делается шаг, в противном случае выполнение цикла прекращается.
Механизм обратной связи наглядно иллюстрируется в отладочном режиме исполнения программы. В этом режиме анимационными средствами на экране изображается мальчик Кристоффер, который отдает команды управления Кенгуренку. В начале каждого цикла Кристоффер спрашивает Ру: «Впереди не край?» и получает в ответ: «Да» или «Нет». Дальнейшие действия зависят от ответа.
Команда цикла является структурной командой в отличие от простых команд «шаг», «поворот», «прыжок». Структурная команда включает в себя несколько действий: проверка условия, выполнение тела цикла, которое, в свою очередь, может состоять из нескольких команд.
В теории алгоритмов существует два типа циклов: цикл с предусловием и цикл с постусловием. Цикл с предусловием (другое его название — «цикл-пока») является основным видом циклической структуры и достаточен для построения любого циклического алгоритма. В языке исполнителя Кенгуренок имеется только команда «цикл-пока».
Задача 4: построить прямоугольную рамку по краю поля. Решение этой задачи требует объединения умений, полученных учениками при решении предыдущих задач. Циклическая программа рисования линии оформляется в виде процедуры ЛИНИЯ. А в основной программе происходит четырехкратное обращение к этой процедуре.
Задача 5: расчертить экран горизонтальными линиями. Эта задача является прямым продолжением предыдущей задачи. Усложнение заключается в том, что используются две процедуры: ЛИНИЯ и ВОЗВРАТ. Кроме того, основной алгоритм сам становится циклическим. Здесь снова нужно отметить то важное обстоятельство, что при использовании процедур в основной программе необходимо учитывать начальное и конечное состояние исполнителя при их выполнении.
Задача 6: нарисовать орнамент, состоящий из квадратов, расположенных по краю поля. Здесь вводится еще одна структурная команда — ветвление. На примере этой задачи еще раз демонстрируется методика последовательной детализации. Причем, в отличие от предыдущих программ, здесь используется два шага детализации, поскольку в процедуре РЯД содержится обращение к процедуре следующего уровня — КВАДРАТ.
Разобравшись в рассмотренных задачах, выполнив самостоятельные задания аналогичного типа, ученики должны усвоить два основных принципа структурной методики алгоритмизации (структурного программирования):
— всякий алгоритм может быть построен с использование трех типов управляющих структур: следование, ветвление, цикл;
— при построении сложных алгоритмов следует применять метод последовательной детализации.
О способах описания алгоритмов. Традиционно в школьной информатике используются два способа описания алгоритмов: блок-схемы и учебный алгоритмический язык. В базовом курсе информатики необходимо использовать обе эти формы. Основное достоинство блок-схем — наглядность алгоритмической структуры. Однако это качество проявляется лишь в том случае, если изображение блок-схемы происходит стандартным способом. Эта тема затрагивается в подразделе 10.1 «Что такое структурное программирование» во второй части учебника [6]. Основным следствием освоения учениками структурной методики должно стать умение при построении алгоритмов «мыслить структурами». Например, исходя из условия задачи, делать следующие выводы: «Алгоритм решения данной задачи будет представлять собой два вложенных цикла: или — цикл с вложенным ветвлением, или — два последовательных цикла» и т. п. Структурно изображенные блок-схемы (рис. 1.4) помогают такому видению алгоритма.

Рис. 11.4. Блок-схемы:
Вот, например, две блок-схемы: а — пример структурного изображения алгоритма; б — пример неструктурного изображения алгоритма
На первый взгляд трудно понять, что на двух этих блок-схемах изображен один и тот же алгоритм. Из схемы а четко видна его структура: цикл-пока с вложенным ветвлением. В схеме б довольно сложно усмотреть эту же структуру. Блок-схема а нарисована стандартно, блок-схема б — произвольно.
Алгоритмический язык — это текстовая форма описания алгоритма. Она ближе к языкам программирования, чем блок-схемы. Однако это еще не язык программирования. Поэтому строгого синтаксиса в алгоритмическом языке нет. Для структурирования текста алгоритма на АЯ используются строчные отступы. При этом соблюдается следующий принцип: все конструкции одного уровня вложенности записываются на одном вертикальном уровне; вложенные конструкции смещаются относительно внешней вправо. Соблюдение этих правил улучшает наглядность структуры алгоритма, однако не дает такой степени наглядности, как блок-схемы.
11.4. Методические проблемы изучения
алгоритмов работы с величинами
Изучаемые вопросы:
✦ ЭВМ — исполнитель алгоритмов.
✦ Понятие «величина», характеристики величин.
✦ Действия, выполняемые над величинами.
Есть две стороны в обучении алгоритмизации:
— обучение структурной методике. построения алгоритмов;
— обучение методам работы с величинами.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |


