Роли переменных в программе и почему будет полезно рассказать о них ученикам
Такой подход напоминает ремесленный труд, состоящий из набора отточенных до автоматизма действий. Трудно изобрести новый способ обхода элементов массива или поиска максимального значение в наборе данных. Для решения типовых задач используются такие же типовые фрагменты кода из которых, как из конструктора, создаётся код решения.
Изучение программирования состоит из следующих этапов:
- изучение синтаксиса языка программирования - запись основных алгоритмических конструкций, объявление переменных, типизация и т.д.;
- чтение и анализ существующих программ - развитие умения анализировать чужой код, тестировать и отлаживать готовые программы;
- решение задач - учащиеся пишут код самостоятельно;
- изучение технологий программирования - методов проектирования, паттернов программирования, подходов по разработке качественного кода.
Изучение ролей переменных относится к последнему пункту. Переменные в исходном коде программы поддаются классификации по назначению. Типичная ситуация для человека только начинающего изучать программирование - проблема “чистого листа”. С чего начать решение задачи? На какие подзадачи разбить крупную задачу? Классификация переменных даёт начинающему программисту некий каркас, основу для рассуждений. Из назначения переменных следуют и алгоритмы их обработки. Если для решения понадобится переменная-аккумулятор, значит появится цикл и некое выражение для накапливания подходящих значений и так далее.
Список ролей
В этом разделе перечислю роли переменных, представленные в публикации по теме1. Рядом с русифицированным названием напишу оригинальное которое предложили авторы исследования. Примеры кода и описания взяты на сайте авторов публикации2.
Фиксированное значение (Fixed value)
Значение переменной присваивается сразу после запуска программы или единожды после ввода значения с клавиатуры. В примере на вычисление площади круга, переменные pii
и r
считаются фиксированными.
Счётчик (Stepper)
Переменная последовательно принимает значения, принадлежащие известному набору (натуральные числа, положительные чётные числа и т.д.).
Переменная multiplier
будет счётчиком, так как последовательно принимает значения от 1 до 10.
Последнее обрабатываемое значение (Most-recent holder)
Такая переменная хранит последнее введённое с клавиатуры значение или последнее обрабатываемое значение из определённой группы значений или последовательности, например массива или строки.
В следующем примере переменная s
хранит последнее введённое с клавиатуры значение.
s = 0
while s <= 0 :
s = float(input("Введите длину стороны квадрата: "))
print ("The area of the square is", s*s)
Во втором примере удвоим каждый элемент списка. Переменная num
на каждом шаге цикла хранит последнее обрабатываемое значение из списка.
Наиболее подходящее значение (Most-wanted holder)
Такая переменная хранит последнее найденное значение, подходящее под определённое условие.
В следующем примере находим наименьшее значение из 10 введённых с клавиатуры. Переменная smallest
хранит наиболее подходящее значение.
Аккумулятор (Gatherer)
Переменная-аккумулятор накапливает в себе подходящие значения. Под накапливанием понимается сумма, произведение чисел или любое другое действие в котором используется текущее значение аккумулятора и другое значение.
В примере найдём сумму чётных чисел в списке. Переменная sum_ch
будет накапливать чётные значения из списка.
Последователь (Follower)
Переменная-последователь сохраняет последнее значение какой-либо другой переменной. В следующей задаче вычисляем числа последовательности Фибоначчи. Для этого понадобится хранить два предыдущих значения последовательности. Переменные f1
и f2
будут последователями, так как сохраняют предыдущие значения других переменных.
Флажок (One-way flag)
Флажок - это логическая переменная, которая может поменять своё значение на противоположное только один раз. В следующей программе определим, было ли хотя бы одно отрицательное число среди введённых с клавиатуры. Переменная-флажок в данном примере - is_negative
.
Временное значение (Temporary)
Переменная считается временной, если её значение необходимо в течении короткого промежутка времени. Найдем значение следующей суммы: \[ sum=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n} \]
n = int(input("Количество слагаемых: "))
sum = 0
for i in range(1, n + 1):
a = 1 / i
sum += a
print("Значение суммы: ", sum)
Переменная a
- временная, так как нужна только для хранения очередного слагаемого.
Органайзер (Organizer)
Органайзер - это структура данных предназначенная для реорганизации её элементов после инициализации. Примером такой переменной может служит массив или список, элементы которого будут переставлены так, как этого требует условие задачи.
Контейнер (Container)
Контейнер - это структура данных, значения в которою можно как добавлять так и удалять. Пример такой структуры данных - стек.
На практических занятиях по программированию я рассказывал студентам о том, что переменные можно классифицировать по назначению. В основном речь шла о переменных-счётчиках и аккумуляторах. Но более подробная классификация встретилась мне случайно. Думаю, что теперь буду использовать её для планирования занятий.
Конечно учащиеся не обязаны строго следовать предложенной классификации переменных. Но само понимание того, что назначение переменных поддаётся классификации помогает приступить к решению задачи.
Думаю что в следующих заметках стоит уделить внимание алгоритмическим шаблонам, тем более, что ресурсы на эту тему есть.