Решение олимпиадных задач по программированию.

advertisement
Министерство образования и науки Российской Федерации
Департамент образования администрации
города Иркутска
МОУ гимназия № 25
Решение олимпиадных задач
по информатике
Программа элективного курса
для 10-11 классов
Разработал:
доцент
кафедры
математической информатики ИГПУ,
к.ф.-м.н. Кириченко К.Д.
г. Иркутск
2005 г.
Решение олимпиадных задач по информатике
(Элективный курс по информатике для 10 – 11 классов)
Курс рассчитан на 70 часов
Навык программирования лежит в основе всех профессий, связанных с
вычислительной техникой. В основе составления алгоритмов лежит метод разбиения
сложных задач на более простые подзадачи, который, в сущности, востребован во всех
видах научно-технической деятельности. Поэтому решение задач на составление
алгоритмов наиболее эффективно развивает логическое мышление ребенка. Другим
важным преимуществом решения олимпиадных задач именно по программированию
является отсутствие каких-либо универсальных методов решения задач. Так в частности,
распространена ситуация, когда существенная часть задач, предлагаемых на школьных и
вузовских олимпиадах по математике, легко решаются популярными математическими
пакетами. Однако, не существует ни одного автоматического средства решения задач на
составление алгоритмов. Таким образом, единственным средством обучения ребенка
решению задач по программированию является не заучивание каких-либо методов
решения задач, а деятельность, направленная на развитие самостоятельного логического
мышления.
Элективный курс “Решение олимпиадных задач по программированию” является
предметом по выбору для учащихся 10 — 11 классов профильного образования. Он
предназначен для тренировки школьников в составлении алгоритмов и изучения
основных математических моделей, используемых при составлении алгоритмов. Он
основывается на представлениях школьников об алгоритмизации, полученных на уроках
информатики,
также
очень
желательно
базовые
знания
о
каком-либо
языке
программирования. Курс рассчитан на 70 часов.
Основой курса является самостоятельное решение задач учащимися. Также
изучаются некоторые известные алгоритмические идеи и на их основе строятся
оригинальные алгоритмы. Курс включает в себя знакомство с некоторыми разделами
математики, такими как теория чисел и теория графов. Обязательной является
практическая реализация составленных алгоритмов, что должно закрепить навык
кодирования и отладки программ.
Цели курса
 Познакомить со способами научно-технического мышления и деятельности,
направленными на самостоятельное творческое познание и решение задач на
составление алгоритмов;
 Сформировать у учащихся представление о использовании математики при
составлении алгоритмов;
 Развить у учащихся навыки формального описания математических объектов;
 Реализовать коммуникативные, логические и эвристические способности учащихся
в ходе составления программ;
 Закрепить навык кодирования и отладки программ с помощью какой-либо среды
программирования
Задачи курса
 Познакомить учащихся с некоторыми алгоритмическими идеями;
 Познакомить учащихся с основными структурами данных;
 Познакомить учащихся с некоторыми
результатов теории чисел и теории графов;
практическими
приложениями
 Изучить ряд известных алгоритмов.
Планируемые результаты курса
В рамках данного курса учащиеся овладевают следующими знаниями, умениями и
способами деятельности:
 Умение составлять и записывать на языке программирования вычислительные
алгоритмы;
 Умение использовать различные структуры данных для решения алгоритмических
задач;
 Навык алгоритмического мышления, как способности к декомпозиции задач на
подзадачи;
 Совершенствование знаний синтаксиса и особенностей выбранного языка
программирования;
Примерное тематическое планирование
1. Подходы к решению задач на составление алгоритмов.
2. Составление циклических программ
3. Алгоритмические идеи: прием стражника
4. Простые алгоритмы сортировки
5. Алгоритмические идеи: бинарный поиск
6. Циклы с несколькими изменяющимися переменными
7. Графические модели при составлении алгоритмов
8. Структуры данных
9. Использование рекурсии при составлении алгоритмов
10.Теория чисел и двоичная арифметика
11.Некоторые алгоритмы в теории графов
12.Циклы и обходы графов
Содержание курса
1. Подходы к решению задач на составление алгоритмов. (8 часов)
Разбиение поставленной задачи на подзадачи. Упрощение задач. Задачи: проверка
пересечения двух отрезков на числовой прямой; сортировка 3,4,5 чисел с заданным
количеством сравнений и т.п.
2. Составление циклических программ (8 часов)
Понятие инварианта. Использование инварианта для составления циклических
программ. Задачи: нахождение чисел Фибоначчи, нахождение наибольшего общего
делителя нескольких чисел и др.
3. Алгоритмические идеи: прием стражника (4 часа)
Разбор задачи поиска в несортированном массиве. Прием стражника. Задачи: поиск
минимума из n чисел с минимальным числом сравнений
4. Простые алгоритмы сортировки (4 часа)
Задача сортировки элементов массива. Разбор простых алгоритмов сортировки.
Оценка числа действий. Составление новых алгоримов сортировки
5. Алгоритмические идеи: бинарный поиск (5 часов)
Разбор задачи поиска в упорядоченном массиве. Проверка алгоритма поиска по
методу инвариантов. Задачи: нахождение числа ближайшего к заданному в
отсортированном массиве, нахождение количества чисел в заданном интервале и
др.
6. Циклы с несколькими изменяющимися переменными (6 часов)
Разбор задачи слияния двух упорядоченных массивов. Проверка корректности
циклов, содержащих несколько изменяющихся переменных. Задачи: быстрая
сортировка, нахождение разности двух множеств и др.
7. Графические модели при составлении алгоритмов (5 часов)
Разбор задачи проверки правильности расстановки скобок. Графические модели
комбинаторных
чисел.
Задачи:
определение
глубины
вложенности
арифметического выражения, нахождение биномиальных коэффициентов и др.
8. Структуры данных (4 часа)
Создание структур данных с помощью записей (классов) и указателей. Работа со
списками. Сортировка по дереву. Задачи: реализация списка, стека, очереди, дерева
из строк.
9. Использование рекурсии при составлении алгоритмов (8 часов)
Проектирование рекурсивных алгоритмов. Задачи на размещение объектов. Разбор
задач на нахождение факториала и биномиальных коэффициентов. Рекурсивные
алгоритмы сортировки. Реализация алгоритма полного перебора с помощью
рекурсии. Задачи: реализация простого калькулятора, задача о рюкзаке, задача о
расстановке ферзей и др.
10.Теория чисел и двоичная арифметика (6 часов)
Операции сдвига, инверсии, представление чисел в двоичной записи. Умножение
чисел в двоичной записи. Системы счисления по основаниям 4,8,16. Разбор
алгоритмов умножения и возведения в целую степень. Задачи: кодирование по
алгоритму RSA, перевод числа в двоичную запись, представление дробей в
десятичном периодическом виде и др.
11.Некоторые алгоритмы в теории графов (6 часов)
Понятие графа, матрицы инцидентности, структуры данных для реализации
алгоритмов теории графов. Построение теоретико-графических моделей по
текстовым задачам. Задачи: поиск в ширину, поиск в глубину, проверка связности
графов и др.
12.Циклы и обходы графов (6 часов)
Эйлеровы циклы. Разбор алгоритма нахождения Эйлерова цикла. Задачи: задача о
мостах, о раскраске одним росчерком пера, о раскладке домино.
Список литературы и информационных ресурсов
1.
2.
3.
4.
В. Шелест Программирование. Учебное пособие. — СПб.: БХВ-Петербург,
2001.
И.Г. Семагин, А.Г. Шестаков Основы программирования: Учебник для
студентов учреждений среднего профессионального образования. — М.:
Высшая школа, 2001
Х.М. Дейтел, П.Дж. Дейтел Как программировать на Java. Книга 1. Основы
программирования. — М.: Бином-Пресс, 2003
Кормен, Лейзерсон, Ривест Алгоритмы: построение и анализ. — М.:МЦНМО,
2001
Download