Разбиение задачи на подзадачи. Составление алгоритмов и программ с использованием ветвлений, циклов и вспомогательных алгоритмов
Цели и задачи
- Цель по SMART: к концу урока научиться разбивать практическую задачу на подзадачи и составлять программу на Python, используя условный оператор, цикл и вспомогательную функцию, а также объяснять назначение каждого блока программы.
- Сформировать представление о декомпозиции как способе упрощения сложной задачи и подготовки решения к заданиям ОГЭ по информатике.
- Научиться выделять входные данные, результат и повторяющиеся действия, выбирать между ветвлением и циклом.
- Развивать умение читать, анализировать, исправлять и тестировать программный код в парах.
- Формировать ответственное отношение к цифровым инструментам, точности алгоритмического мышления и взаимной проверке решений.
Планируемые результаты
Личностные
- Осознают значение алгоритмического мышления для учебной и будущей профессиональной деятельности.
- Проявляют готовность проверять результат программы и спокойно исправлять ошибки, рассматривая ошибку как часть обучения.
- Повышают уверенность при выполнении практических заданий, связанных с форматом ОГЭ.
- Соблюдают правила безопасной и ответственной работы за компьютером.
Метапредметные
- Разбивают сложную задачу на связанные подзадачи и устанавливают порядок их выполнения.
- Читают программный текст, выделяют условие, цикл, функцию, входные данные и результат.
- Планируют решение, осуществляют самопроверку по тестовым данным и корректируют программу.
- Аргументируют выбор алгоритмической конструкции и взаимодействуют при парной работе.
Предметные
- Знают назначение ветвлений, циклов и вспомогательных алгоритмов в программах.
- Умеют оформлять функцию с параметром и вызывать её из основной части программы.
- Умеют применять условный оператор и цикл для обработки нескольких значений.
- Умеют тестировать программу на обычных и граничных данных, находить логические ошибки.
Универсальные учебные действия (УУД)
Личностные УУД
- Определяют личную значимость умения разбивать сложную задачу на понятные шаги.
- Осознают связь информатики с профессиями программиста, инженера, аналитика и исследователя.
- Проявляют самостоятельность и настойчивость при отладке программы.
- Оценивают собственную готовность к заданиям алгоритмического типа на ОГЭ.
Регулятивные УУД
- Формулируют цель решения и составляют план действий до написания кода.
- Распределяют время между анализом условия, программированием и тестированием.
- Сверяют программу с контрольными примерами и находят место ошибки.
- Оценивают результат по заданным критериям и вносят необходимые исправления.
Познавательные УУД
- Выделяют существенные данные и результат задачи.
- Сравнивают возможности ветвления, цикла и функции.
- Преобразуют словесное описание в блок-схему и программный код.
- Проверяют гипотезу о работе алгоритма на конкретных значениях.
Коммуникативные УУД
- Распределяют роли в паре: разработчик и тестировщик.
- Задают уточняющие вопросы о назначении строк программы.
- Аргументированно объясняют партнёру выбор алгоритмической конструкции.
- Корректно предлагают исправления и принимают обратную связь.
Подготовка учителя к уроку
- Подготовить компьютеры с установленной средой Python или доступом к школьному онлайн-интерпретатору; проверить запуск программы и ввод данных.
- Создать презентацию с проблемной задачей, схемой декомпозиции и коротким примером программы.
- Распечатать карточки трёх уровней сложности — по одной на каждого ученика, всего по числу учащихся класса.
- Распечатать лист самооценки и чек-лист тестирования программы — по одному на ученика.
- Подготовить карточки ролей «разработчик» и «тестировщик» — по одной паре на каждую парту.
- Вывести на доску памятку: «Входные данные — подзадачи — алгоритм — код — тестирование».
- Подготовить файл-заготовку с функцией и основным циклом, а также файл с намеренной логической ошибкой для совместного анализа.
- Подготовить таймер на 5 минут для самостоятельной работы и экран с критериями оценивания.
- Проверить рассадку парами и возможность быстро показать код на экране учителя.
Ход урока
Этап 1. Организационный момент и мотивация (3 мин)
Цель этапа: включить учащихся в деятельность и показать практическую ценность разбиения сложной задачи.
Время | Действие учителя | Действие учеников |
|---|---|---|
1 мин | Учитель приветствует класс и проверяет готовность: "Здравствуйте, ребята. Сегодня мы будем не просто писать код, а действовать как разработчики. На столе должны быть тетрадь, ручка и готовый к работе компьютер. Проверьте, что вы вошли в среду программирования и можете запустить пустую программу." | Проверяют компьютер, открывают среду программирования, записывают дату и тему урока. |
2 мин | Учитель показывает на экране задачу: "Нужно обработать результаты нескольких учеников: определить, сдал ли каждый тест, посчитать число успешных результатов и вывести итог. Как вы думаете, можно ли решить такую задачу одной длинной последовательностью команд? Какие части повторяются?" Учитель называет приём "Проблемный вопрос" и фиксирует ответы на доске. | Формулируют предположения: "Задачу нужно разделить на части", "для каждого ученика повторяется проверка", "итог можно посчитать циклом". |
Завершение этапа: учитель подводит итог: "Мы увидели, что сложную задачу удобнее разделить на небольшие действия. Сегодня научимся превращать такое разбиение в программу с функцией, ветвлением и циклом, а затем проверять её как в заданиях практического типа ОГЭ."
Этап 2. Актуализация знаний (5 мин)
Цель этапа: восстановить знания о базовых конструкциях Python и выявить затруднение при выборе конструкции.
Время | Действие учителя | Действие учеников |
|---|---|---|
2 мин | Учитель выводит на экран три фрагмента: условие, цикл и функцию. "Работаем приёмом «Подумай — обсуди в паре — поделись». Сначала молча определите назначение каждого фрагмента, затем обсудите с соседом. Почему в первом случае нужна проверка, а во втором — повторение?" | Индивидуально определяют конструкции, затем обсуждают в парах и формулируют: "if выбирает действие, for повторяет действие, def сохраняет отдельный алгоритм". |
3 мин | Учитель предлагает мини-тест: "Поднимите карточку 1, если нужен выбор, карточку 2, если повторение, карточку 3, если отдельная подзадача. Ситуации: проверить положительность числа; вывести числа от 1 до 10; вычислить стоимость покупки по известной цене и количеству." После каждого ответа просит объяснить выбор. | Поднимают карточки и объясняют: "Проверка положительности — ветвление; вывод чисел — цикл; расчёт стоимости можно оформить функцией". |
Завершение этапа: учитель подводит итог: "Мы вспомнили назначение трёх конструкций. Теперь проверим, как выбрать их не по отдельности, а в одной сложной задаче."
Этап 3. Постановка проблемы и целеполагание (4 мин)
Цель этапа: сформулировать способ решения комплексной задачи и критерии успешной программы.
Время | Действие учителя | Действие учеников |
|---|---|---|
2 мин | Учитель раздаёт условие: "Даны результаты пяти попыток в виде целых чисел. Для каждой попытки нужно определить: результат успешен, если он не меньше 60; затем посчитать количество успешных попыток. Подумайте, какие подзадачи здесь можно выделить. Не пишите код сразу — сначала составьте план." | В парах выделяют подзадачи: принять данные, проверить один результат, повторить проверку для пяти значений, увеличить счётчик, вывести ответ. |
2 мин | Учитель спрашивает: "Какая подзадача будет повторяться? Как оформить её отдельно? Где потребуется ветвление? Что проверим после запуска?" Учитель фиксирует на доске план: функция проверки, цикл обработки, итоговый вывод. | Предлагают цель урока и критерии: программа запускается без ошибок, содержит функцию, условие и цикл, даёт правильный ответ на контрольных данных. |
Завершение этапа: учитель подводит итог: "План решения уже похож на архитектуру программы. Теперь реализуем его по шагам и проверим, действительно ли декомпозиция делает код понятнее."
Посмотрите план целиком
Зарегистрируйтесь — и откройте план урока по этой теме полностью: цели, ход урока и рефлексия по ФГОС.
Этап 4. Открытие нового знания и межпредметная связь (9 мин)
Цель этапа: построить программу из вспомогательной функции, ветвления и цикла, связав алгоритм с обработкой результатов в математике и естественных науках.
Время | Действие учителя | Действие учеников |
|---|---|---|
3 мин | Учитель показывает на экране схему: «проверить один результат → повторить для пяти результатов → посчитать успешные». "В математике и естественных науках мы часто обрабатываем серию измерений. Компьютер выполняет одинаковую операцию много раз, но правило для одного измерения лучше оформить отдельно. Запишите функцию: `def passed(score):` затем условие `if score >= 60:` и возврат логического результата." | Переносят схему в тетрадь, объясняют: "Функция получает балл и возвращает истину или ложь". Определяют, что 60 является границей. |
3 мин | Учитель постепенно набирает код: `def passed(score):` затем ` return score >= 60`. "Обратите внимание: условие можно записать кратко, потому что сравнение само даёт логическое значение. Теперь применим функцию к пяти значениям. На экране будут значения 55, 60, 72, 48, 90. Сколько успешных результатов ожидаем?" | Пошагово прогнозируют результаты: ложь, истина, истина, ложь, истина; называют ожидаемый итог: 3. |
3 мин | Учитель добавляет цикл: `success = 0`; `for score in [55, 60, 72, 48, 90]:`; ` if passed(score):`; ` success += 1`; `print(success)`. "Почему здесь нужны и функция, и цикл? Что произойдёт, если убрать условие внутри цикла?" Учитель демонстрирует запуск и обращает внимание на отступы. | Записывают код, находят роль каждой части: функция проверяет один результат, цикл перебирает все значения, ветвление увеличивает счётчик только при успехе. Проверяют прогноз: на экране появляется 3. |
Запись в тетрадях
- Декомпозиция — разбиение сложной задачи на самостоятельные подзадачи.
- Вспомогательный алгоритм в Python оформляется функцией `def имя(параметр):`.
- Цикл повторяет действия для нескольких значений, а ветвление выбирает действие по условию.
- Алгоритм проверки: входные данные → подзадачи → код → тестирование.
Завершение этапа: учитель подводит итог: "Мы собрали программу из трёх уровней: функция решает одну маленькую задачу, цикл повторяет обработку, ветвление меняет действие в зависимости от результата. Теперь закрепим этот способ на похожем задании и объясним код друг другу."
Этап 5. Первичное закрепление в парах (7 мин)
Цель этапа: применить алгоритм декомпозиции при составлении и объяснении программы.
Время | Действие учителя | Действие учеников |
|---|---|---|
2 мин | Учитель раздаёт карточки и объясняет роли: "В каждой паре один ученик — разработчик, второй — тестировщик. Разработчик составляет функцию `is_even(number)`, которая определяет, является ли число чётным. Затем в цикле нужно обработать числа от 1 до 10 и посчитать количество чётных. Тестировщик проверяет план и задаёт вопросы." | Разработчик записывает план и код, тестировщик проверяет наличие функции, ветвления или логического условия и цикла. |
3 мин | Учитель предлагает подсказку: "Можно использовать проверку `number % 2 == 0`. Не копируйте код молча: проговаривайте назначение каждой строки. Если программа не работает, сначала проверьте двоеточие и отступы, затем значения переменных." | Пары создают программу, ожидают результат 5, проговаривают: "Остаток от деления на 2 равен нулю — число чётное". |
2 мин | Учитель организует взаимную проверку: "Поменяйтесь ролями и протестируйте программу партнёра на числах 0, 1, 2 и 11. Запишите две сильные стороны и одно пожелание по приёму «Две звезды и пожелание»." | Запускают программу на граничных и обычных данных, фиксируют обратную связь: например, "функция названа понятно", "цикл выбран верно", "нужно добавить пояснение результата". |
Завершение этапа: учитель подводит итог: "Вы не только написали программу, но и проверили её чужими глазами. Сейчас каждый самостоятельно выполнит задание, чтобы увидеть, что осталось понятным без подсказки пары."
Этап 6. Самостоятельная работа с использованием ИКТ (10 мин)
Цель этапа: самостоятельно решить задачу на разбиение, программирование и тестирование алгоритма.
Время | Действие учителя | Действие учеников |
|---|---|---|
2 мин | Учитель выдаёт карточки уровней: "Базовый вариант: написать функцию `is_positive(x)`, которая определяет, является ли число положительным, и обработать пять заданных чисел. Средний вариант: дополнительно посчитать количество положительных чисел. Повышенный вариант: оформить функцию `count_positive(values)` и использовать её для списка произвольной длины. Выберите уровень, который позволит вам работать уверенно." | Выбирают уровень, записывают входные данные и результат, составляют план до набора кода. |
5 мин | Учитель напоминает: "Работайте в среде Python. После написания программы обязательно запустите её минимум на трёх наборах: обычном, где есть положительные и отрицательные числа, и граничном — с нулём. На экране рядом с кодом зафиксируйте ожидаемый результат." | Пишут и запускают программу, тестируют её на разных данных, сравнивают фактический и ожидаемый результаты. |
3 мин | Учитель предлагает самопроверку по чек-листу: "Отметьте, есть ли в программе функция, понятные имена, цикл или обработка списка, корректное условие, тестирование нуля и отсутствие лишних команд. Если результат неверен, найдите конкретную строку и исправьте её." | Заполняют чек-лист, исправляют ошибки, сохраняют файл с программой и показывают результат учителю или соседу. |
Эталон решения
Для среднего уровня возможен вариант: `def is_positive(x):` затем ` return x > 0`; далее `values = [-3, 0, 5, 7, -1]`, `count = 0`, цикл `for value in values:`, условие `if is_positive(value):`, увеличение `count += 1` и вывод `print(count)`. Положительными являются 5 и 7, поэтому ожидаемый результат равен 2. Ноль не считается положительным, так как условие использует знак `>`.
Завершение этапа: учитель подводит итог: "Самостоятельная программа должна не просто запускаться, а давать проверяемый результат. Мы увидели, что граничные значения помогают обнаружить логические ошибки. Осталось оценить, какие элементы алгоритма вы действительно освоили и что нужно повторить."
Этап 7. Рефлексия и домашнее задание (7 мин)
Цель этапа: осмыслить способ решения, снизить тревожность перед заданиями ОГЭ и определить дальнейшие шаги.
Время | Действие учителя | Действие учеников |
|---|---|---|
3 мин | Учитель проводит рефлексию «Светофор»: "Покажите зелёную карточку, если можете объяснить, зачем нужна функция; жёлтую — если нужна тренировка; красную — если пока трудно. Затем завершите фразы: «Я научился...», «Мне нужно повторить...», «При тестировании я проверяю...»." | Показывают карточки, устно или письменно завершают фразы: "Я научился разбивать задачу", "Мне нужно повторить отступы", "Я проверяю граничные значения". |
2 мин | Учитель возвращается к проблемному вопросу: "Почему не стоит писать всю программу одной длинной последовательностью? Как декомпозиция помогает на ОГЭ и в реальной разработке?" Учитель принимает 2–3 ответа и уточняет формулировки. | Отвечают: "Подзадачи легче проверить и исправить", "функцию можно использовать повторно", "структурированный код проще читать". |
2 мин | Учитель сообщает домашнее задание и критерии: "Выберите один уровень. В каждом варианте обязательно запишите план подзадач и приведите два теста, включая граничный. Ошибки не скрываем: указываем, что исправили и почему." | Записывают домашнее задание, задают уточняющие вопросы, отмечают выбранный уровень в дневнике. |
Завершение этапа: учитель подводит итог: "Сегодня вы прошли полный путь разработчика: поняли условие, разделили его на подзадачи, написали код и проверили результат. Такой порядок снижает количество ошибок и помогает уверенно решать алгоритмические задания. На следующем уроке продолжим анализировать программы и научимся находить ошибки в более сложных структурах данных."
Критерии оценивания практической работы
- «5» — программа запускается без ошибок, содержит корректное разбиение на подзадачи, функцию и необходимую алгоритмическую конструкцию, правильно работает на обычных и граничных тестах; ученик может объяснить назначение основных строк.
- «4» — программа в основном верна, но допущена одна небольшая ошибка в оформлении или объяснении; после подсказки ученик самостоятельно исправляет её и получает правильный результат.
- «3» — выполнена базовая часть задания, однако есть ошибки в условии, цикле или тестировании; ученик понимает общий план и исправляет программу с существенной помощью учителя.
- Ниже базового уровня — программа не запускается или не отражает план решения, отсутствуют проверка результата и объяснение выбора конструкций.
Рефлексия
Вопрос для ученика | Цель вопроса |
|---|---|
Что нового вы узнали о разбиении задачи на подзадачи? | Проверка осознания принципа декомпозиции. |
Какую роль в вашей программе выполняет функция? | Выявление понимания назначения вспомогательного алгоритма. |
На каком тесте программа могла бы ошибиться и почему? | Формирование навыка анализа граничных данных и логики условия. |
Что помогло вам исправить ошибку: план, тест или обсуждение с партнёром? | Определение эффективных стратегий самоконтроля и сотрудничества. |
Завершающее слово учителя
"Сегодня мы научились превращать большую задачу в последовательность понятных подзадач. Функция помогает оформить отдельное действие, цикл — повторить его, а ветвление — выбрать результат по условию. Самая частая ошибка — забыть про граничные значения или перепутать знак сравнения, поэтому тестирование обязательно. Вы уже используете алгоритм, который пригодится и в практических заданиях ОГЭ, и в реальных программах. На следующем уроке мы усложним обработку данных и продолжим отладку кода."
Домашнее задание
Уровень | Что задать | Зачем |
|---|---|---|
Базовый (обязательный) | Составить программу с функцией `is_even(x)`, которая определяет чётность числа, и обработать 6 заданных чисел с помощью цикла. Привести два теста, один из них — для нуля. | Закрепляет функцию, условие и цикл; при проверке обратить внимание на знак сравнения с остатком от деления и корректность результата для нуля. |
Средний (повышающий) | Составить программу с функцией `is_valid(score)`, проверяющей, попадает ли оценка в диапазон от 0 до 100, и посчитать количество допустимых значений в списке из 8 чисел. | Формирует умение объединять проверку границ и обработку списка; при проверке оценить тесты для значений 0, 100, отрицательного числа и числа больше 100. |
Продвинутый (дополнительный) | Разработать функцию `count_greater(values, limit)`, которая возвращает количество элементов списка, больших заданного порога. Добавить цикл ввода или обработки нескольких наборов данных и кратко описать разбиение задачи на подзадачи. | Развивает создание многоуровневого алгоритма и работу с параметрами; при проверке обратить внимание на повторное использование функции, имена переменных и объяснение алгоритма. |
Контрольные вопросы перед выходом из класса: «Что такое декомпозиция задачи?», «Чем функция отличается от цикла?», «Почему граничные значения обязательны при тестировании?», «Как определить, где в программе должно быть ветвление?»