МИНОБРНАУКИ РОССИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования

advertisement
МИНОБРНАУКИ РОССИИ
Федеральное государственное автономное образовательное
учреждение высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Факультет математики, механики и компьютерных наук
УТВЕРЖДАЮ
Декан факультета математики, механики
и компьютерных наук
________________________М.И.Карякин
«03» июля 2012 г.
РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ
«Основы программирования»
Направление подготовки
Фундаментальная информатика и информационные технологии 010300
Профиль подготовки
«Компьютерные науки»
Квалификация (степень) выпускника
Бакалавр
Кафедра алгебры и дискретной математики
Курс 1 семестр 1-2
Форма обучения очная
Программа разработана
Михалкович С.С., доцент, канд. физ.-мат. наук
Рецензент
Русанова Я.М., доцент, канд. техн. наук
Ростов-на-Дону – 2012
1
Рассмотрена и рекомендована к
утверждению на заседании учебнометодического совета факультета
математики, механики и компьютерных наук, направление подготовки
«Фундаментальная информатика и
информационные технологии»
протокол заседания
от _________________ № ________
Рассмотрена и рекомендована к
утверждению на заседании кафедры
алгебры и дискретной математики
протокол заседания
от _________________ №_________
СОГЛАСОВАНО
Протокол заседания кафедры/учебнометодического совета факультета
_________________________________
(название выпускающей кафедры/
факультета, реализующего ООП ВПО)
от ______________ № _____________
I. ЦЕЛИ И ЗАДАЧИ ОСВОЕНИЯ ДИСЦИПЛИНЫ
Цели освоения дисциплины
Основной
ознакомление
целью
курса
студентов
с
«Основы
программирования»
основными
понятиями
является
современного
программирования, формирование у них навыков составления алгоритмов,
воплощения их на языке программирования, тестирования и отладки
алгоритмов. Реализация данной цели позволит студентам использовать свои
знания и навыки практически во всех дисциплинах профессионального курса.
Задачи освоения дисциплины
Основными задачами освоения дисциплины являются:
 Знакомство
студентов
с
основными
понятиями
языков
программирования.
 Рассмотрение базовых алгоритмов обработки информации.
 Изучение принципов организации типов данных.
 Понимание студентами оценка сложности алгоритмов.
 Выработка у студентов умения самостоятельно анализировать и
решать задачи, связанные с применением классических алгоритмов.
II. МЕСТО ДИСЦИПЛИНЫ В СТРУКТУРЕ ООП ВПО

Учебная дисциплина «Основы программирования» относится к циклу
профессиональных дисциплин.

Для изучения данной учебной дисциплины необходимы знания,
умения и навыки, полученные в школе на уроках информатики:
Знания базовых алгоритмов и типов данных.
Умение понять спецификацию задачи, сформулировать алгоритм, понять
написанный простой алгоритм, найти простые ошибки в программах.
Навыки реализации алгоритма на некотором языке программирования.
Дисциплина «Основы программирования» является стартовой площадкой
изучения программирования, пронизывающего большинство практических
дисциплин профессионального цикла. Наибольшее значение курс «Основы
программирования» имеет для курса «Языки программирования», являющегося
его естественным продолжением. Навыки, полученные в ходе изучения этого
курса, будут использованы при решении практических задач в таких курсах как

Операционные системы

Алгоритмы и структуры данных

Вычислительная математика

Компьютерные сети

Технологии баз данных

Компьютерная графика
На выходе курса требуется, чтобы закончивший изучение курса студент
умел самостоятельно анализировать и решать практические задачи, связанные с
применением классических алгоритмов обработки данных.
III. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ СОДЕРЖАНИЯ
ДИСЦИПЛИНЫ
3.1. Процесс изучения дисциплины направлен на формирование элементов
следующих компетенций в соответствии с ФГОС ВПО (ОС ЮФУ) и ООП ВПО
по данному направлению подготовки (специальности):
а) общекультурных (ОК):
 владение культурой мышления, способность к обобщению, анализу,
восприятию информации, постановке цели и выбору путей еѐ достижения
(ОК–1);
 умение логически верно, аргументировано и ясно строить устную и
письменную речь (ОК-2);
 стремление к саморазвитию, повышению своей квалификации и мастерства
(ОК-6);
 умение критически оценивать свои достоинства и недостатки, наметить пути
и выбрать средства развития достоинств и устранения недостатков (ОК-7);
 осознание социальной значимости своей будущей профессии, обладание
высокой мотивацией к выполнению профессиональной деятельности (ОК8).
б) профессиональных (ПК):
 понимание основных концепций, принципов, теорий и фактов, связанных с
информатикой (ПК-1);
 способность к формализации в своей предметной области с учетом
ограничений используемых методов исследования (ПК-2);
 готовность к использованию методов и инструментальных средств
исследования объектов профессиональной деятельности (ПК-3);
 готовность обосновать принимаемые проектные решения, осуществлять
постановку и выполнение экспериментов по проверке их корректности и
эффективности (ПК-4);
 умение применять основы информатики и программирования к
проектированию, конструированию и тестированию программных
продуктов (ПК-10);
 навыки чтения, понимания и выделения главной идеи прочитанного
исходного кода, документации (ПК-11);
 способность оценивать временную и емкостную сложность программного
обеспечения (ПК-13);
 навыки использования различных технологий разработки программного
обеспечения (ПК-16).
В результате освоения дисциплины обучающийся должен:
Знать:
 базовые алгоритмы обработки информации;
 методы разработки средних и больших программ;
 принципы организации структур данных;
 основы объектно-ориентированного программирования;
 синтаксис и семантику одного из распространенных языков
программирования.
Уметь:
 выполнять и анализировать постановку задачи;
 формулировать математическую модель задачи;
 использовать базовые алгоритмы и самостоятельно разрабатывать
алгоритмы решения задачи;
 использовать подходящие структуры данных;
 выполнять отладку и тестирование;
 разрабатывать и использовать модули;
 оценивать сложность и эффективность алгоритма.
Владеть:
 одним из распространенных языков программирования;
 навыками работы в интегрированной среде программирования;
 пользоваться средствами отладчика среды программирования.
IV. СОДЕРЖАНИЕ И СТРУКТУРА ДИСЦИПЛИНЫ
4.1. Содержание модулей дисциплины
№
модуля
1
Наименование
модуля
1.
2
Основы языка
программирования
2.
Подпрограммы
3.
Структурированные
типы данных
4.
Файлы
Содержание модуля
3
Синтаксис и семантика основных
конструкций языка, базовые
алгоритмы работы с циклами
Процедуры, функции, методы
программирования снизу вверх и
сверху вниз
Массивы, записи и строки.
Стандартные подпрограммы и
методы работы с массивами,
записями и строками.
Типизированные и текстовые
файлы, последовательный и
произвольный доступ. Обработка
текстовой информации.
Формы текущего
контроля
4
контрольная работа
контрольная работа
контрольная работа
контрольная работа
5.
Динамические
структуры данных
6.
Рекурсия и деревья
7.
Основы объектноориентированного
программирования
Односвязные и двусвязные
списки, основные операции при
работе со списками, сравнение с
массивами
Основные определения, связанные
с рекурсией, примеры программ,
где использование рекурсии
неэффективно и эффективно.
Методика разработки
рекурсивных алгоритмов
Классы и объекты. Защита
доступа. Инкапсуляция,
наследование, полиморфизм,
исключения. Определение типа во
время выполнения программы.
Интерфейсы.
контрольная работа
контрольная работа
контрольная работа
4.2. Структура дисциплины. Общая трудоемкость дисциплины составляет
7,5 зач.ед. (270 часов) лекции и 8 зач.ед. (288 часов) практика.
Вид работы
Трудоемкость, часов
семестр семестр
1
2
Всего
Общая трудоемкость
Аудиторная работа:
Лекции (Л)
54
48
102
Практические занятия (ПЗ)
72
64
136
Самоподготовка (проработка и повторение лекционного материала и материала учебников и
учебных пособий, подготовка к лабораторным
и практическим занятиям, коллоквиумам,
рубежному контролю и т.д.)
88
88
176
Подготовка и сдача экзамена (при наличии
экзамена по дисциплине)
36
36
72
Лабораторные работы (ЛР)
Самостоятельная работа:
Вид итогового контроля (зачет, экзамен)
зачет,
зачет,
экзамен экзамен
Модули дисциплины, изучаемые в 1 семестре
Количество часов
№
модуля
Наименование модулей
Аудиторная
работа
Всего
Л
ПЗ
ЛР
Внеауд.
работа
СР
1.
Основы языка программирования
18
26
26
2.
Подпрограммы
16
16
24
3.
Структурированные типы данных
20
30
40
54
72
88
Итого:
Модули дисциплины, изучаемые во 2 семестре
Количество часов
№
модуля
Наименование модулей
Аудиторная
работа
Всего
Л
ПЗ
ЛР
Внеауд.
работа
СР
4.
Файлы
8
10
14
5.
Динамические структуры данных
12
16
20
6.
Рекурсия и деревья
10
16
24
7.
Основы объектно-ориентированного
программирования
18
22
30
Итого:
48
64
88
Всего:
102 136
176
4.3. Лабораторные работы
№
ЛР
№
модуля
Наименование лабораторных работ
нет
Кол-во
часов
4.4. Практические занятия (1 семестр)
№
№
ПрЗ модуля
Тема
Кол-во
часов
1.
1
Знакомство с PascalABC.NET. Простейшие программы.
Вещественные переменные. Использование стандартных
функций. Ввод/вывод.
2
2.
1
Написание собственных функций (только входные
параметры и возвращаемое значение) и их использование.
Вспомогательные (локальные) переменные в функциях.
2
3.
1
Целочисленные операции: деление с остатком (div и
mod). Выделение разрядов числа. Стандартный вид числа.
Тип boolean и логические операции. Условный оператор.
2
4.
1
Тестирование
функций.
форматирование исходного кода.
2
5.
1
Тестирование функций.
2
6.
1
К/р №1
Циклы for и while: простейшие задачи.
2
7.
1
8.
1
9.
1
Обработка
последовательностей.
числовых
2
10.
1
Обработка цифр числа. Вычисления с заданной
точностью. Точки прерывания (условные и безусловные).
2
11.
1
Условные циклы: использование флаговых переменных,
операторы break и continue. Накопление погрешностей в
итерационных алгоритмах.
2
12.
1
К/р №2
2
13.
1
Решение задач на вложенные циклы.
2
14.
2
Процедуры. Параметры-переменные.
2
15.
2
Процедуры. Параметры-переменные.
2
16.
2
Графика: координаты, графические примитивы.
2
17.
2
18.
2
Параметры-функции и параметры-процедуры.
2
19.
2
К/р №3
2
20.
2
Модули и библиотеки.
2
Документирование
и
Вычисление значения конечных сумм. Пошаговое
выполнение программы и слежение за значениями
переменных.
Вычисление значения конечных сумм.
Графика: вывод
координат, анимация.
рекуррентных
текста,
преобразование
2
2
системы
2
21.
2
Модули и библиотеки.
2
22.
3
Массивы фиксированного размера.
2
23.
3
Динамические массивы.
2
24.
3
Задачи на одномерные массивы: поиск и подсчет
количества элементов по заданному условию, поиск
экстремумов.
2
25.
3
Задачи на одномерные массивы: сдвиги, вставка и
удаление, поиск в отсортированном массиве.
2
26.
3
Использование
массивов.
2
27.
3
К/р №4
2
28.
3
Обработка двумерных массивов.
2
29.
3
Обработка двумерных массивов.
2
30.
3
Записи и массивы записей.
2
31.
3
Множества.
2
32.
3
Символы и строки.
2
33.
3
Обработка строк.
2
34.
3
Обработка строк.
2
35.
3
К/р №5
2
Зачетное занятие
2
36.
шаблонов
функций
при
обработке
Практические занятия (2 семестр)
№
№
ПрЗ модуля
Тема
Кол-во
часов
1.
4
Файлы
Посимвольное и построчное чтение текстовых файлов.
Символы конца строки.
Чтение числовых данных из текстовых файлов.
2
2.
4
Формирование и обработка текстовых файлов.
Дополнение текстового файла. Использование временных
файлов.
2
3.
4
Формирование и обработка текстовых файлов.
Дополнение текстового файла. Использование временных
файлов.
2
4.
4
Создание
и
последовательная
типизированных файлов.
2
5.
4
обработка
Прямой доступ к данным типизированного файла.
2
6.
4
К/р №1
2
7.
4
Работа над ошибками
2
8.
5
Работа с динамической памятью
Указатели: объявление, выделение памяти. Ошибки при
работе с указателями. Обращение к памяти с помощью
указателей разных типов.
2
9.
5
Объявление классов: поля, методы, конструкторы (без
контроля доступа).
Создание объектов. Ссылочная модель объектов.
2
10.
5
Односвязные линейные списки.
2
11.
5
Двусвязные линейные списки — 1.
2
12.
5
Двусвязные линейные списки — 2.
2
13.
5
К/р №2
2
14.
6
15.
6
Простейшие задачи на использование рекурсии.
2
16.
6
Обход бинарных деревьев.
2
17.
6
Создание и использование бинарных деревьев поиска.
2
18.
6
Создание и использование бинарных деревьев поиска.
2
19.
6
К/р №3: рекурсия, деревья, классы и объекты
2
20.
7
Объектно-ориентированное программирование
Чтение и реализация UML-диаграмм.
2
21.
7
Чтение и реализация UML-диаграмм.
2
22.
7
Чтение и реализация UML-диаграмм.
2
23.
7
То же
2
24.
7
Программирование с классами и объектами (простой
проект).
2
25.
7
Наследование: синтаксис, переопределение методов,
доступ к членам предка.
2
26.
7
Наследование: синтаксис, переопределение методов,
доступ к членам предка.
2
27.
7
Наследование: синтаксис, переопределение методов,
доступ к членам предка.
2
28.
7
Исключения, иерархия исключений.
2
29.
7
Наследование и полиморфизм.
2
30.
7
Наследование и полиморфизм. Интерфейсы.
2
Рекурсия и деревья
Простейшие задачи на использование рекурсии (задачи
из ФП).
2
31.
7
К/р №4
2
32.
7
Зачётное занятие
2
V. ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ
При
проведении
лекций
используются
следующие
образовательные
технологии:
 мультимедийные лекции;
 вовлечение слушателей в процесс разработки программы и поиска ошибок
 мозговой штурм;
 обмен опытом;
 обсуждение критической ситуации.
При
проведении
лабораторных
занятий
используются
следующие
образовательные технологии:
 учебная среда Moodle для проверки работ, проведения самостоятельных
работ, тестов, оперативного консультирования;
 веб-среда программирования для мобильного запуска программ и хранения
личного каталога программ.
Семестр
Вид
занятия
(Л,ПР,ЛР)
1
Используемые интерактивные
образовательные технологии
Количество
часов
Л
проблемная лекция, дискуссия
4
ПР
тренинг, компьютерная симуляция
4
Л
проблемная лекция, дискуссия
4
ПР
тренинг, компьютерная симуляция
4
ЛР
2
ЛР
Итого:
16
VI. ОЦЕНОЧНЫЕ СРЕДСТВА ДЛЯ ТЕКУЩЕГО КОНТРОЛЯ
УСПЕВАЕМОСТИ И ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ
Примерный
набор
тестов
для
закрепления
пройденного
материала
1. Какое ключевое слово следует использовать для свойства с индексами по
умолчанию
a. virtual
b. default
c. никакого
2. Для вставки элемента в середину динамического массива длины n
требуется в среднем операций
a. n
b. n/2
c. log n
3. Для добавления элемента в ассоциативный массив длины n на базе списка
требуется в среднем операций
a. n
b. n/2
c. log n
4. Для добавления элемента в ассоциативный массив длины n на базе
бинарного дерева поиска требуется в среднем операций
a. n
b. n/2
c. log n
5. Что такое агрегация
a. Любое взаимодействие между объектами класса
b. Отношение между классами, при котором один класс наследует
интерфейс другого класса
c. Отношение между классами, при котором один класс содержит в
качестве поля объект другого класса
6. Будет ли доступна перегрузка в Delphi
a. если функция определена в другом модуле
b. если функция определена в подклассе
c. если одна функция определена классе, а вторая - глобальна
7. Как начать новую цепочку виртуальности в Delphi:
a. procedure p; virtual; reintroduce;
b. procedure p; override; reintroduce;
c. procedure p; virtual;
d. procedure p; reintroduce;
8. Верны ли утверждения:
a. Полиморфизм – это возможность создавать несколько объектов
одного класса
b. Полиморфизм – это возможность родственных классов выполнять
одни и те же действия по-разному
c. Полиморфизм
–
это
зависимость
между
классами
при
множественном наследовании
9. В каком порядке следует записывать обработчики исключений
a. в произвольном
b. от общих к частным
c. от частных к общим
10.В какую сторону можно осуществлять присваивание в иерархии ПредокПотомок
a. нельзя вообще – это несовместимые типы
b. предку можно присваивать потомка, но не наоборот
c. в обе стороны
d. потомку можно присваивать предка но не наоборот
11.Когда используется as is
a. для всех типов
b. для классов, связанных иерархией наследования
c. для всех классов
12.Что возвращает as для ссылки в случае невозможности преобразования
a. ничего
b. исключение
c. nil
d. 0
Перечень вопросов, выносимых на экзамен в 1 семестре
1. Понятие алгоритма. Свойства алгоритма. Эквивалентность алгоритмов.
Исполнитель алгоритма. Показатели эффективности алгоритма.
2. Способы описания алгоритмов: словесный, псевдокод, блок-схемы,
диаграммы деятельности, языки программирования.
3. Язык программирования (ЯП). Синтаксис и семантика ЯП. Способы задания
синтаксиса ЯП: формы Бэкуса-Наура, расширенные формы Бэкуса-Наура,
синтаксические диаграммы.
4. Компиляторы и интерпретаторы. Виртуальные машины, JIT-компиляция,
промежуточный код. Преимущества и недостатки виртуальных машин.
5. Общая структура программы на языке Паскаль. Лексемы языка Паскаль.
6. Понятие типа данных. Основные типы языка Паскаль. Разделы описания
переменных и констант. Внутриблочные описания.
7. Оператор присваивания. Примеры использования. Совместимость типов по
присваиванию. Расширенные операторы присваивания: += -= *= /=.
Вычисление степеней за наименьшее число умножений.
8. Оператор вывода. Форматы вывода : и ::. Процедура writelnFormat.
9. Оператор ввода. Обработка ошибок ввода. Оператор try ... except.
10.Арифметические выражения. Операции в арифметических выражениях. Тип
арифметического выражения. Операции div и mod, shl и shr. Стандартные
арифметические функции и процедуры.
11.Логические выражения и операции. Таблицы истинности. Таблица
приоритетов операций языка Паскаль.
12.Условный оператор. Вложенные условные операторы. Составной оператор.
13.Оператор выбора варианта. Тип выражения-переключателя в операторе
выбора варианта.
14.Цикл с предусловием. Цикл с постусловием. Цикл с параметром.
Моделирование цикла repeat с помощью цикла while. Зацикливание и
бесконечные циклы.
15.Примеры использования циклов: сумма и произведение введенных чисел;
факториал; подсчет количества чисел, удовлетворяющих некоторому
условию.
16.Примеры использования циклов: табулирование функции. Решения с
помощью цикла for и цикла while.
17.Погрешность округления и вычислительная погрешность. Хранение
вещественного значения в памяти. Мантисса и порядок.
18.Рекуррентные последовательности. Арифметическая и геометрическая
прогрессии как частные случаи рекуррентных последовательностей. Числа
Фибоначчи.
19.Примеры использования циклов: алгоритм Евклида нахождения НОД.
20.Предусловия и постусловия. Процедура assert.
21.Примеры использования циклов: сумма и произведение цифр целого числа.
22.Примеры использования циклов: поиск максимума (минимума), поиск
условного максимума (минимума). Понятие инварианта цикла.
Доказательство корректности алгоритма поиска максимума с помощью
инвариантов.
23.Примеры использования циклов: суммирование конечных и бесконечных
рядов.
24.Операторы break и continue. Использование флагов при решении задач.
Эквивалентные циклы без break и continue. Примеры использования циклов:
поиск заданного значения среди введенных.
25.Примеры использования циклов: определение простоты числа.
26.Примеры использования циклов: разложение целого числа на простые
сомножители. Доказательство завершимости алгоритма.
27.Понятие асимптотической сложности алгоритма. Асимптотически
). Нотация Θ.
эквивалентные последовательности ( an ~bn,n
28.Примеры использования циклов: схема Горнера. Асимптотическая
сложность «наивного» алгоритма вычисления значения многочлена.
Асимптотическая сложность алгоритма схемы Горнера.
29.Примеры использования циклов: вычисление корня функции на отрезке.
Метод половинного деления.
30.Вложенные циклы, примеры их использования. Метод окаймления и метод
последовательной детализации.
31.Переборные задачи и оптимизация самого внутреннего цикла.
Преждевременная оптимизация.
32.Оператор goto. Семантические ограничения для оператора goto. Примеры
использования.
33.Подпрограммы. Цели введения подпрограмм в ЯП.
34.Процедуры. Описание и вызов процедуры. Формальные и фактические
параметры. Семантические правила при вызове. Оператор exit. Примеры
использования процедур.
35.Функции. Описание и вызов функции. Переменная Result. Примеры
использования функций: сумма квадратов чисел от a до b, поиск заданного
числа среди введенных. Сравнение функций и процедур.
36.Способы передачи параметров: по значению и по ссылке. Понятие ссылки.
Внутренний механизм передачи параметра по ссылке. Входно-выходные
параметры.
37.Локальные и глобальные переменные. Инициализация локальной и
глобальной переменной. Обращение к нелокальной переменной на чтение и
запись и побочный эффект.
38.Область видимости и время жизни объекта. Пространство имен.
39.Принцип локальности при описании переменных.
40.Перегрузка имен подпрограмм. Разрешение перегрузки. Неоднозначности
при разрешении перегрузки.
41.Параметры по умолчанию.
42.Предварительное объявление подпрограмм.
43.Обобщенные подпрограммы. Вывод типа обобщенной подпрограммы при ее
вызове.
44.Процедурный тип и процедурные переменные. Процедурные переменные
как параметры подпрограмм. Подпрограммы обратного вызова (callback).
Пример использования процедурных переменных – вычисление
определенного интеграла.
45.Методы разработки программ сверху вниз и снизу вверх. Преимущества и
недостатки каждого метода.
46.Алгоритм вызова подпрограммы на этапе выполнения. Программный стек и
запись активации подпрограммы. Замечания: накладные расходы на вызов,
инициализация локальных переменных, переполнение программного стека,
скорость выделения памяти под запись активации, доступ к глобальным
переменным.
47.Модули. Цели введения модулей. Структура модуля. Разделы интерфейса и
реализации. Необходимость разделения на интерфейс и реализацию.
Принцип сокрытия информации. Упрощенная структура модуля.
48.Разделы инициализации и финализации. Схема компиляции программы с
модулями.
49.Алгоритм поиска имен в модулях. Модуль как пространство имен.
Системный модуль PABCSystem.
50.Библиотеки. Отличие библиотек от модулей. Подключение библиотек в
PascalABC.NET. Представление о директивах компилятора.
51.Перечислимый и диапазонный типы. Стандартные подпрограммы для
работы с перечислимым типом. Использование перечислимого типа в for и
case.
52.Описание пользовательского типа. Структурная и именная эквивалентность
типов.
53.Структурированные типы данных. Статические массивы, описание,
инициализация. Тип индексов массива. Обращение к элементу по индексу.
Выход за границы диапазона. Хранение статических массивов в памяти.
Присваивание статических массивов.
54.Динамические массивы. Хранение динамических массивов в памяти.
Присваивание динамических массивов. Сравнение динамических массивов.
Изменение длины динамического массива по ходу работы программы. Цикл
foreach.
55.Передача статических и динамических массивов в качестве параметров:
особенности использования модификаторов var и const. Именная и
структурная эквивалентность для типов статических и динамических
массивов. Динамические массивы как возвращаемые значения функций.
56.Переменное число параметров подпрограмм.
57.Задачи на одномерные массивы: сумма и произведение элементов;
инвертирование массива; поиск (реализации с for и while); поиск с барьером;
минимальный/максимальный элемент и их индексы; сдвиг влево/вправо;
циклический сдвиг; вставка элемента по заданному индексу, удаление
элемента по заданному индексу; слияние двух упорядоченных в один
упорядоченный.
58.Задачи на одномерные массивы с процедурными переменными в качестве
параметров: поиск элемента по заданному условию; количество по условию;
условный минимум/максимум; удаление всех по условию.
59.Сортировки массивов. Сортировка выбором. Пузырьковая сортировка
(обычная и с флагом). Сортировка вставками. Асимптотическая сложность
алгоритмов сортировки.
60.Бинарный поиск в упорядоченном массиве. Его асимптотическая сложность.
61.Двумерные массивы (матрицы). Двумерные динамические массивы.
Элементы строки, столбца. Создание, заполнение, вывод.
62.Задачи на двумерные массивы: вывод; сумма элементов в j-том столбце;
сумма элементов в каждом столбце; минимальный элемент в каждой строке
(2 варианта: с функцией и без); поиск элемента; обнуление элементов
выше/ниже диагонали в квадратной матрице.
63.Записи. Поля записей. Инициализация записей. Оператор with. Хранение
записей в памяти. Передача записей как параметров подпрограмм.
64.Методы
в
записях.
Объектно-ориентированный и
процедурноориентированный подходы, их сравнение. Запись как модуль и как
пространство имен. Виды методов. Обращение к полям записей из методов.
65.Записи как средство упаковки параметров (на примере модуля графических
объектов).
66.Индексная сортировка массивов записей. Сортировка массива записей по
критерию сравнения, передаваемому в качестве параметра.
67.Статические методы в записях.
68.Множества. Базовый тип множеств. Инициализация множеств. Операции с
множествами. Вывод множеств. Цикл по множеству.
69.Решето Эратосфена.
70.Символы. Коды символов. Однобайтовые кодировки. Двухбайтовые
кодировки. Стандартные подпрограммы работы с символами. Статические
методы типа char.
71.Строки. Операции со строками. Основные подпрограммы работы со
строками. Основные методы типа string (экземплярные и статические).
72.Некоторые задачи на строки: формирование строки ‘ABCDEF…Z’, сумма
всех цифр строки; удаление всех вхождений подстроки в строку; сортировка
строки слов, разделенных пробелами.
73.Преобразование строка <-> число.
74.Некоторые задачи на строки: выделение из строки целых и вещественных
чисел.
Перечень вопросов, выносимых на экзамен во 2 семестре
1. Определение файла. Преимущества файлов. Классификация файлов по типу
компонент и по способу доступа. Текстовые и двоичные файлы, их основные
характеристики.
2. Файловая переменная. Файловый указатель. Основные операции при работе
с файлами. Способы открытия файлов, различия между ними. Буферизация
файлов.
3. Подпрограммы для работы с закрытыми файлами.
4. Ошибки ввода-вывода и их обработка. Операторы try except и try finally при
работе с файлами.
5. Типизированные файлы, подпрограммы для работы с типизированными
файлами. Добавление элемента в конец файла. Возведение всех элементов в
квадрат. Использование типизированных файлов для работы с простейшими
базами данных. Сортировка элементов файла.
6. Текстовые файлы, подпрограммы для работы с текстовыми файлами. Сумма
чисел в текстовом файле. Обработка строк в текстовом файле.
7. Бестиповые двоичные файлы.
8. Указатели и адреса. Типы указателей в языке Object Pascal. Операция
разыменования. Нулевой указатель.
9. Бестиповые указатели. Совместимость по присваиванию и приведение типов
указателей.
10.Явное приведение типов указателей. Доступ к памяти, имеющей другое
внутреннее представление.
11.Неявные указатели: параметры, передаваемые по ссылке, процедурные
переменные, динамические массивы.
12.Классификация памяти. Динамическая память и динамические переменные.
Выделение и освобождение динамической памяти.
13.Ошибки при работе с динамической памятью.
14.Указатели на записи. Сравнение с объектами классов.
15.Классы и объекты. Отличие класса от записи. Представление в памяти.
Ссылочная объектная модель.
16.Сборка мусора.
17.Особенности ссылочной объектной модели: присваивание переменных
классов, переменные классов в качестве параметров подпрограмм и в
качестве возвращаемого значения функций.
18.Переменная Self.
19.Обобщенные классы и подпрограммы.
20.Пространства имен .NET, их подключение к программе на PascalABC.NET.
Пространство имен System. Вложенные пространства имен .NET. Классы
System.DateTime, System.Random. Длинные целые. Пространство имен
System.IO и класс System.IO.File. Вывод всех файлов в каталоге. Обработка
строк файла.
21.Статические и динамические структуры данных. Списки: линейные и
циклические, односвязные и двусвязные. Класс узла списка.
22.Основные операции с линейными односвязными списками: вставка в начало,
удаление из начала, вставка после текущего, удаление следующего, проход
по списку, поиск, слияние двух отсортированных списков в третий
отсортированный.
23.Основные операции с линейными двусвязными списками: инициализация,
вставка элемента в начало и конец, вставка элемента в середину перед и
после данного, удаление элемента в начале, середине и конце списка, проход
по списку. Добавление второго списка в конец первого.
24.Сравнение списков и массивов.
25.Рекурсия, примеры. Праворекурсивные и леворекурсивные определения.
Прямая и косвенная рекурсия. Рекурсивные подпрограммы. Необходимость
опережающих объявлений при косвенной рекурсии.
26.Простейшие примеры рекурсии. Глубина рекурсии. Рекурсивный спуск и
рекурсивный возврат.
27.Использование программного стека при рекурсивных вызовах.
Переполнение программного стека. Рекурсивное зацикливание.
28.Концевая рекурсия и ее замена на итерацию.
29.Примеры рекурсии: факториал числа, степень числа (2 способа,
отличающиеся глубиной рекурсии), нахождение минимального элемента в
массиве (2 способа), вывод списка. Анализ глубины рекурсии в каждом
случае. Концевая рекурсия и ее замена итерацией.
30.Доказательство завершимости рекурсии.
31.Формы рекурсивных подпрограмм (5 шт.). Каскадная рекурсия и дерево
рекурсивных вызовов.
32.Функция Аккермана.
33.Примеры плохого использования рекурсии: числа Фибоначчи. Оптимизация
рекурсивного алгоритма вычисления чисел Фибоначчи.
34.Примеры использования рекурсии: ханойские башни. Глубина рекурсии,
количество рекурсивных вызовов.
35.Быстрая сортировка Хоара. Оценка количества операций при быстрой
сортировке. Быстрая сортировка в худшем случае.
36.Генерация всех перестановок.
37.Генерация всех подмножеств.
38.Алгоритм перебора с возвратом. Обход конем шахматной доски.
39.Деревья, примеры. Основные понятия: вершины и ребра, корень, листья,
глубина дерева, идеально сбалансированное и полное дерево.
40.Рекурсивное определение дерева. Связь деревьев и рекурсии.
41.Обходы деревьев: инфиксный, префиксный, постфиксный. Обратная
польская бесскобочная запись выражения.
42.Бинарные деревья. Идеально сбалансированное бинарное дерево, его
создание. Задачи на бинарные деревья: вывод элементов в инфиксном,
префиксном и постфиксном порядке, определение количества элементов в
дереве, поиск элемента.
43. Определение минимальной суммы от корня к листу. Очевидный
рекурсивный алгоритм. Алгоритм перебора с возвратом. Метод ветвей и
44.Бинарные деревья поиска (БДП). Основные операции при работе с БДП:
добавление, поиск. Удаление из БДП (только алгоритм).
45.Сортировка деревом. Оценка количества операций при добавлении и поиске
в БДП, при сортировке деревом. Сортировка деревом в худшем случае.
46.Абстрактный тип данных (АТД), его интерфейс. Класс как реализация АТД.
Принцип отделения интерфейса от реализации, его преимущества. Защита
доступа. Модификаторы защиты доступа.
47.АТД Стек, его интерфейс. Реализация стека в виде класса на базе массива.
48.Реализация стека в виде класса на базе односвязного списка.
49.Вычисление значения выражения в польской инверсной записи с помощью
стека.
50.АТД Очередь, его интерфейс. Реализация очереди на базе односвязного
линейного списка.
51.Пример использования очереди и стека: вывод четных в прямом и нечетных
в обратном порядке.
52.Класс Динамический массив, его спецификация, интерфейс. Реализация
класса Динамический массив на базе встроенных динамических массивов.
53.Свойства классов. Свойства Count и Capacity класса Динамический массив.
54.Индексные свойства классов. Свойство Elems класса Динамический массив.
55.Класс Множество, его интерфейс. Реализация на базе класса динамического
массива. Понятие делегирования. Реализация множества на базе бинарного
дерева поиска.
56.Класс Ассоциативный массив, его интерфейс. Ключи и значения. Доступ по
индексу. Реализация на базе двух динамических массивов.
57.Пространство имен System.Collections.Generic. Стандартные классы
коллекций библиотеки .NET: стек, очередь, динамический массив,
двусвязный список, ассоциативный массив, множество. Пример
использования LinkedList. Преимущества и недостатки хеш-таблиц,
используемых для реализации классов HashSet и Dictionary.
58.Наследование, примеры. Цели наследования. Наследование как расширение
и как сужение. Пример наследования Person – Student. Замещающие методы.
Вызов унаследованного конструктора. Вид доступа protected.
59.Принцип «Открыт-закрыт» и его роль при проектировании сложных систем.
Учет будущих изменений. Пример: очередь с подсчетом элементов.
60.Наследование и включение. Пример: очередь с подсчетом элементов,
реализованная включением; недостатки.
61.Когда следует использовать наследование, а когда – включение. Примеры.
62.Виды зависимостей между классами: ассоциация, агрегация, композиция,
наследование, реализация интерфейсов. UML-диаграммы классов. Пример
UML-диаграммы Персона-Преподаватель-Студент-Старшекурсник-Группа.
63.Наследование и выявление общего предка.
64.Присваивание в иерархии предок-потомок. DownCast и UpCast.
65.Принцип подстановки.
66.Операции is и as.
67.Недостатки Assert. Класс System.Exception, его свойства. Иерархия
исключений в NET.
68.Секции on обработки исключений в блоке try. Порядок записи обработчиков
исключений. Примеры.
69.Создание класса исключения.
70.Полиморфизм и интерфейсы
71.Определение полиморфизма. Раннее и позднее связывание.
72.Позднее связывание и виртуальные методы. Переопределение виртуального
метода. Полиморфные переменные, статический и динамический тип.
73.Виртуальные методы как блоки для замены кода. Полиморфные
подпрограммы.
74.Класс Object – неявный предок всех классов в NET.
75.Переопределение методов Equals и ToString в классах Person и Student.
76.Пример – родословная переменной.
77.Цепочка виртуальности и ее разрыв. Алгоритм поиска в цепочке
виртуальности.
78.Полиморфные контейнеры. Обработка всех элементов вызовом виртуальных
методов. Абстрактные классы и методы.
79.Таблица виртуальных методов – внутренний механизм реализации
полиморфизма. Цена вызова виртуальных методов.
80.Ссылочные и размерные типы .NET. Автоупаковка и распаковка.
81.Интерфейсы. Что может и что не может присутствовать в интерфейсе.
Реализация интерфейсов.
82.Совместимость по присваиванию и операции is as для интерфейсов.
Интерфейсы и полиморфизм.
83.Сравнение наследования и реализации интерфейсов.
84.Стандартные интерфейсы NET. Интерфейс IComparable и его использование
для сортировки массива студентов.
85.Условия, налагаемые на параметры шаблонов. Секция where. Пример:
обобщенная функция поиска минимального элемента в массиве.
86.Методы расширения. Методы расширения для интерфейса IEnumerable<T>.
Фильтрация, проектирование и сортировка последовательностей.
VII. УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ
7.1. Основная литература
1.
С.С.Михалкович.
Основы
программирования.
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
для
студентов
Файлы.
Рекурсия.
курса
факультета
1
математики, механики и компьютерных наук. ЮФУ, 2007.
2.
С.С.Михалкович.
Основы
программирования.
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
для
студентов
Файлы.
Рекурсия.
курса
факультета
1
математики, механики и компьютерных наук. ЮФУ, 2007. 36 с.
3.
С.С.Михалкович. Основы программирования. Указатели. Динамические
структуры данных. Абстрактные типы данных. Классы. МЕТОДИЧЕСКИЕ
УКАЗАНИЯ для студентов 1 курса факультета математики, механики и
компьютерных наук. ЮФУ, 2007. 36 с.
4.
С.С.Михалкович. Основы программирования. Динамические массивы.
Списки.
Ассоциативные
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
массивы.
для
Деревья.
студентов
1
Хеш-таблицы.
курса
факультета
математики, механики и компьютерных наук. ЮФУ, 2007. 36 с.
5.
Н.И. Минакова, Е.С. Невская, Г.А. Угольницкий, А.А. Чекулаева, М.И.
Чердынцева Методы программирования. М.: Вузовская книга. 2000.
6.
Задачи по программированию. Под ред. Угольницкого Г.А. – М: Вузовская
книга, 2000.
7.
Вирт Н. Алгоритмы + структуры данных=программы М: Мир, 1989.
7.2. Дополнительная литература
1.
В.В. Фаронов. Turbo Pascal 7.0. Начальный курс. М.: Нолидж. 1997.
2.
В.В. Фаронов. Turbo Pascal 7.0. Практический курс. М.: Нолидж. 1999.
3.
М.Э.Абрамян. Практикум по программированию не языке Паскаль. Ростов
н/Д, ЦВВР, 2006.
7.3. Список авторских методических разработок
1.
С.С.Михалкович.
Основы
программирования.
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
для
студентов
Файлы.
Рекурсия.
курса
факультета
1
математики, механики и компьютерных наук. ЮФУ, 2007.
2.
С.С.Михалкович.
Основы
программирования.
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
для
студентов
Файлы.
Рекурсия.
курса
факультета
1
математики, механики и компьютерных наук. ЮФУ, 2007. 36 с.
3.
С.С.Михалкович. Основы программирования. Указатели. Динамические
структуры данных. Абстрактные типы данных. Классы. МЕТОДИЧЕСКИЕ
УКАЗАНИЯ для студентов 1 курса факультета математики, механики и
компьютерных наук. ЮФУ, 2007. 36 с.
4.
С.С.Михалкович. Основы программирования. Динамические массивы.
Списки.
Ассоциативные
МЕТОДИЧЕСКИЕ
УКАЗАНИЯ
массивы.
для
Деревья.
студентов
1
Хеш-таблицы.
курса
факультета
математики, механики и компьютерных наук. ЮФУ, 2007. 36 с.
7.4. Периодические издания
7.5. Интернет-ресурсы
1.
http://pascalabc.net Сайт системы программирования PascalABC.NET
2.
http://edu.mmcs.sfedu.ru Сайт системы Moodle мехмата ЮФУ
7.6.
Программное
обеспечение
коммуникационных технологий
современных
информационно-
VIII. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ
ДИСЦИПЛИНЫ
8.1. Учебно-лабораторное оборудование
1.
Мультимедийная аудитория.
2.
Учебные лаборатории и классы, оснащенные современными компьютерами,
объединенными в локальные вычислительные сети с выходом в Интернет.
8.2. Программные средства
1.
Операционные системы Windows, Linux;
2.
Visual Studio 2010 или выше;
3.
Система программирования PascalABC.NET;
4.
Электронный задачник по программированию Programming Taskbook.
8.3. Технические и электронные средства
1.
Презентации.
2.
Контролирующие
программы:
электронный
задачник
Programming
Taskbook;
3.
Веб-среда разработки и исполнения программ ProgrammingABC.WDE;
4.
Учебная среда Moodle для проверки работ, проведения самостоятельных
работ, тестов, оперативного консультирования.
VIII. УЧЕБНАЯ КАРТА ДИСЦИПЛИНЫ
1 семестр
№
1
3
1
Виды контрольных
мероприятий
Текущий контроль
Посещение лекций
Работа на практических
занятиях
Рубежный контроль
Контрольная работа
Промежуточная
аттестация
Зачет итого
Экзамен
Экзамен 1 вопрос
Экзамен 2 вопрос
Экзамен задача
Экзамен доп. вопросы
Экзамен итого
Количество
баллов за 1
контрольное
мероприятие
Модуль 1
6
2
2
2
12
4
4
4
42
Макс. к-во
баллов
60
14
14
14
20
20
20
Модуль 3
Модуль 2
Количество баллов по модулю
10
10
16
4
40
Для получения зачёта студент должен набрать от 45 до 60 баллов.
Оценка на экзамене: складываются баллы по зачету и по экзамену. Перевод
баллов в оценку осуществляется следующим образом:
3 – от 70 до 80 баллов
4 – от 81 до 90 баллов
5 – от 91 до 100 баллов
2 семестр
№
1
3
1
Виды контрольных
мероприятий
Текущий контроль
Посещение лекций
Работа на практических
занятиях
Рубежный контроль
Контрольная работа
Промежуточная
аттестация
Зачет итого
Экзамен
Экзамен 1 вопрос
Экзамен 2 вопрос
Экзамен задача
Количество
баллов за 1
контрольное
мероприятие
Модуль 4
4
1
1
1
1
12
3
3
3
3
44
Макс. к-во
баллов
60
11
11
11
11
15
15
15
15
10
10
16
Модуль 5
Модуль 6
Модуль 7
Количество баллов по модулю
Экзамен доп. вопросы
Экзамен итого
4
40
Для получения зачёта студент должен набрать от 45 до 60 баллов.
Оценка на экзамене: складываются баллы по зачету и по экзамену. Перевод
баллов в оценку осуществляется следующим образом:
3 – от 70 до 80 баллов
4 – от 81 до 90 баллов
5 – от 91 до 100 баллов
Download