Введение
Вычисление количества комбинаторных комбинаций в школьном курсе информатики относится к теме «Кодирование информации с использованием систем счисления» [1]. Обучающиеся начинают изучать ее в средней школе, когда в курсе математики они знакомятся с темой «Комбинаторика», осмысливают ее основные формулы и получают навыки вычислений количества повторений, размещений и сочетаний [2]. При этом основное внимание уделяется решению заданий, которые требуют подсчета числа вариантов слов или чисел в простейших случаях. В таких задачах достаточно определить число комбинаций знаков на каждой позиции и знать, что итоговый результат получается их перемножением. Решение более сложных задач относится в средней школе к углубленному изучению и выносится на дополнительные занятия по предмету – элективные курсы и кружки. В старшей школе к этой теме возвращаются на профильном уровне. При этом задания становятся более разнообразными. Они требуют разбора значительно большего количества комбинаций, знаний вычисления вариантов способом от противного, выявления общих и частных закономерностей при анализе возможных ситуаций. Следует также отметить, что возрастает и вычислительная сложность предлагаемых обучающимся заданий [3]. Если при решениях заданий на базовом уровне сложности можно было проводить вычисления «на бумаге», так как ответы редко превосходили четыре тысячи, то на повышенном уровне становилось целесообразно использовать приложение «Калькулятор», так как ответы составляли пятизначные и шестизначные числа. В связи с этим при изучении материала по вычислению комбинаторных комбинаций выражений целесообразно применять современные среды программирования, такие как PyCharm, которые позволяют с помощью инструментов языка Python алгоритмически разрешить поставленную задачу [4]. При этом на получение устойчивых навыков решения таких заданий необходимо отводить больше учебного времени, так как результаты ЕГЭ по информатике свидетельствуют, что обучающиеся в недостаточной мере владеют как навыками формулировки и учета всех условий при решении «вручную», так и навыками их интерпретации в систему команд языка программирования.
Цель исследования – оценка эффективности объяснения обучающимся методов анализа и вычисления количества комбинаций записей с использованием средств языка программирования Python.
Материалы и методы исследования
Решение заданий вычисления количества комбинаций записи чисел «вручную» требует уже в относительно простых примерах разбора множества разных случаев [5, 6]. Так, например, если необходимо определить количество пятизначных семеричных чисел, в записи которых используется не менее трех цифр 6, то перебор вариантов требует достаточно большой аккуратности сначала в их выписывании, а затем в их подсчете. Если же числа задать шестизначные, а цифру 6 заменить на любую нечетную цифру, то число вариантов возрастает, а их учет становится еще более затруднительным занятием. В то же время при использовании языка программирования Python анализ и вычислительная сложность решения этих двух заданий практически не отличаются. Однако применение языка Python также требует базовых знаний и умений в программировании алгоритмических конструкций, таких как ветвление и цикл [7, 8].
Методологический подход к решению таких заданий в среде программирования PyCharm предполагает изучение функционального инструмента product, который позволяет организовать перебор чисел в указанной системе счисления заданной длины. Для этого используется цикл с параметром for для индексной переменной i.
for i in product(‘0123456’, repeat = 5):
s = ‘’.join(i)
Внутри цикла формируется строка s указанной длины с помощью значения повторений параметра repeat. Строка s задается с использованием метода join, который «склеивает» ее из символов указанного набора. При этом набор возможных цифр задается там же в конструкции цикла for с помощью перечисления цифр в виде строкового значения ‘0123456’.
Рассмотрим подробный пример решения одной из таких задач и разберем его. Пусть необходимо определить количество шестизначных семеричных чисел, запись которых содержит ровно две цифры «5» и на последнем месте не стоит цифра «2».
Программный код решения задачи может выглядеть следующим образом:
from itertools import*
k=0
for i in product(‘0123456’, repeat = 6):
s = ‘’.join(i)
if s[0] != ‘0’ and s[-1] != ‘2’ and s.count(‘5’) == 2:
k+=1
print(k)
Ответом на данное задание является число 15336.
Для использования в решении задачи функционального инструмента product в программе на языке программирования Python необходимо подключить модуль itertools, который содержит методы работы с итерируемыми объектами. Такие объекты позволяют перебирать свои элементы в различном порядке. Употребление после ключевого слова import знака «*» означает, что в программе можно будет использовать любые функции подключаемой библиотеки itertools. Например, такими функциями могут служить product и permutations. Отличие этих инструментов при формировании итерируемого объекта состоит в том, что функция product позволяет повторять элемент итерации, а функция permutations генерирует перечисления без повторений указанной длины. Значение параметра, определяющий длину, элемента выборки задают после ключевого слова repeat. В данном примере это значение равно 6. Отметим, что этот параметр не является обязательным. Если его опустить, то длина элемента выборки будет равна длине итерируемого объекта. В рассматриваемом примере количеству цифр в строке ‘0123456’ – 7. В случае необходимости использования в программе только конкретных функций подключаемого модуля после ключевого слова import их указывают через запятую. Например, from itertools import product, permutations. Также отметим, что подключение библиотеки языка программирования Python можно выполнять в любой строке программного кода до момента вызова функции, однако это целесообразно делать в первой строке кода программы.
Затем, для подсчета количества семеричных чисел, запись которых удовлетворяет заданным условиям, определяется начальное значение переменной k, равное 0. После этого в цикле for с использованием функции product с параметрами ‘0123456’, repeat = 6 перечисляются цифры семеричной системы счисления и указывается количество элемента формируемой выборки. Для дальнейшей обработки полученной последовательности в данной задаче выгодно применить не функцию list, а сформировать строку с помощью команды s = ‘’.join(i). После того как строка сформирована, ее можно проверять на соответствие заданным в условии критериям. Для этого все условия необходимо перечислить в операторе if, объединив их логическими функциями and и or в соответствии с вопросом задания. Если условие в операторе if выполняется, то счетчик k подходящих числовых значений следует увеличить на 1. Это можно сделать с помощью команды k+=1. В завершение программы остается вывести результат вычислений на экран. Для этого необходимо воспользоваться командой print, в которой требуется указать имя выводимой переменной для отображения ее значения.
Задание можно усложнить следующим образом. Пусть также необходимо учесть, что рядом не могут стоять две одинаковые цифры.
Решение задания можно представить так:
from itertools import*
kk=0
for i in product(‘0123456’, repeat = 6):
s = ‘’.join(i)
if s[0] != ‘0’ and s[-1] != ‘2’ and s.count(‘5’) == 2:
k=0
for j in range(1,5):
if s[j] == s[j-1]:
k+=1
if k == 0:
kk+=1
print(kk)
Ответ на задание – 8575.
Модификация решения состоит в том, что кроме указанных в операторе if прежних условий также необходимо учесть, что две одинаковые цифры не могут стоять рядом. Для этого внутри тела оператора if следует организовать цикл, в котором сравниваются две соседние цифры. Цикл будет включать пять итераций, на каждой из которых будет проверяться условие равенства значений текущей и предыдущей цифр числа. Если они равны друг другу, то счетчик k, который задан до внутреннего цикла for и определен начальным нулевым значением, будет увеличиваться на единицу. Иными словами, если в числе есть две рядом стоящие цифры, значения которых совпадают, то он будет отличен от нуля. Если он останется равным 0, то это будет означать, что дополнительное условие задачи выполнено. В этом случае счетчик kk, назначенный для подсчета количества чисел, которые удовлетворяют условиям задачи, и инициализированный нулевым значением, будет увеличен на 1. Его значение необходимо вывести в команде print, оно будет являться ответом на вопрос задачи.
Такие задания разного уровня сложности решали обучаемые в ходе экспериментальной деятельности. Они образовали методологическую основу исследования. Обработка результатов экспериментальной работы состояла в применении математических методов анализа данных.
Гипотеза исследования заключалась в том, что использование алгоритмических конструкций и инструментов подключаемых библиотек языка программирования Python в школе при обучении анализу и вычислению количества комбинаций записей повышает эффективность образовательного процесса.
Экспериментальная деятельность по обучению подходам к решению задач анализа и вычисления количества комбинаций записей числовых выражений проводилась в Смоленском физико-математическом лицее ЯВИР при МИФИ и МЭИ и средней школе № 6 г. Смоленска. В этих образовательных организациях информатика изучается на профильном уровне. В обучении участвовали 32 ученика.
Результаты исследования и их обсуждение
Результаты педагогического исследования, полученные в ходе диагностических работ, обобщены в табл. 1 и 2.
На констатирующем этапе педагогического эксперимента обучающиеся изучали теоретический материал о способах комбинаторного подсчета возможных ситуаций записи числовых выражений, удовлетворяющих заданным условиям. Они также практиковались решать предложенные по теме «Кодирование информации с использованием систем счисления» задачи «вручную» без использования вспомогательных компьютерных средств, кроме приложения «Калькулятор» для оптимизации вычислений. Учащиеся применяли при анализе условий заданий знания о записи чисел в различных системах счисления [9, 10], о чередовании четных и нечетных цифр, а также вспоминали основные признаки делимости на числа от 2 до 20. В завершение этого этапа эксперимента обучающимся была предложена диагностическая работа. Она включала семь тестовых заданий разного уровня сложности. Эти задания было необходимо, как и во время практических занятий, решать «на бумаге».
На формирующем этапе педагогического эксперимента обучающиеся тренировали навыки решения таких же задач на компьютере с использованием возможностей языка Python среды программирования PyCharm. В первой части данного этапа они с помощью библиотеки itertools и ее инструмента product решали задачи базового уровня сложности, предполагавшие в основном цикле формирование чисел в заданной системе счисления и их отбора с использованием оператора ветвления if. При этом условия в ветвлении носили составной характер. Обучающимся было необходимо грамотно определить порядок их выполнения с использованием логических функций and и or. Во второй части этого этапа обучающиеся должны были освоить навыки применения вложенного цикла в основную конструкцию цикла product. Это обуславливало необходимость попарного сравнения рядом стоящих цифр анализируемого числа. Такие задания относились к повышенному и высоком уровням сложности.
Таблица 1
Результаты констатирующего этапа педагогического эксперимента
Группа |
Число обучающихся, достигших уровня усвоения знаний и сформированности умений |
Всего |
||
Высокий |
Повышенный |
Базовый |
||
СФМЛ ЯВИР при МИФИ и МЭИ |
4 |
6 |
8 |
18 |
Средняя школа № 6 г. Смоленска |
2 |
6 |
6 |
14 |
Всего |
6 |
12 |
14 |
32 |
Таблица 2
Результаты формирующего этапа педагогического эксперимента
Группа |
Число обучающихся, достигших уровня усвоения знаний и сформированности умений |
Всего |
||
Высокий |
Повышенный |
Базовый |
||
СФМЛ ЯВИР при МИФИ и МЭИ |
8 |
8 |
2 |
18 |
Средняя школа № 6 г. Смоленска |
6 |
6 |
2 |
14 |
Всего |
14 |
14 |
4 |
32 |
В завершение этапа обучающимся также была предложена итоговая работа, которая представляла собой диагностический тест. Тест состоял из семи заданий разного уровня сложности в соответствии с задачами, которые предлагались обучающимся на занятиях.
Для статистического анализа и обработки полученных данных диагностических срезов были использованы возможности интеллектуальной оболочки «Advanced Tester» [11, 12]. В этой программе можно не только получить количественный анализ экспериментальных данных, но и на его основе смоделировать индивидуальные и групповые траектории обучения. При этом отметим, что экспериментальная деятельность также предполагала и самостоятельные занятия обучающихся над учебным материалом, в том числе и в удаленном формате во внеучебное время с использованием программы [13, 14]. Для этого не требовалось вмешательство учителя, задания формировались с помощью автоматизированного подбора в соответствии с образовательными картами обучающихся.
Качественный анализ условий и результатов эксперимента
Результаты проведенного исследования отражают рост уровня знаний и сформированности умений у обучающихся во всех выделяемых категориях. При этом отчетлива видна тенденция к смещению уровня подготовки в область высоких результатов. Практически все участники педагогического эксперимента демонстрируют устойчивые навыки решения заданий повышенного и высокого уровня сложности по теме «Кодирование информации с использованием систем счисления» с применением инструментов языка Python среды программирования PyCharm.
Использование систем программирования существенно расширяет круг рассматриваемых задач. Это позволяет детально познакомить обучающихся с новыми для них идеями решения заданий анализа и вычисления количества комбинаций записей с помощью композиций алгоритмических конструкций и применения функций встроенных библиотек языка Python. Обучающиеся оттачивают мастерство написания программного кода в разнообразных сложных ситуациях, тем самым расширяя фундаментальную базу своих умений, как в области анализа записи чисел, так и в сфере приложения знаний по алгоритмизации и программированию. Кроме того, специфика программной оболочки «Advanced Tester» обеспечивает индивидуальное и групповое обучение учащихся в зоне ближайшего развития [15]. Автоматизированный подбор индивидуальных заданий для обучающихся с учетом сформированности их знаний и умений и многомерный анализ усвоенных и неусвоенных компонентов учебного материала закладывает максимальный прирост уровня учебных достижений. Это позволяет утверждать, что гипотеза исследования о повышении эффективности обучения анализу и вычислению количества комбинаций записей с использованием алгоритмических конструкций и инструментов подключаемых библиотек языка программирования Python находит свое доказательство.
Заключение
Таким образом, результаты экспериментальной работы демонстрируют необходимость изучения использования инструментов языка Python среды программирования PyCharm при решении задач анализа и вычисления количества комбинаций записей чисел в разных системах счисления. Обучающиеся находят отражение изученного ранее учебного материала об основных алгоритмических конструкциях в решении задач практического вычисления комбинаторных комбинаций. При этом возможности встроенных библиотек позволяют расширить их профессиональный кругозор и найти эффективное применение знаниям об итерируемых объектах. Обучающиеся начинают «видеть» приложение теоретических подходов эффективного анализа выражений на практике. Это способствует формированию у них крепких навыков будущей профессиональной деятельности в области IT-технологий.
Библиографическая ссылка
Козлов С.В., Быков А.А. ОБУЧЕНИЕ АНАЛИЗУ И ВЫЧИСЛЕНИЮ КОЛИЧЕСТВА КОМБИНАЦИЙ ЗАПИСЕЙ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON В ШКОЛЕ // Современные наукоемкие технологии. – 2024. – № 10. – С. 152-157;URL: https://top-technologies.ru/ru/article/view?id=40187 (дата обращения: 21.11.2024).