При введении в программирование обычно используют стандартные алгоритмы суммирования и произведения чисел, поиска максимума или минимума, нахождение простых чисел от 1 до 100 и т.д. Большей частью эти алгоритмы уже приведены в учебниках по информатике без особых комментариев. Но для большего понимания как правильно программировать, нужно знать, как работает даже самая простая программа на компьютере, почему при некоторых входных данных выдается совсем другой результат, почему программа зависла и многое другое. На все эти вопросы сложно ответить за один урок. Но можно выработать некие правила подачи материала, когда такие вопросы отпадут сами собой. Предлагаются следующие подходы:
- После набора программы провести ее пошаговое выполнение. Это эффективно при объяснении операторов цикла и условных операторов, а также дает возможность находить в дальнейшем ошибки при выполнении программы. Такие способы всегда используются на олимпиадах по программированию, чтобы быстро найти ошибку в алгоритме.
- Давать примеры «неправильных» программ для разбора в тетради: такие как бесконечные циклы, тройные условные операторы, итеративные формулы и т.д. Такой разбор помогает правильно оценить в дальнейшем свои программы. Можно привести такие программы и на компьютере, а за определенное время найти и исправить ошибки компиляции, затем ошибки выполнения, или оценить диапазон значений, при которых алгоритм работает правильно и т.д.
- Использовать «черный ящик» - показать, что может некий алгоритм выводить при разных значениях и дать возможность ученикам догадаться и построить алгоритм/программу самостоятельно.
- Некоторые простые алгоритмы придется менять полностью, если диапазон входных данных будет другим. Например, для вычисления произведения первых n натуральных чисел при n>=50 требуется написать алгоритм произведения больших чисел с использованием строк или массива. Конечно, перед этим нужно показать, почему предыдущий алгоритм не работает.
- Нужно уделить больше времени на представление числа в компьютере. Показать, почему при вычислении суммы/произведении положительных натуральных чисел может возникнуть отрицательное число или ноль, или почему при вычислении расстояния может выводиться сообщение об ошибке «подкоренное выражение нельзя вычислить», или почему нельзя заполнить строку посимвольно (read (c); s[i]:=c;), а нужно считать ее целиком, и многое другое. Для этого нужно обязательно напомнить, что переменная должна быть обязательно инициализирована. Это нежелание задать даже нулевое значение может привести в дальнейшем к ошибкам вычисления при работе с процедурами и функциями, так как там они не обнуляются.
- Некоторые возможности или слабые стороны языков программирования можно обойти, предложив самим их реализовать. Например, написать функцию возведения в степень, вычислить число пи по формулам, написать функцию перевода заглавных русских букв в строчные и т.д.
- Хорошей тренировкой является составление тестов готовой программы. Придумать разные виды тестов - непростая задача даже для учителя, так как этому нигде не учат. Но давать такие задания нужно, не боясь, что ученики не справятся. Конечно, вначале их попытки будут робкими, но потом они смогут придумать достаточно тестов для проверки не только чужих, но и своих программ. Иногда можно давать такие задания в паре: написав программы, оба меняются и проверяют на наборе придуманных тестов. У кого все тесты пройдут (или большая их часть), тот и получит удовлетворительную оценку.
- Кроме тестов можно задавать «придумать» задачу на пройденную тему и решить ее. При этом можно использовать разные игровые сюжеты, а для примера показать один из вариантов. Например, известная сказка про колобка - можно предложить изменить цель игры: написать алгоритм нахождения расстояния от дома до каждого героя сказки, если известно его местоположение в декартовых координатах. Такие задачи очень часто предлагают на олимпиадах по программированию и ученикам очень сложно иногда в такой сюжетной задаче определить простой алгоритм, который они ранее изучали.
- Некоторые задания можно предлагать в игровой форме: например, написать программу для вывода таблицы в игре судоку по введенным числам, или программу для вывода слов, состоящих только из букв заданного слова, или программу для поиска решения уравнения, заданного учителем математики и т.д. Игровой момент можно усилить дополнительными (соревновательными) условиями на оценку «отлично».
- Иногда нужно просто заучить наизусть какой-то алгоритм. Для этого можно использовать следующее: если ученик написал программу и готов ее сдать, то подойдя к нему незаметно (или преднамеренно для проверки «твоя ли это программа») стереть несколько строк или даже всю программу так, чтобы уже нельзя было это восстановить. И для того, чтобы программа опять заработала, ученику придется вспомнить алгоритм заново. Но делать это нужно не так часто и не всем, чтобы не возникало отрицательных эмоций.
- Некоторые задачи решаются легко без использования каких-либо приемов программирования, а просто применяя формулы по математике или геометрии. Например, зная формулу вычисления площади треугольника по трем координатам ее вершин (вместо формулы по сторонам треугольника), можно быстро решить задачу о выпуклом многоугольнике (эту формулу легко вывести по теореме Пифагора). А зная как выводить итеративные формулы (когда каждый следующий шаг можно выразить через предыдущий), можно написать не полный перебор, а алгоритм динамического программирования.
Конечно, такие способы индивидуальны и работают не на всех, но они помогают выявить учеников, готовых к участию в олимпиадах по программированию.
Комментариев нет:
Отправить комментарий