Страницы сайта
Текущий курс
Участники
Общее
Тема 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
Методический комментарий для учителя к уроку «Исполнители и алгоритмы»
Урок 9. «Исполнители и алгоритмы»
На этом уроке ученики повторяют Школьный (учебный) Алгоритмический Язык (АЯ) – учебный язык программирования. Этот язык был придуман во второй половине 80-х годов XX века группой ученых и педагогов во главе с академиком Андреем Петровичем Ершовым. Школьный Алгоритмический Язык похож на Алгол и Паскаль и, говоря формально, вместе с этими языками относится к группе процедурных языков последовательного программирования. Работая с АЯ, ученики знакомятся с основными понятиями и конструкциями подобных языков – ветвлениями, циклами (повторениями), вспомогательными алгоритмами (подпрограммами). В курсе 5-го класса были введены основные понятия и простые линейные алгоритмы, в курсе 6 класса будут представлены более сложные конструкции языка.
Важную роль в процессе обучения играет практическая работа в системе программирования Кумир. Эта система разработана в отделе учебной информатики НИИ системных исследований РАН (зав. отделом – А. Г. Кушниренко).
Система Кумир и Школьный Алгоритмический Язык имеют ряд особенностей, важных для преподавания информатики:
1. АЯ основан на русской лексике: все служебные слова языка записаны кириллицей, имена величин и алгоритмов также могут записываться на русском языке. Это особенно важно для преподавания в 5 – 6 классах.
2. АЯ и система Кумир позволяют подключать к системе Учебные Миры (отсюда и название: КУМир – Комплект Учебных Миров), в которых действуют различные виртуальные исполнители – как уже знакомые вам Водолей, Кузнечик и Робот, так и многие другие.
3. В системе Кумир удобно организована выдача сообщений об ошибках: в отличие от профессиональных систем, сообщение размещается на экране непосредственно рядом с местом ошибки («на полях» программы).
4. При пошаговом выполнении программы ученик может видеть на полях программы результаты проверок условий и результаты команд присваивания. Это позволяет проводить отладку программы, отслеживая результат каждого шага, не отвлекаясь на добавление отладочных команд вывода.
5. В системе Кумир можно разрабатывать практикумы – системы заданий, каждое из которых снабжено проверяющей программой. Выполняя задания практикума, каждый ученик может индивидуально работать в своем темпе, проверяя успешность своей работы без помощи учителя, то есть учитель избавлен от той части работы по проверке заданий ученика, которая может быть выполнена автоматически.
Подробнее о системе Кумир можно узнать в поставляемых вместе с системой справочных материалах.
Ошибки в алгоритмах
Что значит – «программа содержит ошибку»? В простейшем случае ошибка – это синтаксическая ошибка, то есть нарушение формальных правил языка программирования. Однако и синтаксически правильная программа может содержать ошибки: ее результат может быть совсем не такой, который нужен составителю программы. Таким образом, прежде чем анализировать программу, мы должны понимать:
– что дано, т. е. что мы знаем о входных данных программы (например, что на вход программы подается четное положительное число, не превосходящее 100);
– что надо, т. е. как результат программы связан с входными данными (например, если на вход программы было подано число x, то результат вычисляется по формуле x/2 +1).
Условие «дано» в научной литературе называется предусловием алгоритма, а условие «надо» – постусловием. Для школьников эти термины излишни, но в книге для учителя ими удобно пользоваться.
Фактически, предусловие и постусловие и составляют условие задачи на построение алгоритма (так же происходит и в задачах на построение в курсе геометрии). Очень важно, чтобы ученики, приступая к решению задачи, ясно понимали, что известно об исходных данных («дано» – предусловие) и каким требованиям должен удовлетворять результат («надо» – постусловие).
В АЯ есть специальные ключевые слова дано и надо, они могут располагаться в заголовке алгоритма между строками, которые начинаются словами алг и нач. После слов дано и надо можно записывать, соответственно, предусловие и постусловие. Эти условия можно записать как логические выражения АЯ. Тогда подсистема выполнения алгоритмов системы Кумир проверит, соответствуют ли входные данные предусловию и соответствуют ли результаты постусловию. При несоответствии системой будет выдано сообщение об ошибке выполнения. Для шестиклассников, которые еще не знакомы с логическими выражениями, это слишком сложно. Однако полезно записывать пред- и постусловия в конструкциях дано и надо как комментарии. В этом случае система не сможет контролировать корректность входных данных и результатов, но для того чтобы ученики научились понимать задачи на построение алгоритмов, это очень полезно.
К сожалению, сразу написать программу без ошибок получается очень редко. В современном программировании разработаны и разрабатываются специальные приёмы, позволяющие уменьшить количество ошибок при написании программ и облегчить обнаружение ошибок. Ученики должны понять, что мало написать программу, про которую они думают, что программа работает правильно. Нужно убедиться, что программа работает правильно. Эта мысль кажется простой, но вам с вашими учениками, возможно, придется возвращаться к ней снова и снова.
В реальном программировании, когда создаются комплексы программ, содержащие сотни тысяч команд, разработаны специальные методики тестирования, то есть проверки правильности работы программы на специально подобранных и реальных примерах – тестах. Такая проверка не гарантирует правильности работы программы во всех случаях: точно так же разбор примеров не является заменой доказательства теоремы. Однако если примеры для тестирования подобраны хорошо и опытная эксплуатация проводилась достаточно долго (месяцы, иногда – годы) и тщательно, то программы на практике работают достаточно надежно.
Так как программа (алгоритм) – это текст, написанный на формальном языке, то можно ставить вопрос и о доказательстве правильности программ. К сожалению, сейчас на практике это возможно только для относительно небольших программ, и основным методом, позволяющим убедиться в правильности работы программы и найти ошибки, все-таки является тестирование.
В курсе основной школы ученик должен освоить идею тестирования, научиться составлять наборы тестов для учебных программ. Он должен понимать, что отладка (поиск ошибок) является такой же неотъемлемой частью программирования, как и придумывание алгоритма и его запись на алгоритмическом языке. Другая важная мысль (мы уже говорили об этом) – нельзя говорить о правильности программы, если четко не сформулировано, что она должна делать. Поэтому мы советуем уделять внимание описанию исходных данных программы (поля после слова дано) и требований к результатам программы (поля после слова надо).
Разберемся подробнее, чему именно мы хотим научить школьника в связи с ошибками в алгоритмах и способами обнаружения ошибок.
1. Синтаксические ошибки.
Языки программирования (в том числе и АЯ) – формальные языки. Их синтаксис (правила записи алгоритмов) строго определен. В отличие от естественных языков нельзя заменить слово синонимом, изменить порядок слов и т. п.
К счастью, современные системы программирования (точнее, их специальные компоненты – синтаксические анализаторы) распознают синтаксические ошибки и сообщают о них программисту. Система Кумир, которой мы рекомендуем пользоваться при обучении, проверяет наличие ошибок в программе после каждого изменения строки программы. При этом не только подчеркивается место ошибки, но и сообщается, в чем она состоит. В сложных случаях система может «не понять», в чем именно состоит ошибка, но в нашем курсе такие ситуации маловероятны.
Таким образом, в результате обучения ученик должен:
– понимать, что язык программирования – это формальный язык со строгими формальными правилами записи алгоритмов;
– знать правила записи алгоритмов на АЯ (в объеме, нужном в данном курсе);
– уметь исправлять ошибки, пользуясь указаниями системы программирования;
– понимать, что отсутствие синтаксических ошибок не гарантирует того, что программа – правильная, то есть делает именно то, что мы от нее ожидаем.
2. Содержательные ошибки.
Повторим: синтаксически правильная программа необязательно делает то, что мы хотим, то есть ее поведение необязательно следует описаниям дано – надо. В программах, которые будут встречаться в нашем курсе, при конкретных входных данных будет легко убедиться, соответствует ли результат тому, что нам нужно. Например, в задачах про Водолея видно, получено ли в одном из сосудов нужное количество воды. Более того, часто в условии задачи явно указан набор входных данных (например, размеры сосудов Водолея и начальное количество воды в каждом из сосудов), при котором нас интересует работа программы.
В реальной жизни (например, если нам нужно решить довольно сложное уравнение) понять, является ли результат работы правильным, бывает трудно. Это одна из причин, почему необходимо тщательное тестирование программ.
Таким образом, в результате обучения ученик должен:
– понимать необходимость точного описания требований к создаваемому алгоритму (дано – надо), понимать такие описания, в несложных случаях – формулировать их;
– понимать, что написанную программу нужно запустить и убедиться, что она работает правильно на нужных примерах, то есть ее поведение на этих примерах соответствует требованиям к программе;
– уметь (если это требуется в условиях задачи) самостоятельно придумать набор примеров исходных данных, на которых следует проверить правильность работы программы;
– понимать, что в случае обнаружения ошибки в программе нужно попытаться исправить ее и снова перейти к проверке правильности работы программы.
Отладка программы, по сути, представляет собой экспериментальную работу по ее изучению. С таким видом работы дети практически не встречаются в школе (хотя на ранних этапах жизни каждый ребенок много экспериментирует). Поэтому, особенно вначале, сама идея проверки правильности работы программы и анализа результатов этой проверки может вызвать трудности у некоторых детей.