ОСНОВНОЙ КУРС ДЛЯ СПЕЦИАЛИСТОВ «Алгоритмы и алгоритмические языки»

Обязательный курс для студентов-специалистов 1 курса, читается в 1 семестре

АННОТАЦИЯ

«Алгоритмы и алгоритмические языки» является начальным курсом по программированию на факультете. Цель курса – ввести базовые понятия программирования.

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

Практическую поддержку курсу обеспечивает «Практикум на ЭВМ». Основные цели практикума:

Практикум включает в себя как семинарские занятия (примерно 75% времени), направленные на закрепление теоретического материала, так и выполнение индивидуальных заданий. В последнем случае студентам заранее предлагается несколько (5-6) несложных задач практически по каждой из изучаемых тем, студенты должны самостоятельно разработать программы решения всех задач, а преподаватель проверяет на компьютере одну-две из этих программ.

ТЕМАТИЧЕСКИЙ ПЛАН КУРСА

Название темы

Аудиторные занятия (часы)

Самостоятельная работа студента

лекции

практикум

1. Введение в теорию алгоритмов 8 8 16 2. Алгоритмические языки. Язык Паскаль 36 44 80 3. Динамические структуры данных 10 12 22

Зачеты - 8 8

54 72 126

(аудиторные занятия и самостоя­тельная работа)

252

СОДЕРЖАНИЕ КУРСА

Часть 1. Введение в теорию алгоритмов Интуитивное понятие алгоритма. Свойства алгоритмов. Уточнение понятия алгоритма, алгоритм как преобразование слов из заданного алфавита. Машина Тьюринга. Нормальные алгоритмы Маркова. Основные схемы объединения алгоритмов (композиция, разветвление, цикл). Тезис Тьюринга и принцип нормализации, их обоснование. Алгоритмически неразрешимые проблемы. Неразрешимость проблем самопримени­мости, останова и эквивалентности алгоритмов. Модельная ЭВМ. Машинное представление данных. Машинный язык как практический формальный способ записи алгоритмов. Недостатки машинных языков.

Часть 2. Алгоритмические языки. Язык Паскаль Характеристика алгоритмических языков. Понятие трансляции. Алфавит, синтаксис и семантика алгоритмического языка. Описание синтаксиса языка с помощью металингвистических формул (БНФ) и синтакси­ческих диаграмм. Язык Паскаль (стандартная версия). Алфавит, служебные слова и стандартные имена. Структура программы: заголовок программы и блок, разделы описаний и операторов. Типы данных, их классификация. Переменные и константы, разделы переменных и констант. Стандартные простые типы (числовые, логический, символьный). Выражения. Оператор при­сваивания. Стандартные процедуры ввода-вывода. Операторы, их классификация. Пустой, составной и условный операторы. Оператор перехода, раздел меток. Операторы цикла. Способы повышения наглядности программы: комментарии, структурная запись программ, структурное программирование. Нестандартные типы данных, раздел типов. Перечислимые и ограниченные типы. Оператор варианта. Процедуры и функции. Формальные и фактические параметры. Локализация имен и меток. Способы передачи параметров. Побочные эффекты функций. Параметры-функции и параметры-процедуры. Рекур­сивные процедуры и функции. Итерация и рекурсия. Алгоритмы поиска с возвратами (backtracking), реализация их с помощью рекурсии. Сложные типы данных. Массивы, строки. Записи; оператор присоединения. Множе­ства. Файлы, текстовые файлы, внешние и внутренние файлы. Динамические переменные. Ссылочные типы данных. Методы разработки программы (пошаговая детализация и др.). Тестирование и отладка программ.

Часть 3. Динамические структуры данных Списки. Представление списков и реализация основных операций на ними в языке Паскаль. Варианты списков (с заглавным звеном, циклические, двунаправленные). Стек, очередь. Векторное и списковое представления их, реализация операций на ними. Двоичные (бинарные) деревья. Обход дерева с использованием стека, очереди и рекурсии. Деревья поиска (сравнений), алгоритмы поиска, вставки и удаления элементов. Таблицы, операция поиска по ключу. Последовательные таблицы (неупорядоченные и упорядоченные). Понятие о (временнóй) оценке сложности алгоритмов в худшем случае и в среднем. Оценка сложности оптимального алгоритма поиска по ключу. Бинарный поиск в упорядоченных таблицах. Методы сортировки, оптимальные оценки числа сравнений и перемещений при сортировке. Представление таблиц в виде деревьев поиска (сравнений), оценки сложности поиска по ключу в таких таблицах. АВЛ-деревья, оценки сложности поиска, алгоритм вставки. Перемешанные таблицы (хэш-таблицы). Функции расстановки. Устранение коллизий методами закрытого хеширования (линейных проб) и открытого хеширования (цепочек).

Практикум на ЭВМ

Ниже номера задач даны по задачнику [5] для занятий 2-4 и по задачнику [6] для занятий 6-30.

Занятие 1. Системы счисления (с.с.). Определение позиционной с.с. Алгоритмы перевода из одной с.с. в другую. Двоичная система и системы с основанием 2k, правила перевода.

Занятие 2. Машина Тьюринга (МТ). Структура МТ. Правила записи и выполнения программы МТ.

Занятие 3. Нормальные алгоритмы Маркова (НАМ). Подстановки. Правила записи и выполнения НАМ.

Занятие 4. Задачи по теории алгоритмов. Применимость алгоритма к слову, самоприменимость, эквивалентность и композиция алгоритмов.

Занятие 5. Метаязыки. Металингвистические формулы (БНФ), синтаксические диаграммы. (В каждой задаче требуется описать в виде БНФ и в виде синтаксической диаграммы указанное словесно понятие)

Занятие 6. Контрольная работа №1 (по темам занятий 1-5)

Занятие 7. Язык Паскаль. Числовые типы. Идентификаторы. Переменные. Запись чисел. Операции и стандартные функции для чисел. Арифметические выражения. Оператор присваивания.

Занятие 8. Логический тип. Отношения. Логические операции и стандартные функции. Логические выражения.

Занятие 9. Программа. Ввод-вывод. Операторы. (2.9г, 2.17в) Структура программы. Раздел переменных. Стандартные процедуры ввода-вывода. Пустой, составной и условный операторы.

Выдача заданий практикума (см. занятие 11).

Занятие 10. Константы. Переходы. Циклы. Константы, раздел констант. Оператор перехода, раздел меток. Операторы цикла. Ограничения на for-циклы.

Занятие 11. Работа на ЭВМ.

Занятие 12. Циклы. Реализация классических алгоритмов. Структурное программирование. Досрочный выход из for-циклов. Вложенные циклы.

Занятие 13. Символьный тип. Особенности символьного типа (состав, количество и упорядоченность символов). Стандартные функции и операции для символов.

Выдача заданий практикума (см. занятие 15).

Занятие 14. Перечислимые и ограниченные типы. Оператор варианта. Нестандартные типы данных, раздел типов. Перечислимые типы. Ограниченные типы. Оператор варианта.

Занятие 15. Работа на ЭВМ.

Занятие 16. Массивы (векторы). Описание массивов, типы индексов, индексированные переменные.

Занятие 17. Массивы (матрицы, строки). Описание многомерных массивов. Строковые типы, дополнительные возможности при работе со строками.

Выдача заданий практикума (см. занятие 19).

Занятие 18. Контрольная работа №2 (по темам занятий 7–17).

Занятие 19. Работа на ЭВМ.

Занятие 20. Процедуры и функции. Раздел процедур и функций. Описание процедур и обращение к ним (оператор процедуры). Формальные и фактические параметры, параметры-значения и параметры-переменные. Локализация имен и меток. Описание функций и обращение к ним. Различие между процедурами функциями.

Занятие 21. Процедуры и функции. Передача параметров по значению и по ссылке. Рекурсивные процедуры и функции. Опережающие описания (forward).

Выдача заданий практикума (см. занятие 23).

Занятие 22. Процедуры и функции. Записи, оператор присоединения. Побочные эффекты функций. Параметры-функции и параметры-процедуры. Описание записей, локализация имен полей записи, обращение к полям записи. Оператор присоединения.

Занятие 23. Работа на ЭВМ.

Занятие 24. Множества. Описание множеств. Конструктор множества. Операции над множествами. Выражения множественного типа.

Занятие 25. Файлы. Описание файлов. Стандартные процедуры и функции для файлов. Текстовые файлы, дополнительные возможности при работе с текстовыми файлами.

Выдача заданий практикума (см. занятие 27).

Занятие 26. Файлы. Ссылки. Расширенные возможности при обмене с текстовыми файлами (как при вводе-выводе). Внутренние и внешние файлы. (Особенности работы с файлами в языке Турбо Паскаль – для выполнения следующих заданий практикума.) Динамические переменные и доступ к ним по ссылкам. Ссылочные типы и переменные, операции над ссылками.

Занятие 27. Работа на ЭВМ.

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

Занятие 28. Списки. Понятие списка, отличие от массива. Описание списков. Основные операции над списками. Рекурсивная обработка списков.

Занятие 29. Очередь. Стек. Двоичные деревья. Очередь и стек: определение, векторное и списковое представления, основные операции. Двоичные (бинарные) деревья: определение, представление и описание; обход дерева с использованием очереди, стека и рекурсии.

Выдача заданий практикума (см. занятие 31).

Занятие 30. Двоичные деревья. Представление формул в виде двоичных деревьев. Деревья поиска (сравнений).

Занятие 31. Работа на ЭВМ.

Занятие 32. Контрольная работа №3 (по темам занятий 20-30).

Оставшиеся занятия: доработка заданий практикума, зачеты.

ЛИТЕРАТУРА Основная литература 1. Э.З. Любимский, В.В. Мартынюк, Н.П. Трифонов. Программирование. – М., «Наука», 1980. 2. В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова. Введение в язык Паскаль. – М., Наука. 1988. 3. Н. Вирт. Алгоритмы и структуры данных. – СбП., Невский диалект, 2001. 4. В.П. Иванников, Л.С. Корухова, В.Н. Пильщиков. Курс «Алгоритмы и алгоритмические языки». Варианты письменного экзамена. (Методическое пособие.) – М., ф-т ВМК МГУ, МАКС Пресс. 2007. 5. В.Н. Пильщиков, В.Г. Абрамов В.Г., А.А. Вылиток, И.В. Горячая. Машина Тьюринга и алгоритмы Маркова. Решение задач. (Учебно-методическое пособие.) – М., ф-т ВМК МГУ, МАКС Пресс, 2006. 6. В.Н. Пильщиков. Язык Паскаль: упражнения и задачи. – М., Научный мир, 2003. 7. Н.П. Трифонов, В.Н. Пильщиков. Задания практикума на ЭВМ. (Учебное пособие для студентов 1-го курса.) – М., ф-т ВМК МГУ, МАКС Пресс, 2007.

Дополнительная литература 1. Л.С. Корухова, М.Р. Шура-Бура. Введение в алгоритмы. (Учебное пособие для студентов 1 курса.) – М., ф-т ВМК МГУ, 1997. 2. А.А. Марков, Н.М. Нагорный. Теория алгорифмов. – М., ФАЗИС, 1996. 3. К. Йенсен, Н. Вирт. Паскаль. Руководство для пользователя. – М., «Компьютер», 1993. 4. Pascal ISO 7185:1990 – http://www.moorecad.com/standardpascal/iso7185.pdf 5. А. Ахо., Д. Хопкрофт., Д. Ульман. Структуры данных и алгоритмы. – М., изд-во Вильямс, 2000. 6. Д. Кнут. Искусство программирования. Том 1 – Основные алгоритмы. – М., изд-во Вильямс, 2005. 7. Д. Кнут. Искусство программирования. Том 3 – Сортировка и поиск. – М., изд-во Вильямс, 2005. 8. Т. Кормен, Ч. Лейзерсон, Д. Ривест, К. Штайн. Алгоритмы: построение и анализ. – М., Издательский дом «Вильямс», 2005.