Методика изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    289,87 Кб
  • Опубликовано:
    2017-12-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Методика изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera















Методика изучения языка программирования python в углубленном курсе информатики с применением дистанционных курсов coursera

Оглавление

Введение

Глава 1. Научно-методические основы изучения программирования в средней школе

.1 Исторические аспекты развития линии «Алгоритмизация и программирование»

.2 Авторские подходы к изучению линии «Алгоритмизация и программирование» в старшей школе

.3 Python - язык программирования для изучения в школе

Выводы к первой главе

Глава 2. Изучение языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera

.1 Возможности дистанционных курсов Coursera для изучения языка программирования Python

.2 Раскрытие методической системы обучения программированию с использованием Coursera

.3 Практическая реализация предлагаемой методики изучения программированию в углубленном курсе информатики старшей школы

.4 Результаты апробации в старшей школе

Заключение

Список литературы

Введение

С уверенностью можно сказать, что каждое следующее поколение более продвинуто, чем предыдущее. Одним из факторов, способствующих такому положению вещей, является информатизация общества.

Адаптация к изменениям в современном обществе сопровождается изменениями в системе образования. Одним из положительных изменений для школьников является включение языка Python, с 2011 года в школьные олимпиады, а с 2015 - в ЕГЭ по информатике.

Новая образовательная среда школ позволяет использовать, популярные в настоящее время, дистанционные курсы courserа, которые в совокупности с другими средствами образуют целостную методическую систему обучения, основная цель которой - «обучение через всю жизнь». Однако встает вопрос:

«Каким образом применить дистанционные курсы в традиционной школе?». Ответом возможно станет новаторская модель обучения «перевернутый класс».

«Перевернутый класс», или «перевернутое обучение», - это такая педагогическая модель, в которой процесс передачи теоретического материала и получения его учащимися происходит дома, а отработка практических навыков и восполнение пробелов - в классе вместе с учителем. Как правило, дистанционные курсы содержат огромное количество видеоматериалов, которые можно просматривать учащимся вне школы. Гарантией качества содержания дистанционных курсов Coursera являются университеты-лидеры в сфере образования, которые выступают в роли создателей курсов. Используя дистанционные курсы в «перевернутом классе» преподаватель не выбирает на уроке роль «говорящей головы», а выступает консультантом, помощником, тренером для учеников. Ценность такого рода обучения в том, что она позволяет за меньшее количество времени достичь больших результатов.

Актуальность темы исследования обусловлена множеством факторов, важнейшими из которых являются:

·        требования ФГОС СОО к предметным результатам освоения углубленного курса информатики, где владение универсальным языком программирования высокого уровня (по выбору) выступает как один из компонентов;

·        формирование готовности обучающегося к осознанному выбору профессии в сфере IT-технологий;

·        формирование готовности обучающихся к саморазвитию и непрерывному образованию, которое согласно ФГОС СОО является одной из важнейших целей современного образования;

·        требования ФГОС ОО к формированию новой образовательной среды, одним из компонентов которой является дистанционное обучение;

Проблема исследования состоит в необходимости разрешения противоречия: с одной стороны связанной с чрезвычайной актуальностью использования языка Python , а с другой стороны, с недостатком методических разработок к изучению программирования на языке Python в углубленном курсе информатики старшей школы.

Поэтому целью исследования является разработка методики изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов courserа.

Объектом исследования является процесс обучения информатике в общеобразовательной школе.

Предметом исследования является изучение программирования в углубленном курсе информатики старшей школы.

В соответствии с целью были поставлены следующие задачи:

1.       Изучить научную, методическую, историческую, специализированную литературу по программированию и методике его изучения в общеобразовательной школе:

·         Провести анализ документов и учебников по информатике на тему: "Развитие линии "Алгоритмизация и программирование" на протяжении 30 лет"

·        Провести анализ существующих авторских подходов к изучению программирования в старшей школе

·        Провести сравнительный анализ языков программирования, используемых в школе и выделить преимущества языка программирования Python при его использовании в школе

·        Провести анализ образовательной MOOK-платформы Coursera, как методической системы обучения в общеобразовательной школе

2.       Разработать методику изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera.

3.       Апробировать разработанную методику

4.       Провести анализ полученных данных и сделать выводы.

Поставленные задачи обуславливают определенную структуру исследования, которая состоит из введения, двух глав, заключения и списка литературы.

Используемые методы исследования:

1.   Теоретические:

·             анализ научной, методической, исторической, специализированной литературы по теме исследования;

·             анализ ФГОС СОО, учебных программ, учебников и методических пособий по информатике;

·             изучение, систематизация и обобщение опыта обучения информатике.

2.   Эмпирические:

·             наблюдение;

·        тестирование;

·        педагогический эксперимент, его анализ.

Практическая значимость исследования заключается в том, что разработаны учебные материалы по изучению программирования на языке Python углубленного уровня в старшей школе. Они могут послужить основой разработки учебных и методических пособий для общеобразовательной подготовки по информатике.

Глава 1. Научно-методические основы изучения программирования в средней школе

1.1 Исторические аспекты развития линии «Алгоритмизация и программирование»

Становление информатики как полноценного общеобразовательного предмета в школе претерпело множество изменений. В данном параграфе мы проследим этапы эволюции информатики в школе на протяжении 30 лет (в частности - содержательной линии «Алгоритмизация и программирование»).

I.          «Программирование - вторая грамотность». 1985 - 1991 гг.

В конце 20 века развитие вычислительной техники и электроники сильно прогрессировало. Внедрение их за пределы научных и оборонных сфер привело к тому, что информатика, как техническая наука, была включена в учебный процесс школьников.

Основоположником информатики в школе принято считать Ершова Андрея Петровича, выдающегося советского ученого, программиста. В 1981 году на 3-й Всемирной конференции Международной федерации по обработке информации и ЮНЕСКО по применению ЭВМ в обучении он делает доклад под названием «Программирование - вторая грамотность» [30].

В своем докладе Ершов сравнивает грамотность и программирование:

·       в основе обоих лежит изобретение: печатный станок и ЭВМ;

·        оба являются «выражением органической способности человека»;

·        «дополняют друг друга, формируя новое представление о гармонии человеческого ума».

А также книги и вычислительные машины:

·       оба элемента - носители информационной модели внешнего мира.

Однако грамотность, в его понимании, помимо умения читать или писать программы для машин, еще и воспитание человека. Любая программа имеет естественное происхождение и занимает, чуть ли не главное место в повседневной жизни людей.

Ершов выдвигает предложение отразить программирование в структуре и содержании всеобщего образования.

«Программирование - вторая грамотность» вскоре становится лозунгом, а с 1 сентября 1985 года в учебные планы школ включен обязательный курс для 9-10 классов.

 год: издано первое пробное учебное пособие для средних учебных заведений «Основы информатики и вычислительной техники» в двух частях под редакцией А.П. Ершова и В.М. Монахова [2928]. Основные понятия курса:

«компьютер», «программа», «исполнитель», «алгоритм».

Первая проблема, с которой столкнулось большинство школ - отсутствие компьютерной техники. Интерес молодежи к использованию ЭВМ рос, однако знакомства с машинами пока были ограничены и информатику изучать приходилось без практики на вычислительной машине. Однако к концу 80-х годов в образовательные учреждения начала массово поставляться отечественная компьютерная техника и последовала следующая задача: разработать единое программно-методическое обеспечение курса информатики по причине разнородности вычислительной техники. Как результат, с 1986 года в педагогических ВУЗах началась подготовка учителей информатики.

Появляются еще три учебника рекомендованные к изучению информатики как альтернативные и равноправные [6], [14], [5]:

Название учебника

Авторы

Особенности

   1

 «Основы информатики

 В.А. Каймин,

Формирование




компьютерной


и вычислительной

А.Г. Щеголев,

грамотности, логического


техники»

Е.А. Ерохина,

мышления,


(1989 г.)

Д.П. Федюшин.

информационной




культуры школьников.

  2

«Основы информатики и вычислительной техники» (1990 г.)

А.Г. Кушниренко, Г.В. Лебедева, Р.А. Свореня.

Формирование алгоритмического мышления школьников.

   3

«Основы информатики и вычислительной техники» (1991 г.)

А.Г. Гейн, В.Г. Житомирский, Е.В. Линецкий, М.В. Сапир, В.Ф. Шолохович.

 Формирование способности школьников к моделированию.


В 1990 году была опубликована одна из основных работ в области фундаментальных проблем информатики заслуженного научного деятеля Российской Федерации - Константина Константиновича Колина под названием

«О структуре научных исследований по комплексной проблеме «Информатика» [13].

Одними из главных особенностей информатики, по мнению К.К. Колина

–        востребованность её методов предметными областями науки, а также инновационность и возможность использования многими сферами научного познания.

В публикации объяснялось, что информатика, являясь фундаментальной наукой, способна в несколько раз увеличить исследовательскую эффективность для других направлений фундаментальной и прикладной науки. Однако другие науки, которые совершенствуются средствами и методами информатики, не стремятся к решению задачи их дальнейшего совершенствования и развития. Из чего можно было сделать вывод о необходимости создания и внедрения особых мер, развивающих вышеупомянутое дисциплинарное научное направление.

Таким образом, он впервые рассмотрел информатику как «комплексную междисциплинарную проблему» и тем самым заложил зерно революционно-

нового подхода к представлению предмета в системе наук и образования, который мы можем наблюдать и в настоящее время.

Колин предлагает структуру предметной области информатики, в состав которой входят теоретический, технический, биологический и социальный компонент. Таким образом, технический аспект, который в большей степени опирается на программирование, уже не занимает лидирующие позиции при изучении предмета.

II.            «Компьютерная грамотность - каждому школьнику». 1992 - 1999гг.

Введение информатики в старшем звене общеобразовательной школы инициировало начало разработки содержания образования в области информатики и ИКТ, ориентированного на среднее звено и начальную школу.

После принятия в 1992 году закона «Об образовании», курс становится рекомендованным с 7 класса. Название предмета также меняется с «Основы информатики и вычислительной техники» на «Информатика».

Итак, информатика (в том числе и программирование) теперь может изучаться, начиная с 7 класса. Не все школы переходят на предложенный вариант обучения, а те, что решают попробовать новое образовательное веяние, сталкиваются с проблемами на практических занятиях по программированию, где большое количество задач математического характера. Поскольку согласованность между дисциплинами в полной мере не достигнута, становится заметным сильная разноуровневость учащихся. Вышеприведенные учебники больше не отвечают требованиям учителей информатики, методической литературы практически нет. Преподаватели начинают экспериментировать с содержанием обучения и разрабатывают собственные авторские программы.

год: определен обязательный минимум содержания образования по информатике, включающий в себя содержательные линии: «Информация и информационные процессы», «Представление информации», «Компьютер»,

«Алгоритмы и исполнители», «Формализация и моделирование»,

«Информационные технологии».

На данном этапе выделяют пропедевтический (1-6 классы), базовый (7-9 классы), профильный (10-11 классы) курсы информатики в школе.

III.          ФК ГОС 2004

2004 год: следующий устойчивый уровень обучения информатики в школе - Федеральный компонент государственного образовательного стандарта. Разработкой учебников, соответствующих новому обязательному минимуму содержания обучения информатике занимались следующие преподаватели: Гейн А.Г., Семакин И.Г., Горячев А.В. (начальная школа). После анализа данных учебников были утверждены содержательные линии курса информатики: «Информация и информационные процессы»,

«Представление информации», «Компьютер», «Моделирование»,

«Алгоритмизация и программирование», «Информационные технологии».

В преподавании курса «Информатики и ИКТ» по образовательному стандарту ГОС-2004 реализуется важнейшее требование модернизации школьного образования - переход от знаниевой к развивающей модели обучения, к деятельностным формам организации учебного процесса. На это направлена система формирования разнообразных умений, навыков и способов познавательной деятельности учащихся в процессе обучения как информатики, так и других предметов. Появляется множество различных учебников по данному курсу, однако в силу различий авторских подходов к преподаванию курса «Информатика и ИКТ» педагог свободен в выборе учебника.

УМК. Горячев А.В., Матвеева Н.В., и др. - основные учебники пропедевтического курса, Гейн А.Г., Семакин И.Г., Угринович Н.Д., Макарова Н.В. Босова Л.Л. и др. - основные учебники базового и профильного обучения. Основные идеи, реализованные во всех учебниках данного поколения это личностно-ориентированное обучение, дифференциация на старшей ступени, выход на компетенции средствами одного предмета.

Однако, проанализировав несколько УМК по преподаванию линии программирования, можно увидеть, что авторская свобода слишком существенная: многие авторы не уделяют достаточного внимания линии

«Алгоритмизация и программирование».

IV. ФГОС (НОО-2009, ООО-2010, СОО-2012)

Появление таких документов, как ФГОС начального общего образования (2009) [1], ФГОС основного общего образования (2010) [2], ФГОС среднего (полного) общего образования (2012) [3] сильно повлияло на усиление содержательной части предмета «Информатика», особенно в линии

«Алгоритмизация и программирование». В соответствии с ФГОС реализуется системно-деятельностный подход к образованию и выход на компетенции средствами всех предметов.

В документе нет фиксированного содержания по предмету, только требования к результатам освоения ООП. Особенностью введения ФГОС является возможность свободного конструирования содержания предмета, опираясь на личностные, метапредметные и предметные требования, описанные в документе.

Новые предметные требования ФГОС старшей школы к результатам освоения объектно-ориентированного программирования повлияли на написание еще нескольких УМК для старшей школы: УМК авторов И.А. Калинина, Н.Н. Самылкиной, К.Ю. Полякова, Е.А. Еремина.

Цель изучения линии "Алгоритмизация и программирование" определяется двумя взаимосвязанными аспектами: первый - развивающий, под которым подразумевают развитие алгоритмического стиля мышления, второй - программистский, т.к. составление программ начинается с построения алгоритма, отсюда важнейшее качество программиста - развитое алгоритмическое мышление, позволяющее сформировать умение средствами языка программирования решить типовую задачу.

В первом школьном учебнике превалировал программистский аспект, но в связи со смещением базового курса информатики в среднее звено стала подчеркиваться развивающая роль именно алгоритмизации. По мнению

некоторых авторов учебников (В.А. Каймин, Ю.А. Первин, А.Л. Семенов, С.К. Ландо и др.) алгоритмическое мышление является частью логического и формируется оно уже с начальной школы.

1.2 Авторские подходы к изучению линии «Алгоритмизация и программирование» в старшей школе

Рассмотрим несколько авторских подходов к изучению содержательной линии «Алгоритмизация и программирование» на профильном уровне в старшей школе. Ниже составлены таблицы с изучаемыми понятиями, приведенных в той последовательности, в которой они изложены в учебниках рассматриваемых подходов.

Авторский коллектив: И.А. Калинин, Н.Н. Самылкина.

В состав учебно-методического комплекта входит:

·      «Информатика. Углубленный уровень: учебник для 10 класса» [9];

·        «Информатика. Углубленный уровень: учебник для 11 класса» [10];

·        Задачник-практикум с диском [11];

·        Сборник проверочных тестов;

·        Методическое пособие для учителя [7].

Учебник для 10 класса.

§16. Алгоритм и его свойства.

· Строгое определение алгоритма. Машина Тьюринга · Алгоритмически неразрешимые проблемы · Сравнение алгоритмов


алгоритм; свойства алгоритма: результативность, детерминированность, понятность и дискретность, эффективность, массовость; машина Тьюринга; вычислимая функция; алгоритмически неразрешимые


проблемы; сложность алгоритма; классы сложности;

§17. Программирование.

· Языки программирования, трансляторы · Разработка программного обеспечения


язык программирования; языки низкого, аппаратного и высокого уровней; трансляторы; интерпретаторы; компиляторы; компоновка; библиотека функций; принципы структурного программирования; разработка программного обеспечения.

§18. Структуры данных.

· Списки · Деревья


указатель; структурированные наборы; типы хранения структур: статический, динамический; список; односвязные и двусвязные списки; дерево; стек; очередь; двоичное дерево поиска.

§19. Типовые алгоритмы.

· Поиск · Сортировка


задача поиска; поиск в отсортированной последовательности; хэшированная таблица; коллизия; задача сортировки; сортировка простыми обменами или «алгоритм пузырька»; быстрая сортировка;


Авторский коллектив: И.Г.Семакин, Т.Ю. Шейна, Л.В. Шестакова.

В состав учебно-методического комплекта входит:

·      «Информатика. Углубленный уровень: учебник для 10 класса: в 2 частях» [22];

·        «Информатика. Углубленный уровень: учебник для 11 класса: в 2 частях» [23];

·        Компьютерный практикум;

·        Методическое пособие для учителя.

Учебник для 10 класса. Часть 1.

§1.7.1. Определение, свойства и описание алгоритма.

алгоритм; алгоритм обработки информации; алгоритмические машины; система команд исполнителя (СКИ); «команда исполнителя», «шаг или действие исполнителя»; свойства алгоритма: понятность, дискретность, конечность, точность, массовость (универсальность); способы описания алгоритмов: следование, ветвление, цикл (с предусловием, с постусловием, с параметром); языки описания алгоритмов: язык блок-схем, учебный Алгоритмический язык, языки программирования.

§1.7.2. Алгоритмическая машина Тьюринга.

машина Тьюринга; внутренний алфавит машины; программирование машины Тьюринга; функциональная схема машины Тьюринга: внешний алфавит, внутренний алфавит, команда программы; алгоритмически разрешимая задача.

§1.7.3. Алгоритмическая машина Поста.

устройство машины Поста; отличие от машины Тьюринга; программирование машины Поста; нормальные алгоритмы Маркова; теорема об эквивалентности алгоритмических моделей.

§1.7.4. Этапы алгоритмического

программа управления компьютером; система команд: простые (ввод, вывод), присваивание, структурные

решения задачи.

(ветвление, цикл); этапы решения задачи: постановка, формализация, построение алгоритма, программирование, тестирование; план тестирования; синтаксическая ошибка; отладка.

§1.7.5. Алгоритмы поиска данных.

атрибуты поиска: набор данных, ключ поиска, критерий поиска (условие поиска); организация набора данных: неструктурированный набор данных, структура данных; алгоритмы поиска: случайный перебор, последовательный перебор, поиск половинным делением, блочно-последовательный поиск, поиск методом спуска по дереву.

§1.7.6. Программирование поиска

организация данных; программа последовательного поиска; программа бинарного поиска: интервал поиска, верхняя и нижняя границы.

§1.7.7. Алгоритмы сортировки данных.

сортировка: внутренняя, внешняя; параметры сортировки: ключ сортировки, порядок сортировки; методы сортировки: выбор максимального элемента, метод пузырька; алгоритм быстрой сортировки Хоара.

Учебник для 11 класса. Часть 1.

§2.1. Эволюция программирования.

программирование для компьютера; машинно- ориентированное программирование: в машинных командах, на автокодах (ассемблерах); машинно- независимое программирование; парадигмы и языки программирования: процедурное, функциональное, логическое, объектно-ориентированное; методологии и технологии программирования.

§2.2. Структурное программирование

§2.2.1. Паскаль - язык структурного программирования.

история Паскаля; Паскаль; структура процедурных языков программирования высокого уровня; основные составляющие языков программирования: алфавит, синтаксис, семантика.

§2.2.2. Элементы языка и типы данных.

состав программы на Паскале: элементы языка (алфавит, служебные слова, идентификаторы, комментарии); типы данных: стандартные (целочисленные, вещественные, логические, символьные), определяемые в программе (перечислимые, ограниченные); простые и структурные, ссылочные типы.

§2.2.3. Операции, функции, выражения.

арифметические операции: унарная, бинарная; тип результата операции; стандартные функции и процедуры; арифметическое выражение; логические выражение, константы, переменные, операции, функция; операции отношения.

§2.2.4. Оператор присваивания, ввод и вывод данных.

присваивание; оператор  присваивания; арифметический и логический операторы присваивания; файл (типизированный, нетипизированный и текстовый); текстовый файл; ввод данных: с клавиатуры, из файла на диске; файловая переменная; вывод данных: на экран, в текстовый файл; операторы работы с файлами.

§2.2.5. Структуры алгоритмов и

базовые алгоритмические структуры: следование, ветвление, цикл (с предусловием, с постусловием);

программ.

комбинации базовый структур: последовательность, вложенность; структурный алгоритм (программа); структурирование текста программы.

§2.2.6. Программирование ветвлений.

программирование ветвлений: условный оператор, оператор выбора.

§2.2.7. Программирование циклов.

разновидности циклических алгоритмов: циклы с заданным числом повторений, итерационные циклы; операторы цикла: цикл-пока, цикл с параметром, цикл- до.

§2.2.8. Вспомогательные алгоритмы и подпрограммы.

подпрограммы: процедуры, функции; параметры подпрограмм: параметры-переменные, параметры- значения.

§2.2.9. Массивы.

массив; регулярный тип; описание массивов; идентификация элементов массива; одномерный и многомерный массивы; ввод/вывод массивов.

§2.2.10. Типовые задачи обработки массивов.

задачи обработки массива: заполнение массива, поиск в массиве, сортировка массива; датчик случайных равномерно распределенных чисел;

§2.2.11. Метод последовательной детализации.

метод последовательной программирование «сверху подпрограммы.

  вниз»;

детализации; интерфейс

§2.2.12. Символьный тип данных.

величины символьного типа; функции Ord(x) и Chr(x); принцип последовательного кодирования.

§2.2.13. Строки символов.

строка; строковая константа; описание строковой переменной; обозначение символа в строке; операции над строками; стандартные функции и процедуры.

§2.2.14. Комбинированный тип данных.

комбинированный тип данных; тип поля; запись; идентификация поля записи.

§2.3.Рекурсивные методы программирования

§2.3.1. Рекурсивные подпрограммы.

n-шаговая рекуррентная последовательность; рекуррентная формула; рекурсивная подпрограмма (функция, процедура); примеры рекурсивного программирования: задача о Ханойской башне, быстрая сортировка (Э.Хоар)

§2.3.2. Задача о Ханойской башне.


§2.3.3. Алгоритм быстрой сортировки.


§2.4. Объектно-ориентированное программирование

§2.4.1.  Базовые понятия объектно- ориентированного программирования.

класс; объект; базовые принципы ООП: инкапсуляция, наследование, полиморфизм.

§2.4.2. Система программирования Delphi.

Delphi; среда системы программирования Delphi; форма; элементы управления; методы; событийно- управляемое программирование.

§2.4.3. Этапы программирования Delphi.

создание консольного приложения; создание оконного приложения: проектирование и конструирование интерфейса, реализация обработки событий.

§2.4.4. Программирование метода статически испытаний.

метод статических испытаний (метод Монте-Карло); вычисление числа , статистическая оценка , причины погрешности результата.

§2.4.5. Построение графика функций.

холст; свойства холста; рисование на холсте; рисование графика функции.


Авторский коллектив: К.Ю. Поляков, Е.А. Еремин.

В состав учебно-методического комплекта входит:

· «Информатика. Углубленный уровень: учебник для 10 класса: в 2 частях» [20];

·        «Информатика. Углубленный уровень: учебник для 11 класса: в 2 частях» [21];

·        Задачник-практикум с диском;

·        Сборник проверочных тестов;

·        Методическое пособие для учителя.

Учебник для 10 класса. Часть 2.

Глава 8. Алгоритмизация и программирование.

§54. Алгоритм и его свойства.

алгоритм; исполнитель; формальный исполнитель; свойства алгоритма: дискретность, детерминированность, понятность, конечность, корректность; способы записи алгоритма: на естественном языке, на псевдокоде, в виде блок-схем, в виде программы; язык Паскаль; язык КуМир (школьный алгоритмический язык).

§55. Простейшие программы.

Пустая программа; вывод текста На экран; переменная: тип, имя, значение; оператор присваивания; список вывода.

§56. Вычисления.

типы данных; арифметические выражения и операции; вещественные значения; стандартные функции; псевдослучайные и случайные числа.

§57. Ветвления.

линейные программы; условные операторы: в полной и неполной форме; сложные условия; множественный выбор.

§58. Циклические алгоритмы.

цикл; цикл с предусловием и постусловием; цикл с переменной; вложенный цикл.

§59. Процедуры.

процедура; процедура с параметрами; параметр; аргумент; локальная переменная; изменяемые параметры; передача параметра по значению: параметры: аргументы и результаты (в школьном алгоритмическом зыке).

§60. Функции.

функция; логические функции: логические переменные и значения.

§61. Рекурсия

рекурсия; числа Фибоначчи; фракталы; Треугольник Серпинского; Ханойские башни; рекурсивная процедура (функция); примеры; алгоритм Евклида; стек; итерационный алгоритм.

§62. Массивы.

массив; перебор элементов.

§63. Алгоритмы обработки массива.

поиск в массиве; максимальный элемент массива; реверс массива; сдвиг элементов массива: циклический сдвиг; отбор нужных элементов массива.

§64. Сортировка.

сортировки: простые и сложные; метод пузырька (сортировка обменами); «быстрая сортировка»: медиана массива.

§65. Двоичный поиск.

линейный и двоичный поиск.

§66. Символьные строки.

символьная строка; операции со строками: конкатенация, поиск в строках; пример обработки строк; преобразование число ↔ строка; рекурсивный перебор; сравнение и сортировка строк.

§67. Матрицы.

двумерный массив (матрица); обработка элементов матрицы: квадратная матрица, главная диагональ, элементы побочной диагонали;

§68. Работа с файлами.

файлы: текстовые и двоичные; принцип работы: открыть файл - работа с файлом - закрыть файл; подсчет количества данных в файле; обработка массивов;

Учебник для 11 класса. Часть 2.

Глава 5. Элементы теории алгоритмов.

§34. Уточнение понятия алгоритма.

алгоритмические неразрешимые задачи; теория алгоритмов; эквивалентные алгоритмы; универсальный исполнитель; алгоритм; машина Тьюринга; автомат: состояния, программа; тезис Чёрча-Тьюринга; машина Поста; нормальные алгорифмы Маркова.

§35. Алгоритмически неразрешимые

вычислимые и невычислимые функции; алгоритмически разрешимая и неразрешимая задача;

задачи.

проблема останова; проблема эквивалентности;

§36. Сложность вычислений.

временная сложность алгоритма; асимптотическая, линейная, квадратичные сложности; задача коммивояжёра; задача выполнимости; алгоритмы поиска: линейный, двоичный; алгоритмы сортировки: сортировка слиянием и пирамидальная сортировка.

§37. Доказательство правильности программ.

тестирование; доказательство программирования; алгоритм Евклида; инвариант цикла; спецификация; корректная программа; верификация программ.

Глава 6. Алгоритмизация и программирование.

§38. Целочисленные алгоритмы.

решето Эратосфена; «длинные» числа.

§39. Структуры (записи).

структура; объявление структур; обращение к полю структуры; работа с файлами: типизированные файлы; сортировка массива структур: указатель.

§40. Динамические массивы.

статический и динамический массивы; динамические структуры данных: размещение в памяти, использование в подпрограммах, расширение массива.

§41. Списки.

список; использование динамического массива; модульность; связные списки.

§42. Стек, очередь, дек.

стек; использование динамического массива; вычисление арифметических выражений: инфиксная, префиксная и постфиксная записи; скобочные выражения; очередь; дек.

§43. Деревья.

дерево: узлы, дуги, корень дерева, листья; потомок,


родитель, предок; двоичное дерево; деревья поиска: ключи узлов; двоичное дерево поиска; обход двоичного дерева: обход в ширину; вычисление арифметических выражений: использование связанных структур; хранение двоичного дерева в массиве.

§44. Графы.

граф: вершины, ребра, петля; связный граф; ориентированный граф; взвешенный граф: вер ребра, весовая матрица; «жадные» алгоритмы; задача построения минимального остовного дерева; кратчайшие маршруты; алгоритм Дейкстры; алгоритм Флойда-Уоршелла; задача Комивояжёра; задача о минимальном потоке; задача о наибольше паросочетании.

§45. Динамическое программирование

динамическое программирование; поиск оптимального решения; задача о куче; задача (размен монет)

Глава 7. Объектно-ориентированное программирование.

§46. Что такое ООП?

абстракция; объектная модель задачи.

§47. Объекты и классы.

объект; объектно-ориентированный анализ (ООА); класс; метод; интерфейс.

§48. Создание объектов  в программе.

поле; конструктор; экземпляр класса.

§49. Скрытие внутреннего устройства.

инкапсуляция; свойство.

§50. Иерархия классов.

классификация; иерархия; иерархия логических элементов; объектно-ориентированное программирование; иерархия наследования; базовый класс; полиморфизм; виртуальный, абстрактный методы; абстрактный класс; классы-наследники; статическое, динамическое связывания; модульность; сообщения между объектами.

§51. Программы с графическим интерфейсом.

сообщение; широковещательное сообщение; событие; событийно-ориентированный стиль программирования; среды быстрой разработки приложений - RAD-среды.

§52. Основы программирования в RAD-средах.

общий подход; простейшая программа; свойства объектов; обработчики событий.

§53. Использование компонентов.

программа с компонентами; ввод и вывод данных; обработка ошибок.

§54. Совершенствование компонентов.


§55. Модель и представление.

модель; представление; вычисление арифметических выражений: модель; вычисление арифметических выражений: представление;


На основе изученных УМК можно сделать следующие выводы:

Авторский подход

Выводы

1

И.А. Калинин, Н.Н. Самылкина

1.1. Изучение линии «Алгоритмизация и программирование» предполагается в 10 классе;



 Материал четко структурирован и скомпонован, занимает 4 параграфа в основном учебнике;  Авторы считают нужным знакомить учащихся с различными языками программирования, чему свидетельствует наличие приложения в конце учебника, где рассмотрены понятия о псевдокоде и процедурных языках программирования, таких как Паскаль и язык С;  Практическая часть изучения программирования представлена в практикуме, где: · приводится информация, дополняющая основные аспекты, изложенные в учебнике; · происходит знакомство со средой программирования; · используется одна задача нарастающей сложности, совмещающая в себе несколько изучаемых тем;

      2

    И.Г.Семакин, Т.Ю. Шейна, Л.В. Шестакова

 Изучение линии «Алгоритмизация и программирование» предполагается в 10 и 11 классах;  Материал изложен в большом количестве, с хорошим окончанием каждого параграфа - обобщающей таблицей;  Авторы отдают предпочтение одному языку программирования - Паскаль, выстраивают параграфы учебника в соответствии с изучением



отдельных тем языка;  Практически после каждого параграфа предлагается выполнить работу из практикума: · для практических работ, опирающихся на изучение линии по учебнику 10 класса - реализовать программы, представленные в основном учебнике или чуть усовершенствовать их; · для практических работ, опирающихся на изучение линии по учебнику 11 класса - большое количество задач для отработки или индивидуальных заданий по программированию на языке Паскаль;

         3

        К.Ю. Поляков, Е.А. Еремин

 Изучение линии «Алгоритмизация и программирование» предполагается в 10 и 11 классах;  Материал изложен в большом количестве и сложным языком;  Авторы не ограничиваются знакомством с двумя языками программирования (Паскаль, КуМир): практически после каждого параграфа предлагается подготовить сообщение по теме параграфа с использованием не изучаемых в учебнике языков (в том числе Python);  Практические задания отдельно по каждой теме нарастающей сложности;


 

Общий вывод:

1. Из пунктов 1.1, 2.1, 3.1 следует, что авторские коллективы под номерами

2 и 3 уделяют большее количество времени в старшей школе при

изучении линии «Алгоритмизация и программирование» на профильном уровне;

2.       Из пунктов 1.2, 2.2, 3.2 следует, что авторский коллектив под номером 1 считает нужным давать основные аспекты программирования, в то время как 2 и 3 предлагает большее количество дополнительной информации;

3.       Из пунктов 1.3, 2.3, 3.3 следует, что авторы под номером 1 предполагают изучение программирования при помощи языков программирования С, Паскаль и Псевдокода, 2 - только Паскаля, 3 - Паскаля и КуМира (школьный алгоритмический язык);

4.       Из пунктов 1.4, 2.4, 3.4 следует, что:

·          авторский коллектив под номер 1 предлагает социально-значимые практические задания нарастающей сложности;

·         2 коллектив практикует задачи, предложенные в учебнике для учащихся 10 класса и дает возможность использовать большое количество типовых задач различной сложности для отработки тем изучения языка программирования Паскаль в 11 классе;

·        3 авторский коллектив предлагает выполнять практические задания по определенным темам изучения языка программирования разной сложности.

1.3 Python - язык программирования для изучения в школе

Рассмотрим основные преимущества языка Python в школе и сравним его с другими языками программирования, используемыми при обучении программированию и алгоритмизации в настоящее время.

Приведем некоторые критерии, которые важно учитывать при выборе языка программирования в общеобразовательной школе:

·         Простота изучения;

·        Понятность программного кода;

·        Высокая скорость разработки;

·        Современность;

·        Интерактивность.

Высокоуровневый язык программирования Python, используемый во всем мире, как для обучения, так и в промышленности, в последнее время набирает популярность среди учителей нашей страны. В настоящее время несколько московских школ используют этот язык на уроках информатики (как правило, в некоторых математических классах). Мысль о том, чтобы обучать программированию в школе с помощью Python возникала не раз. Однако русскоязычных методических разработок для обучения школьников очень мало, в особенности пособий (их практически нет).

Для многих основное преимущество языка Python заключается в удобочитаемости программного кода, который в большинстве случаев более компактен, чем на других языках программирования. На различных форумах включение данного языка в ЕГЭ считают «правильным сдвигом», поскольку код на нем выглядит меньше, читается легче и не содержит в себе «лишней» информации в виде инструкций, которые не имеют непосредственного отношения к алгоритму (например, int main() в C++) и таким образом экономит время учащегося на решение задачи.

Объем программного кода на языке Python обычно составляет треть или даже пятую часть эквивалентного программного кода на языке С++ или Java. Это означает меньший объем ввода с клавиатуры, меньшее количество времени на отладку и меньший объем трудозатрат на сопровождение. На уроках информатики учителю необходимо охватить в среднем 10-15 человек. Лаконичность и простота кода при возникновении ошибок у учащихся здесь как нельзя кстати.

Огромным преимуществом также является тот факт, что Python автоматически приучает писать хороший код, что достигается использованием отступов как обязательных элементов языка.

Чтобы запустить программу на языке Python, не требуется выполнять промежуточную компиляцию и связывание, как это делается в языках программирования, подобных C и C++. С развитием информационных технологий, человек привык получать информацию с большой скоростью. Будь то страница поисковых систем или мгновенное получение сообщений, звонков. Быстрота получения ответа на запрос ощутима при сравнении старых и новых версий чего бы то ни было. Интерпретатор Python немедленно выполняет программу, что позволяет производить программирование в интерактивном режиме и получать результаты сразу же после внесения изменений. Поэтому интерактивная оболочка Python только добавляет удобства, как учащемуся, так и учителю.

Кроме того, данный язык программирования обеспечивает набор мощных встроенных инструментов. В состав Python входит так называемая стандартная библиотека, которая предоставляет массу возможностей. Например, расширение NumPy для математических выражений включает в себя такие мощные элементы, как объекты массивов, интерфейсы к стандартным математическим библиотекам и другое. Дополнительные инструменты математических вычислений для Python поддерживают возможность создания анимационных эффектов и трехмерных объектов, позволяют организовывать параллельные вычисления

Современность языка трактуется его использованием многочисленными компаниями, которые даже у детей сегодня на слуху [16]:

·         Компания Google широко использует Python в своей поисковой системе и оплачивает труд создателя Python;

·        Служба коллективного использования видеоматериалов YouTube в значительной степени реализована на языке Python;

·        Популярная программа BitTorrent для обмена файлами в пиринговых (основанных на равноправии участников) сетях написана на Python;

·        Такие компании, как Intel, Hewlett-Packard используют Python для тестирования программного обеспечения;

·        NSA используют Python для шифрования и анализа разведданных.

Важный аспект в пользу данного языка программирования - простота в изучении. «Каждому по плечу» - философия языка Python в одном лозунге. Марк Лутц, ведущий специалист в области обучения Python за рубежом и автор самых ранних, наиболее популярных публикаций, выделяет удовольствие, как один из факторов популярности языка программирования Python: «Благодаря непринужденности языка Python и наличию встроенных инструментальных средств процесс программирования может приносить удовольствие. На первый взгляд это трудно назвать преимуществом, тем не менее, удовольствие, получаемое от работы, напрямую влияет на производительность труда» [16].

С 2011 года Python включен в список рекомендуемых языков программирования для Всероссийских олимпиад, а с 2015 - во всех вариантах КИМ ЕГЭ по информатике появились примеры программ с его использованием. Углубленный уровень изучения программирования показывает возможность выбора дальнейшей профессии в IT-отрасли - отрасли, которая является скоплением не одного десятка общемировых востребованных профессий будущего.

Для обучения, подготовки к олимпиадам и ЕГЭ по программированию на языке Python масса возможностей. Согласно ФГОС ОО, новая информационная среда школ (ИОС) позволяет использовать комплекс информационных образовательных ресурсов, в том числе цифровые образовательные ресурсы (ЦОР), электронно-образовательные ресурсы (ЭОР), электронные учебники, различные дистанционные варианты обучения. Приведем некоторые из них:

#"896582.files/image001.jpg">

Рис.1. Интерактивный режим IDLE (среда разработки на языке Python)

Интерактивный сеанс работы с интерпретатором Python начинается с вывода двух строк информационного текста (которые далее будем опускать в примерах), затем выводится приглашение к вводу >>>. Ввод каждой операции завершается нажатием на клавишу <ENTER>, после чего Python выполняет эту операцию и выдаёт результат или сообщение об ошибке. После присваивания результата операции какой-нибудь переменной результат не выдаётся, а чтобы его увидеть, нужно набрать имя переменной и нажать <ENTER>.

Традиционно, первой программой является вывод строки "Hello world"(рис.2).

алгоритмизация программирование python coursera

Рис.2. Запуск первой программы на Python

Когда в строке приглашения к вводу >>> была введена первая ин- струкция print, результат (строка) был немедленно выведен на экран. Нам не потребовалось создавать файл с исходным текстом программы и для выполнения программного кода не понадобилось сначала компилировать и компоновать его, что является обычным делом при использовании таких языков программирования, как C или C++.

При работе в интерактивном режиме можно вводить любое число команд Python, и каждая из них будет выполняться сразу же после ввода. Более того, поскольку в интерактивном сеансе результаты выражений, которые вводятся, выводятся автоматически, поэтому необязательно явно использовать функцию «print» (рис.3):

Рис.3

Благодаря тому, что программный код выполняется немедленно, интерактивный режим превращается в замечательный инструмент для проведения экспериментов с конструкциями языка.

Предположим, что вы изучаете некоторый фрагмент программы на языке Python и наталкиваетесь на выражение 'Spam!'*8, которое вам кажется непонятным. Можно, конечно, потратить с десяток минут, пробираясь через руководства и учебники, в попытках выяснить, что же делает этот код, но можно просто выполнить его в интерактивной оболочке (рис.4):

Рис.4

Эксперимент наглядно показывает, что произошло дублирование строки: в языке Python оператор * выполняет операцию умножения над числами, но если левый операнд является строкой, он действует как оператор многократной конкатенации строки с самой собой.

Приведем список наиболее распространенных ошибок:

1.       Использование переменной, которой еще не присвоено значение (рис.5):

Рис.5

2.       Незакрытые скобки (рис.6):

Рис.6

Примечание: Если скобка открыта, но не закрыта, интерпретатор Python будет ожидать закрытой скобки (рис.7):

Рис.7

3.       Операции сложения, вычитания, деления (но не умножения) между строками и числами (рис.8):

Рис.8

Помимо интерактивного режима, в котором можно быстро отследить результат инструкций для Python, есть возможность писать многострочную программу в отдельном файле. Для этого нужно перейти во вкладку File - New

File (рис.9), откроется новое окно, в котором мы сможем написать первую самостоятельную программу на Python.

Рис.9

Перед тем, как написать программу, ознакомимся с основными аспектами синтаксиса языка.

Синтаксис языка Python

·              Конец строки является концом инструкции (точка с запятой не требуется).

·              Вложенные инструкции объединяются в блоки по величине отступов. Отступ может быть любым, главное, чтобы в пределах одного вложенного блока отступ был одинаков. Отступ в 1 пробел - не лучшее решение. В дальнейшем, будем использовать знак табуляции.

·              Вложенные инструкции в Python записываются в соответствии с одним и тем же шаблоном, когда основная инструкция завершается двоеточием, вслед за которым располагается вложенный блок кода, обычно с отступом под строкой основной инструкции.

Пример:

Основная инструкция:

Вложенный блок инструкций

Неско лько специальных случаев :

·              Иногда возможно записать несколько инструкций в одной строке, разделяя их точкой с запятой, но рекомендуется это делать, т.к. пострадает удобочитаемость программного кода.

·              Допустимо записывать одну инструкцию в нескольких строках. Достаточно ее заключить в пару круглых, квадратных или фигурных скобок:

Пример:(a == 1 and b == 2 and c == 3 and d == 4):(“Try”)

·              Тело составной инструкции может располагаться в той же строке, что и тело основной, если тело составной инструкции не содержит составных инструкций.

Пример:(x > y): print (“x”)

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 1):

·         Welcome to LTP (0:35),

·        Getting Started: Installing Python (2:46),

·        Python as a Calculator (10:33),

·        Variables (7:39),

·        Built-in Functions (5:00),

·        Defining Functions (6:41). (Week 2):

·        Type str (4:56),

·        Input/Output and str Formatting (10:14),

·        Docstrings and Function help (1:18),

·        Function Reuse (6:40);

 Задача: Чему равны значения переменных P и Q после выполнения последовательности действий?

>>> P = 4 * 5 // 3 % 5

>>> Q = 34 % P * 5 - 29 % 5 * 2

В приведенной записи // и % операции соответственно деления нацело и получения остатка от целочисленного деления.

Пример:

// 2 = 2

% 2 = 1

Подготовка к выполнению задания:

1          Какой порядок выполнения арифметических действий при выполнении следующей строки: 7 * 2 + 5 / 12 % 5

Варианты ответа:

а) * , + , / , %

б) * , % , / , +

в) * , / , % , +

Ответ: в)

2          Дополните выражение круглыми скобками, чтобы последовательность операций была: + , - , / , %

>>> 3 + 4 / 2 - 7 % 2

Ответ: (3 + 4) / (2 - 7) % 2

3                   Выберите варианты выражений, которые выведут ошибку при выполнении строки?

Варианты ответа:

а) 7 /(2 /(3 / 3)))

б) 5 + -3

в) 4 * *

г) 6 * (3 + 1)

Ответ: а) , в)

 Первая самостоятельная программа

Напишем программу нахождения корней квадратного уравнения (рис.10). Для записи значений, введенных с клавиатуры, используется функция input().

Рис.10

Чтобы запустить программу перейти во вкладку Run - Run Module (рис.11)

Рис.11

В интерактивной оболочке предлагается ввести коэффициенты квадратного уравнения, однако после следует ошибка (рис.12)

Рис.12

Дело в том, что функция input() записывает введенную информацию с клавиатуры в виде строки, т.е. при введении коэффициента A в переменную x записалось не число 2, а строка, состоящая из одного символа ‘2’. Чтобы

исправить ситуацию, добавим функцию int(), которая возвращает целочисленное значение аргумента. Программа будет выглядеть следующим образом (рис.13):

Рис.13

Запустим программу снова и проверим при разных значениях коэффициентов (рис.14).

Рис.14

На рисунке видно, что при попытке посчитать положительный дискриминант выдана ошибка, в которой говорится, что «имя ‘sqrt’ не определено» (NameError: name 'sqrt' is not defined)

Python автоматически может осуществлять множество арифметических операций (сложение, вычитание, умножение, деление, возведение в степень и др.), однако для более сложных вычислений используется модуль math. Этот модуль предоставляет обширный функционал для работы с числами: округления, извлечение корня, модуль, факториал, тригонометрические функции и т.п. Чтобы подключить этот модуль требуется вписать в начало программы строку import math, а чтобы обратиться к этому модулю для подсчета квадратного корня - math.sqrt()(рис.15).

Рис.15

Запустим программу (рис.16).

Рис.16

Python может выявить только формальные, синтаксические ошибки. Логические ошибки, допущенные вами, в подавляющем большинстве случаев никто, кроме грамотного программиста, выявить и устранить не сможет. Это и произошло: в строке 6 есть ошибка - перепутан знак сравнения. На самом деле условие должно выглядеть как if D >= 0.

Чтобы избежать таких ошибок, нужно проверять все возможные варианты (в особенности для условных операторов). Если вы не можете найти ошибку, которую Python выдает, попробуйте использовать интерактивную оболочку как экспериментатор для отдельных частей программы.

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 3):

·         Functions, Variables, and the Call Stack (4:30)

·        Type bool (8:57)

·        Converting between int, str, and float (3:16)

·        If statements (9:10)

·        No if required (4:17)

·        Structuring if statements (6:07)

(Week 4):

·           More str operators (2:16)

·        str: indexing and slicing (4:53)

·        str Methods: Functions Inside of Objects (3:41)

·        for loop over str (11:35) (Week 5):

·        while loops (12:21)

 range (3:34)

Решение задач из учебника §17.

Задача: Дано натуральное трехзначное число n, в записи которого нет нулей. По предложенной записи алгоритма в виде блок-схемы и псевдокода определите результаты его работы.


В фигурных скобках записаны пояснения (комментарии) к операторам.

Read(n) {Ввод N}

A = n mod 10 {разряд единиц} B = n div 100 {разряд сотен}

C = n div 10 mod 10 {десятки}

L = (n mod A=0) and (n mod B=0) and (n mod C=0)

Write (L) {Вывод L}

Переведите алгоритм на язык программирования и получите работающую программу.


Задача: По предложенным записям алгоритма напишите программу вычисления значения функции:

 

Read (x)

If (x-12)= -x*x

else

if (x<0)= x*x*x*x

else

Write (Y)= x-2

Протестируйте полученную программу, используя не менее трех тестовых наборов, чтобы можно было проверить все переходы.

Реализация на Python:

Проверка:

x = float(input())

>>> 0

if x <= -12:

-2.0

print(-x ** 2)

>>> -12.5

elif (x > -12) & (x < 0):

-156.25

print(x ** 4)

>>> -5

else :

625.0

print(x - 2)


 

Задача: Даны записи двух алгоритмов подсчета количества нечетных цифр в натуральном числе n. Слева решение оформлено с использованием цикла с предусловием, справа - с постусловием.

Выберите любой способ и переведите его на язык программирования. Протестируйте полученную программу.

 Алгоритм реализует следующ ую идею. Из числа выбрасывается цифра младшего разряда, проверяется на нечетность и затем отбрасывается. Нечетные цифры учитываются. Этот процесс повторяется до тех пор, пока число не исчерпается, т.е. не станет равным нулю.

 

 

Read(n) K = 0 While (n <> 0) if (n mod 10 mod 2 = 1) K = K + 1 n = n div 10 Write (K)

Read (n) K = 0 Do if (n mod 10 mod 2 = 1) K = K + 1 n = n div 10 While (n <> 0) Write (K)

Реализация на Python:

Проверка:

 n=int(input()) k=0 while n != 0: if n % 10 % 2 == 1: k = k + 1 n = n // 10 print (k)

 >>> 0 0  >>> 105 2

 

Замечание: Конструкции do…while на языке Python нет.

Задача: Используя предлагаемые записи алгоритма, напишите программу нахождения первых k чисел, кратных трем.

Read(k)

P = 1 {здесь накапливаем произведение}

For I = 1 to k/3= P * I * 3

Write(P)

Реализация на Python:

Проверка:

k = int(input())

>>> 2

p = 1

18

for i in range(3,k+1,3):

>>> 3

p = p * i

162

print (p)


 

Замечание: Функция range(A,B,C) возвращает упорядоченную последовательность элементов начиная с А до В, не включая В, с периодом С. Если период отсутствует, то С принимается за 1(период без начального элемента не задается). Если отсутствует начальный элемент, то за А принимается 0.

Пример:

>>> range(2,7,3)

>>> range(3,6)

>>> range(3)

2

3

0

5

4

1


5

2


Задача: Напишите программу решения следующей задачи.

Лотерейный номер состоит из трех чисел, каждое из которых может быть от 0 до 99 включительно. Определите шанс угадать выигрышный лотерейный номер.

Идея решения. Надо вычислить количество перестановок для заданного числа объектов (3), которые выбираются из общего числа объектов (100).

Перестановка - это любое множество объектов, в котором внутренний порядок имеет значение. Формула для определения перестановок имеет следующий вид:

 

Следовательно, надо написать функцию, вычисляющую факториал некоторого числа  ( ) и вычислить количество перестановок.

Реализация на Python:

 n = 100 k = 3 f1 = 1 f2 = 1 for i in range(1,n+1): f1 = f1 * i for j in range(1,n+1-k): f2 = f2 * j print ('Количество перестановок: ', f1/f2) print ('Шанс угадать выигрышный лотерейный билет: ', 1/(f1/f2))

Проверка:

 Количество перестановок: 970200.0 . Шанс угадать выигрышный лотерейный билет: 1.0307153164296022e-06


Замечание:

1.0307153164296022e-06 - экспоненциальная форма записи числа:

 

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 5):

·           Comments (4:55)

·        Type list (4:23)

·        list methods (8:07)

·        Mutability and Aliasing (10:03) (Week 6):

·        for loop over indices (14:24)

·        Parallel Lists and Strings (6:03)

·        Nested Lists (4:03)

·        Nested Loops (13:56)

·        Reading Files (4:43)

·        Writing Files (5:17)

Решение задач из учебника §17.

Задача: Напишите программу заполнения массива X(N) положительными и отрицательными элементами. Из него требуется сформировать новый массив только из положительных элементов. Найти из них наибольший элемент. Распечатать новый массив и наибольший элемент.

Реализация на Python:

X = [] a = int(input('Введите длину предполагаемого массива: ')) for i in range(a): b = int(input('Введите элемент массива: ')) X.append(b) print('Ваш массив: ',X) X_2 = [] m = 0 for j in range(a): if X[j] > m: m = X[j] if X[j] > 0: X_2.append(X[j]) print('Новый массив, состоящий из положительных элементов:', X_2) print ('Наибольший элемент массива:', m)

Проверка:

Введите длину предполагаемого массива: 5 Введите элемент массива: 5 Введите элемент массива: 4 Введите элемент массива: -2 Введите элемент массива: 6 Введите элемент массива: -2 Ваш массив: [5, 4, -2, 6, -2] Новый массив, состоящий из положительных элементов:[5, 4, 6] Наибольший элемент массива:6

 

Задача: Напишите программу нахождения минимального элемента главной диагонали массива K(n,n) заполненного случайными числами.

Реализация на Python:

import random n = int(input('Размерность массива: ')) mas = [] for i in range(n): mas.append([]) for j in range(n): mas[i].append(random.randint(1,100)) print ('Массив из случайный чисел от 1 до 100:',mas) m = 100 for k in range(n): if m > mas[k][k]: m = mas[k][k] print ('Минимальный элемент массива: ',m)

Проверка:

Размерность массива: 3 Массив из случайный чисел от 1 до 100: [[25, 96, 62], [95, 43, 5], [57, 18, 74]] Максимальный элемент массива: 25

 

Структуры данных: списки. (Учебник §18)

Односвязные списки

1. Добавление элемента в голову списка:

 

Реализация программы на языке Python:

Проверка

>>> >>>

list = [] list.append(2)

>>> [2]

list

>>> >>> >>> >>>

list0 = [] list0.append(2) list0.append([2,3,4]) list0.append(‘abc’)

>>> list0 [2,[2,3,4],’abc’]

>>> >>> >>>

list1 = [] list1.extend([2]) list1.extend([2,3,4])

>>> [2,

list1 2, 3,

 4]

>>> >>>

list2 = [0,0,0,0] list2.insert(3,5)

>>> [0,

list2 0, 0,

 5,

 0]

>>> list3 = [0,0,0,0] >>> list3.insert(-3,6)

>>> [0,

list3 6, 0,

 0,

 0]

 

Замечание: Функция list.append(a)добавляет в конец списка list элемент a, который может быть и числом, и строкой, и даже другим списком. Функция list.extend(a)добавляет в конец списка list элемент a, причем в случае, когда a список - добавляется не список как элемент, а все элементы этого списка.

Функция list.insert(i, b)добавляет элемент b перед i-ым элементом изначального списка list. Важно помнить, что индексация списка слева направо начинается с 0, а справа налево с -1.

2. Поиск элемента в списке:

 

>>> 3 in [1,2,3,4,5] True >>> 0 in [1,2,3,4,5] False

>>> list = [1,2,3,4,5] >>> list.index(5) 4

>>> list = [1,2,3,4,5,0,5] >>> list.index(5) 4

 

Замечание: Функция list.index(a)выдает первый встретившийся элементa в списке, начиная с начала списка.

3. Удаление элемента из списка:

 

 

 

Замечание: Функция list.pop(i) удаляет элемент с i-ым индексом и выдает удаляемый элемент пользователю.

Функция list.remove(i) удаляет элемент с i-ым индексом и НЕ выдает удаляемый элемент пользователю.

Двусвязные списки

В языке Python нет стандартного объекта struct, как в языке Си. Но этот объект можно легко реализовать с помощью классов.

Для определения связного списка потребуется класс - ListItem, в конструкторе которого будут определяться ссылки на предыдущий и следующий элементы списка.

class ListItem:init (self, data=0): self.prev = None self.next = None self.data = data

Определим функцию, выводящую все значения списка:

def write(self):

#Поиск начала списка

while not self.prev == None: self=self.prev

#Выводnot self == None: print(self.data) self = self.next

Далее программу можно будет дополнить функциями, требующимися для решения задач. Например, добавление элемента в голову (начало) списка, поиск элемента в списке, удаление элемента списка.

1.       Добавление элемента в голову списка:

 

 

2.       Поиск элемента в списке:

 

 

 

3.       Удаление элемента из списка по индексу:

 

 

Задача: Напишите программу, в которой предлагается вводить учащихся различных классов, посещающих футбольную секцию. Требуется упорядочить список по возрастанию классов. Распечатать список фамилий и классов.

 

 

 

 

Замечание: Для удобства пользователя создадим поля для выбора операции, при выполнении каждой из которой будут выполняться соответствующие им строки программы. Заключим поля для выбора в цикл, который будет появляться после каждого введения учащегося, пока пользователь не введет

«q», т.е. выход: True:("+ - Добавить учащегося\nl - Вывести список учащихся\ns

Вывести отсортированный список учащихся\nq - Выход")

\n выступает в роли перехода на новую строку.

Структуры данных: деревья. (Учебник §18)

Для определения двоичного дерева потребуется класс - TreeItem, в конструкторе которого будут определяться ссылки на корневой элемент, а также на его левую и правую ветвь.

class TreeItem:init (self, data = None): self.right = None.left = None self.data = data

Определим корневой узел дерева со значением 200 с первым разветвлением на узлы 50 и 250:

#Корневой элемент root = TreeItem(200)

#Список, содержащий начальные левый и правый узлы дерева tree = [TreeItem(50), TreeItem(250)]

root.left = tree[0] root.right = tree[1]

1.       Вставка элемента в дерево:


2.       Поиск элемента в дереве:

 

 

Замечание: Перед тем, как использовать вышеприведенный программные коды, не забудьте создать переменную inp, содержащую в себе введенное число пользователя с клавиатуры.

Решение:

Для начала обозначим класс Book и в нем определим конструкцию данных о каждой книге, т.е. название, автор, количество, цена, номер зала, номер шкафа и номер полки.

class Book:init (self, title = '', author = '', count = 0, price = 0, place1 = 0, place2 = 0, place3 = 0):.title = str(title) #название self.author = str(author) #автор self.count = int(count) #количество self.price = float(price) #цена self.place1 = int(place1) #зал self.place2 = int(place2) #шкаф self.place3 = int(place3) #полка

Для вывода всех книг определим функцию itemArrayPrint, зависящую от переменных pos - «позиция», store - «книжный магазин» (объявим ее позже, после определения всех функций).

def itemArrayPrint(pos, store):

#Операторы подстановки. %s - строка, %d - десятичное число, %f

число с плавающей точкой. Далее в скобках указаны переменные для подстановки

print("|%s|%s|%d|%0.3f|%d|%d|%d|" % (store[pos].title, store[pos].author, store[pos].count, store[pos].price, store[pos].place1, store[pos].place2, store[pos].place3))

Для поиска определенной книги определим функцию findRecord, который заключается в циклическом переборе каждой записи в данном случае по автору.

def findRecord(author, startSearchPos, store): current = startSearchPoscurrent < len(store) and store[current].author != author: += 1 return current

Для вывода книги по автору определим функцию printAuthorBooks достаточно несколько раз вызвать функцию findRecord, меня стартовую позицию и, в конечном счете, вывести на печать книгу нужного автора.

def printAuthorBooks(author, store): pos = findRecord(author, 0, store) while pos < len(store):(pos, store) print(pos)= findRecord(author, pos + 1, store)

Для удаления записи из массива на языке C++ потребовалась бы перестановка всех записей от удаляемой к началу, однако в Python списки и, значит, перемещать записи нет необходимости. Это происходит автоматическиdeleteArrayItem(pos, store): try: store[pos]

#если не вышло удалить, значит элемента нет except IndexError:

print("Нет такой книги")

Объявляем «книжный магазин» пустым списком и как было ранее, наладим связь с пользователем, запустив цикл while True, где и будем ссылаться на функции, определенные ранее:

store = [] while True:

#Ввод команды пользователем

inp = input('d - удалить книгу\na - добавить книгу\ns - поиск книги\np - вывод всех книг\nq - выход\n')

#Удаление книги по номеру if inp == 'd':

deleteArrayItem(int(input('Введите номер книги')), store)

#Добавление книги elif inp=='a':

store.append(Book(input("Название: "), input("Автор: "), input("Количество: "), input("Цена: "), input("Зал: "),

input("Шкаф: "), input("Полка: "))) saveArray('test.txt', store) else:

print("Не добавлено, количество книг 1000")

#Поиск и вывод книги по автору

elif inp == 's':(input("Автор: "),store)

#Печать всех записей elif inp == 'p':

#Проверка, не пуст ли список if len(store):

for i in range(len(store)): itemArrayPrint(i, store):

print("Список пуст")

#Выход из диалогового окна elif inp=='q':

break

Работа с файлами

Каждый раз вводить данные заново - не самый лучший способ. Если нужно сохранить данные на долгий срок, используются файлы.

Чтобы можно было сохранять или загружать файлы в программе, подключим модуль pickle. Для этого впишем «import pickle» в начало программного кода.

В коде программы, где объявлялись функции поиска, удаления записей книг, добавим функции saveArray (сохранения) и loadArray (загрузки) файла.

Предусмотрим, что файла может не оказаться. В таком случае программа создаст собственный пустой текстовый файл с названием test.txt.

def saveArray(fname, store):open(fname, "wb") as fout: for obj in store:

#встроенная функция записи в подключенном модуле pickle.dump(obj, fout)

def loadArray(fname, store): try:open(fname, "rb") as fin: while True::

#встроенная функция загрузки в подключенном модуле

a = pickle.load(fin) store.append(a) EOFError:

return store

#На случай, если файла нет, создадим собственный документ с названием test.txt

except FileNotFoundError: return []= []

#Загрузка файла loadArray("test.txt", store)

Типовые алгоритмы. (Учебник §19)

1.       Поиск в отсортированной последовательности:

 

 

2.       Сортировка пузырьком

 


Улучшим алгоритм с помощью отсутствия перестановок:

 

3.       Алгоритм быстрой сортировки

 

 

4.       Бинарный поиск

 

 

Бинарное дерево поиска

Сначала определим класс дерева - TreeItem, встречаемый ранее и добавим поле key (значение узла).

class TreeItem:init (self, key = None): self.right = None

self.left = None self.key = key

Зададим начальные значения узлов.= TreeItem(200) root.left=TreeItem(42) root.right=TreeItem(420)

Опишем функцию insertItem добавления элемента в дерево. Это сделать можно, только найдя его место. Для этого нам потребуется функция поиска элемента в дереве. Для удобства добавим комментарий о том, справа или слева от какого узла помещен новый элемент.

def insertItem(inp): global root root: = root

#Поиск нужного места и вставка нового элемента

while not curItem == None and not curItem.key == inp: if curItem.key > inp:curItem.left == None or curItem.left.key ==

None: "+str(curItem.key))("Помещаем слева от.left = TreeItem(inp) break:

#Переход влево= curItem.left

== None:curItem.right == None:("Помещаем справа от " + str(curItem.key)) curItem.right = TreeItem(inp) else:curItem.right == None or curItem.right.key("Помещаем справа от " +

str(curItem.key))

else:.right = TreeItem(inp) break:

#Переход вправо= curItem.right

root = TreeItem(inp)

 Хэширование

Напишем программу, которая по значению ключа рассчитает число

«хэш». Число рассчитывается так, чтобы значения поискового ключа распределились среди всех возможных значений хэша равномерно.

#описание элемента дерева

numHashLen=577 #количество возможных хэшей

from sys import argv #для ручного задания имени файла class PHashNode:

def init (self, val = []): self.val = val hash_(s):#хэш-функция global numHashLen= 0i in s:= h * 61 + ord(i) return h%numHashLen

#создание списков= [0 for _ in range(numHashLen)]= [PHashNode() for _ in range(numHashLen)] try:#попытка получить имя файла из первого аргумента= argv[1] except IndexError:= 'text1.txt' open(fname, 'r') as f:#чтение из файла и добавление в список слов

for line in f:k in line.split(): searchArr[hash_(k)].val.append(k) countArr[hash_(k)] += 1('\n'.join([str(i)+' '+str(countArr[i]) for i in range(len(countArr))]))#вывод количества слов для каждого хэша

Хэш-функция для каждого символа умножает текущее значение (переменная h) хэша, которое изначально для каждой строки равно нулю, на 61 и прибавляет числовой код символа (функция ord). К примеру, числовое представление "а" - 97, "€" - 8364. Функция возвращает остаток деления итогового значения на переменную numHashLen, что ограничивает число возможных значений.

Не обязательно писать по одному слову в строке, в качестве разделителя можно использовать как переносы строк, так и пробелы.

Так для слова "лосось" действия будут следующими:

ord("л") = 1083= 1083("о") = 1086= 67149("с") = 1089= 4097178("о") = 1086= 249928944("с") = 1089= 15245666673("ь") = 1100 = 929985668153

Функция вернёт остаток от деления 929985668153 на 577, который равен 441.

2.4 Результаты апробации в старшей школе

Апробация разработанной методики проводилась на базе школы ГБОУ СОШ №1253 (на педагогической практике) с учениками 10 класса и была проанализирована на контрольной и экспериментальной группах обучающихся (всего 52 человека), показав положительный результат.

"Результаты изменения уровня знаний в контрольной и экспериментальной группах до и после апробации"

 

Уровень знаний

КГ1, (чел.)

ЭГ1, (чел.)

КГ2, (чел.)

ЭГ2, (чел.)

Низкий

9

6

11

2

Средний

11

13

10

13

Высокий

8

5

7

9

 

КГ1 - Контрольная группа до начала эксперимента.

КГ2 - Контрольная группа после окончания эксперимента. ЭГ1 - Экспериментальная группа до начала эксперимента.

ЭГ2 - Экспериментальная группа после окончания эксперимента.

"Гистограмма контрольной и экспериментальной групп до начала апробации"

 



 "Гистограмма контрольной и экспериментальных групп после окончания апробации"

 

 

Была выдвинута гипотеза "характеристики контрольной и экспериментальной групп совпадают с уровнем значимости 0,05" и применён критерий однородности χ2 [19].

 

"Эмпирические значения критерия χ2"


КГ1

ЭГ1

КГ2

ЭГ2

КГ1

0

1,2

0,3

4,4

ЭГ1

1,2

0

1,9

3,1

КГ2

0,3

1,9

0

6,6

ЭГ2

4,4

3,1

6,6

0

 

Критическое значение равно 5,99, а эмпирическое − 6,6, т.е. χ2крит < χ2эмп. Значит, достоверность различий характеристик сравниваемых выборок составляет 95%, что показывает положительный эффект применения экспериментальной методики обучения.

Таким образом, в результате исследования были доказаны доступность и целесообразность разработанной методики изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera.

Заключение

В результате проведенного анализа учебно-методической литературы была выявлена тенденция все возрастающего значения изучения языков программирования в школе, а именно, на разных этапах развития курса информатики происходил переход на современные актуальные языки программирования.

В настоящее время к актуальным языкам программирования доступным для изучения школьниками и позволяющим решать профессиональные задачи специалистам ИТ-сферы можно отнести язык Python.

Современные образовательные технологии, в числе которых дистанционная форма обучения и "перевернутый класс" позволяют идти в ногу с потребностями молодого поколения.

В предлагаемой нами методике изучения языка программирования Python с использованием дистанционных курсов Courserа. реализованы все компоненты методической системы обучения.

Таким образом, можно утверждать, что задачи поставленные в выпускной квалификационной работе успешно решены.

Список литературы

Источники

1.   Приказ Минобрнауки России от 6 октября 2009 года № 373 "Об утверждении и введении в действие федерального государственного образовательного стандарта начального общего образования": [Электронный ресурс] - Режим доступа: http://минобрнауки.рф/документы/922

2.       Приказ Минобрнауки России от 17 декабря 2010 года № 1897 "Об утверждении федерального государственного образовательного стандарта основного общего образования": [Электронный ресурс] - Режим доступа:

 h tt p:/ / www.мин обр науки .рф /до кумен ты/9 38

3.   Приказ Минобрнауки России от 17 мая 2012 года №413 «Об утверждении федерального государственного образовательного стандарта среднего общего образования": [Электронный ресурс] - Режим доступа:

 h tt p:/ / мин об рн ауки .р ф/ до кумен ты/2 365

Литература

4.   Богданова Д. Перевернутый урок. Как объяснить тему так, чтобы все поняли, и чтобы никому не было скучно? / Диана Богданова / Дети в информационном обществе. - 2012. - №11.

5.       Гейн А.Г., Житомирский В.Г., Линецкий Е.В., Сапир М.В., Шолохович В.Ф.

«Основы информатики и вычислительной техники»: пробный учебник для 10-11 классов средней школы. // М.: Просвещение. - 1991.

6.   Каймин В.А., Щеголев А.Г., Ерохина Е.А., Федюшин Д.П. «Основы информатики и вычислительной техники»: пробное учебное пособие для 10- 11 классов средней школы. // М.: Просвещение. - 1989.

7.       Калинин И. А., Самылкина Н. Н. Информатика. УМК для старшей школы: 10 - 11 классы (ФГОС). Методическое пособие для учителя. Углублённый уровень // М.: БИНОМ. Лаборатория знаний. - 2013.

8.       Калинин И. А., Самылкина Н. Н., Информатика. Программа для старшей школы: 10-11 класс. Углубленный уровень. // М.: БИНОМ. Лаборатория знаний. - 2013.

9.       Калинин И. А., Самылкина Н. Н., Информатика. Углублённый уровень: учебник для 10 класса. // М.: БИНОМ. Лаборатория знаний. - 2013.

10.  Калинин И. А., Самылкина Н. Н., Информатика. Углублённый уровень: учебник для 11 класса. // М.: БИНОМ. Лаборатория знаний. - 2013.

11.     Калинин И. А., Самылкина Н. Н., Бочаров П. В. Информатика. Углубленный уровень: задачник-практикум для 10-11 классов // М.: БИНОМ. Лаборатория знаний. - 2014

12.     Колин К. К. Информатика как наука: история и перспективы развития. // Открытое образование. - 2011. - С. 77.

13.     Колин К. К. О структуре научных исследований по комплексной проблеме

«Информатика» // Сб. н. тр. «Социальная информатика». М.: ВКШ при ЦК ВЛКСМ. - 1990. С. 19-33

14.  Курнишенко А.Г., Лебедев Г.В., Сворень Р.А. «Основы информатики и вычислительной техники»: пробный учебник для средних учебных заведений. // М.: Просвещение. - 1990.

15.     Лебедева М.Б. Массовые открытые онлайн-курсы как тенденция развития образования. // Человек и образование. - 2015. - №. 1 (42).

.Лутц М. Изучаем Python. // СПб.: Символ-Плюс. - 2011.

17.  Лысенкова С. Н. Методом опережающего обучения. // М.: Просвещение. - 1988. - Т. 125.

18.     Монахов В. М. Тридцать лет спустя. // Информатика и образование. - 2015.

- №. 7.

19.  Новиков Д. А. Статистические методы в педагогических исследованиях (типовые случаи) // М.: Мз-Пресс. - 2004. - С.67

20.     Поляков К. Ю., Еремин Е. А. Информатика. Углубленный уровень: учебник для 10 класса: в 2 ч., ч. 2 // М.: БИНОМ. Лаборатория знаний. - 2013.

21.     Поляков К. Ю., Еремин Е. А. Информатика. Углубленный уровень: учебник для 11 класса: в 2 ч., ч. 2 // М.: БИНОМ. Лаборатория знаний. - 2013.

22.     Семакин И.Г., Шейна Т.Ю., Шестакова Л.В. Информатика. Углубленный уровень: учебник для 10 класса: в 2 ч., ч.1 // М.: БИНОМ. Лаборатория знаний. - 2014.

23.     Семакин И.Г., Шейна Т.Ю., Шестакова Л.В. Информатика. Углубленный уровень: учебник для 11 класса: в 2 ч., ч.1 // М.: БИНОМ. Лаборатория знаний. - 2014.

24.     Семакин И.Г., Хеннер Е.К. Информатика в профильной школе. // Информатика и образование. - 2010. - №10

25.     Семакин И.Г. Эволюция школьной информатики. // Информатика и образование. - 2011. - №5.

26.     Ткач С. С. Методические аспекты изучения раздела «Алгоритмизация и программирование» в современном школьном курсе информатики. Электронные ресурсы

27.     Бизнес модели бесплатного обучения на Corsera, edX и Udacity [Электронный ресурс]. - Режим доступа: https://habrahabr.ru/sandbox/50831/

28.     Единая коллекция цифровых образовательных ресурсов [Электронный ресурс]. - Режим доступа: http://school-collection.edu.ru/

29.     Ершов А.П., Монахов В.М., Бешенков С.А. , Гольц Я.Э., Кузнецов А. А., Кузнецов Э. И., Лапчик М.П., Смекалин Д. О. «Основы информатики и вычислительной техники»: пробное учебное пособие для средних учебных заведении [Электронный ресурс]. - Режим доступа: http://cip.iis.nsk.su/files/course/oivt1p.pdf. -М.: Просвещение. - 1985.

30.     Ершов А.П. Программирование - вторая грамотность. // Архив академика А.П. Ершова [Электронный ресурс]. - Режим доступа: http://ershov.iis.nsk.su/russian/second_literacy/article

31.   Лебедева Т.Н. Становление курса информатики в школьном курсе информатики в школьном образовании в период с 1950 г. до 1990 г.

[Электронный ресурс]. - Режим доступа:

 http://cyberleninka.ru/article/n/stanovlenie-kursa-informatiki-v-shkolnom- obrazovanii-v-period-s-1950-g-do-1990-g

32.  О проекте Coursera. [Электронный ресурс] - Режим доступа: https://www.coursera.org/about/

33.     Перевернутый класс средство от скуки. [Электронный ресурс] - Режим доступа: https://newtonew.com/discussions/flipped-classroom-in-russia

34.     Семь вещей, которые необходимо знать о перевернутом обучении. [Электронный ресурс]. - Режим доступа: http://www.ed-today.ru/poleznye- stati/37-7-veshchej-kotorye-neobkhodimo-znat-o-perevjornutom-obuchenii

.Федеральный центр информационно-образовательных ресурсов [Электронный ресурс]. - Режим доступа: http://fcior.edu.ru/

36.Campbell J., Gries P. Learn to Program: The Fundamentals [Электронный ресурс]. - Режим доступа: https://class.coursera.org/programming1-002/lecture

Похожие работы на - Методика изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!