Конспект урока информатики "Решение задания №17 ЕГЭ по информатике: обработка целочисленных последовательностей и файлов"; 11 класс
Конспект урока по информатике для 11 класса
Тема: «Решение задания №17 ЕГЭ по информатике: обработка целочисленных последовательностей и файлов»
Цели урока
- Повторить структуру и особенности задания №17 ЕГЭ.
- Разобрать ключевые алгоритмы поиска экстремумов (максимумов и минимумов) в последовательностях.
- Отработать навыки работы с файлами и потоками данных.
- Сформировать умение формализовать условие задачи и реализовывать решение на языке программирования (Python).
Оборудование и материалы
- Компьютер с установленной средой программирования (Python).
- Проектор для демонстрации кода.
- Раздаточные материалы с формулировками задач и шаблонами кода.
Ход урока
1. Организационный момент (2 минуты)
Приветствие, проверка готовности. Объявление темы. Акцент на том, что задача №17 — это классическая задача на обработку данных, где требуется не просто найти ответ, а найти его при определённых условиях
2. Актуализация знаний (5 минут)
Фронтальный опрос:
- В чём главная сложность задачи №17 по сравнению с задачами на простой поиск максимума?
- Какие структуры данных чаще всего используются для решения? (Обычно достаточно двух-трёх переменных).
- Что такое «потоковая обработка» данных? (Обработка данных по мере чтения, без сохранения всего массива в памяти).
3. Теоретическая часть (10 минут)
Структура задания №17:
Задача обычно содержит два условия:
Условие на пару/тройку элементов:
Например, сумма делится на 10, разность положительна, произведение больше 100.
Условие на экстремум:
Найти среди всех пар, удовлетворяющих первому условию, ту, у которой сумма/максимум/минимум элементов максимальна/минимальна.
Алгоритм решения:
1. Инициализация: Завести переменные для хранения текущего лучшего результата (например, max_sum = -1 или best_pair = None). Важно инициализировать переменную так, чтобы любое допустимое значение её заменило.
2. Перебор: Организовать вложенные циклы для перебора всех возможных пар (или троек) элементов последовательности.
3. Проверка условия: Внутри цикла проверить, удовлетворяет ли текущая пара первому условию задачи.
4. Обновление экстремума: Если условие выполнено, проверить, является ли эта пара «лучшей» по второму критерию. Если да — обновить переменную max_sum или best_pair.
5. Вывод ответа: После перебора всех вариантов вывести сохранённый результат.
4. Разбор типового примера №1: Поиск пары с условием на сумму (15 минут)
Задача:
Дана последовательность целых чисел. Необходимо найти количество пар элементов, для которых сумма чисел кратна 5 и положительна. В ответе запишите количество таких пар.
Алгоритм решения:
1. Считывание данных: Считать все числа в список arr.
2. Инициализация счётчика: count = 0.
3. Вложенные циклы: Внешний цикл i от 0 до n-1, внутренний цикл j от i+1 до n-1. Это гарантирует, что каждая пара (i, j) рассматривается ровно один раз и порядок важен (i < j).
4. Проверка условия: Для каждой пары вычислить s = arr[i] + arr[j]. Если (s > 0) and (s % 5 == 0), увеличить счётчик.
5. Вывод: Напечатать count.
Пример кода на Python:
Считываем данные из файла или вводим вручную для теста
with open('17.txt') as f:
arr = list(map(int, f.readlines()))
# Для демонстрации используем готовый список
arr = [12, -3, 7, -2, 8, -5]
count = 0
n = len(arr)
# Перебираем все пары (i, j), где i < j
for i in range(n):
for j in range(i + 1, n):
pair_sum = arr[i] + arr[j]
# Проверяем оба условия задачи
if pair_sum > 0 and pair_sum % 5 == 0:
count += 1
print("Ответ:", count)
Комментарий учителя: Обратите внимание на вложенные циклы. Использование `range(i+1, n)` во втором цикле — это стандартный приём, чтобы не считать пары `(j, i)` и не сравнивать элемент с самим собой. Это экономит время вычислений вдвое.
5. Разбор типового примера №2: Поиск максимума среди пар с условием (15 минут)
Задача:
Дана последовательность натуральных чисел (не более 1000 элементов), все числа не превышают 10000. Необходимо найти максимальную сумму двух различных элементов последовательности, которая кратна 6.
Алгоритм решения:
Логика похожа, но вместо счётчика мы ищем максимум.
1. Инициализация: Так как все числа натуральные, сумма не может быть отрицательной или нулевой. Инициализируем переменную best_sum = -1. Если после выполнения программы она останется равной -1, значит подходящих пар не было.
2. Вложенные циклы:** Аналогично предыдущему примеру.
3. Проверка условия и обновление максимума:
Если пара удовлетворяет условию (pair_sum % 6 == 0), мы сравниваем её сумму с текущим лучшим результатом:
if pair_sum > best_sum: best_sum = pair_sum
4. Вывод: Напечатать best_sum.
Пример кода на Python:
arr = list(map(int, open('17.txt').readlines()))
arr = [3, 6, 9, 2, 4]
best_sum = -1 # Инициализация значением, которое точно будет меньше любой возможной суммы
n = len(arr)
for i in range(n):
for j in range(i + 1, n):
pair_sum = arr[i] + arr[j]
if pair_sum % 6 == 0:
if pair_sum > best_sum:
best_sum = pair_sum
print("Максимальная сумма:", best_sum)
Комментарий учителя: Здесь критически важна инициализация переменной best_sum. Если бы мы инициализировали её нулём (best_sum = 0), а в последовательности все числа были бы отрицательными (или если бы по условию суммы могли быть нулевыми), программа могла бы выдать неверный ответ. Инициализация -1 — это «защитный» приём.
6. Практическая работа / Самостоятельная работа (8 минут)
Ученикам выдается карточка с задачей:
«Дан набор чисел. Найти минимальное произведение двух различных элементов этого набора, которое является квадратом натурального числа».
Задание: Составить алгоритм и написать код.
Подсказка: Для поиска минимума переменная инициализируется очень большим числом, например float(inf).
7. Обсуждение решений и типичных ошибок (5 минут)
Коллективное обсуждение:
Ошибка в индексах Использование одного и того же элемента дважды (i и j могут стать равными). Решение — второй цикл от i+1.
Неверная инициализация: Как в примере выше. Для минимума нужно брать «очень большое» число, для максимума — «очень маленькое».
Пропуск условия: Забыть проверить одно из условий задачи (например, кратность) или перепутать логику (and / or).
Типы данных: При работе с произведениями больших чисел может возникнуть переполнение типа int, но в Python с этим проблем нет.
8. Рефлексия и домашнее задание (3 минуты)
Вопросы для рефлексии:
Какую главную идею вы сегодня усвоили для решения задач на поиск пар с условиями?
(Ответ: Идея двухэтапной фильтрации — сначала отбираем пары по логическому условию, а затем среди них ищем экстремум).*
Домашнее задание:
Решить задачу №17 из открытого банка заданий ФИПИ. Особое внимание уделить корректной инициализации переменных для поиска максимума/минимума.
На странице приведен фрагмент.
|
Автор: Фахретдинова Любовь Александровна
→ Публикатор |
Спасибо за Вашу оценку. Если хотите, чтобы Ваше имя
стало известно автору, войдите на сайт как пользователь
и нажмите Спасибо еще раз. Ваше имя появится на этой стрнице.