Белорусский государственный университет
УТВЕРЖДАЮ
Декан* радиофизики и электроники_факультета
_С.Г.Мулярчик
(подпись) (И.О.Фамилия)
(дата утверждения) Регистрационный № УД-/р.** Программирование (название дисциплины) Учебная программа для специальности***:
аэрокосмические радиоэлектронные и _ информационные системы и технологии (код специальности) (наименование специальности) _ физическая электроника (код специальности) (наименование специальности) прикладная информатика _ (код специальности) (наименование специальности) Факультет _радиофизики и электроники (название факультета) Кафедра информатики_ (название кафедры) Курс (курсы) _ Семестр (семестры) _1, Лекции 58_ Экзамен (количество часов) (семестр) Зачет _1_ Практические (семинарские) (семестр) занятия (количество часов) Лабораторные Курсовой проект (работа) (семестр) занятия _100_ (количество часов) КСР _ (количество часов) Всего аудиторных часов по дисциплине _ (количество часов) Всего часов Форма получения высшего по дисциплине 262 образования очная (количество часов) Составил(а) Л.В.Стрикелева, к.п.н., доцент_ (И.О.Фамилия, степень, звание) 2010-10-22_ г.
* Заведующий общеуниверситетской кафедрой **Регистрируется в деканате факультета/на общеуниверситетской кафедре *** Для программ по естественнонаучным и общепрофессиональным дисциплинам указывается, как правило, код и наименование профиля или направления образования или перечисляются несколько специальностей.
Учебная программа составлена на основе _ типовой учебной программы (название типовой учебной программы «Программирование», регистрационный № ТД-G.177/типовая (учебной программы (см. разделы 5-7 Порядка)), дата утверждения, регистрационный номер) от 3 апреля 2009 г Рассмотрена и рекомендована к утверждению на заседании кафедры информатики (название кафедры) (дата, номер протокола) Заведующий кафедрой С.Г.Мулярчик (подпись) (И.О.Фамилия) Одобрена и рекомендована к утверждению учебно-методической (методической) комиссией радиофизики и электроники факультета/общеуниверситетской кафедры (дата, номер протокола) Председатель (подпись) (И.О.Фамилия)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
Учебная программа «Программирование» разработана для студентов специальностей _ Аэрокосмические радиоэлектронные и информационные системы и технологии, Физическая электроника, Прикладная информатика в соответствии с требованиями Типовой учебной программы «Программирование», регистрационный № ТД-G.177/типовая от 3 апреля 2009г.систематизированных знаний и навыков в области программирования. Ее основная задача – подготовить обучаемых к постановке и решению на компьютере задач радиофизики, электроники, информатики.
Дисциплина «Программирование» изучается студентами названных специальностей на 1 курсе и для ее усвоения достаточно знаний по математике, физике, информатике в объеме программ общего среднего образования.
В результате изучения дисциплины обучаемый должен:
методы и современные технологии программирования;
строить и анализировать алгоритмы решения типовых задач разрабатывать программы для компьютеров на языке программирования С++ с использованием технологий структурного и объектно-ориентированного программирования.
Изучение курса базируется на языке программирования С++, в полной мере поддерживающем технологии структурного и объектноориентированного программирования.
Программа рассчитана на 262 учебных часа, из них 158 часов – аудиторная нагрузка. Распределение аудиторных часов по видам занятий:
лекции - 58 часов, лабораторные работы – 100 часов.
СОДЕРЖАНИЕ УЧЕБНОГО МАТЕРИАЛА
10.11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
* Высшие учебные заведения имеют право перераспределять аудиторные часы между разделами и темами типовой учебной программы Номер раздела, темы, занятия объединения). Файлы и их организация. Классы.
Динамические структуры данных.
Базовые элементы С++ библиотечные функции. Комментарии и их использование. Директивы препроцессора.
Описание информационного объекта в программе.
Декларация (объявление) и определение переменных как формы описания. Переменные и адреса памяти: R-value и L-value значения. Области видимости переменных.
Структура программного файла. Пример сложной программы. Основные правила написания и оформления программ.
Атрибуты информационного объекта. Класс памяти. Примеры использования переменных разных классов памяти. Область действия.
Пространство имен.
Выражения и операции Особенности представления чисел по двоичному основанию. Особенности выполнения арифметических операций над целыми и вещественными числами.
Константы (именованные и неименованные).
Символьные и строковые константы.
Классификация и приоритет операций.
Арифметические операции. Инкрементные и декрементные операции. Операции отношения и логические операции. Побитовые операции.
Операция присваивания. Особенности операции присваивания. Операция присваивания в правой части выражения. Множественное присваивание.
Тернарная операция (условные выражения).
Операция последовательного вычисления.
Стандартные математические функции.
Программирование алгебраических выражений.
Неявные и явные преобразования типов в выражениях. Преобразование типов при присваивании. Иерархия встроенных типов данных. Примеры преобразования типов.
Основные стандартные функции для работы со значениями простых типов. Целочисленная арифметика. Математические функции языка.
Базовые алгоритмические структуры и их реализация в С++ Алгоритм и его свойства. Способы записи алгоритмов. Понятие псевдокода, Графическое представление алгоритма. Следование, ветвление и цикл как базовые алгоритмические структуры.
Алгоритмический язык как средство записи алгоритма.
Принципы разработки алгоритмов.
Операциональный подход и его недостатки.
Пример операционального представления алгоритма.
Структурный подход. Технологические принципы структурного программирования Простейшие алгоритмы структурной реализации алгоритмов работы с величинами (нахождение наибольшего из трех чисел, нахождение суммы N чисел, нахождение суммы положительных чисел).
Цели и принципы структурного программирования. Базовые управляющие структуры: следование, ветвление, повторение.
Операторы. Классификация операторов языка.
Простые операторы. Составной оператор.
Структурные операторы. Условные операторы.
Реализация управляющих структур средствами языка программирования. Условные операторы if…else и if. Вложенные операторы if…else.
Цепочка операторов if-then-else.
Многовариантность использования условных операторов для реализации алгоритма и понятие о вычислительной эффективности алгоритма.
Тернарный условный оператор. Оператор switch и его эмуляция с помощью if…else.
Операторы организации циклов итерационные циклы. Операторы организации циклов. Циклы с предусловием, с постусловием, со счетчиком. Вложенные циклы. Примеры организации циклов (табулирование функции на отрезке, суммирование ряда). Оптимизация циклов.
Цикл «while»: Особенности и примеры использования. Цикл «do…while». Цикл for.
Использование двух счетчиков в цикле.
Бесконечные циклы. Сравнение операторов циклов и их избыточность. Организация выхода из цикла.
Операторы break и continue, особенности их работы и эмуляция с помощью if.
Корректная организация циклов. Приемы эффективного программирования.
Примеры реализации алгоритмов функции на отрезке. Реализация алгоритмов с вложенными циклами. Вычисление значения многочлена степени n по схеме Горнера.
Вычисление суммы бесконечного ряда.
Представление информации в компьютере символов. Представление чисел. Позиционная и непозиционная системы счисления. Представление чисел в позиционной системе счисления. 2-ичная, 8-ичная, 16-ичная и двоично-десятичная системы счисления. Перевод чисел из одной системы счисления в другую. Формы представления чисел.
Представление в памяти компьютера целых чисел.
Прямой и дополнительный коды. Отличительные особенности представления целых чисел в ЭВМ:
ограниченность диапазона представимых чисел и выполнение арифметических операций по модулю.
Представление чисел в форме с фиксированной точкой. Нормализация. Представление чисел в форме с плавающей точкой. Проблемы представления чисел в форме с плавающей точкой (ограниченный диапазон представимых чисел, конечное число чисел на вещественной оси, обособленность 0, различная плотность множества представимых чисел на числовой оси). Точность представления чисел в компьютере. Ошибки выполнения арифметических операций над вещественными числами на ограниченной разрядной сетке. Ошибки при сравнении вещественных чисел на точное равенство.
Представление логических данных. Представление графической информации. Представление звуковой информации.
Указатели. Ссылки указателями. Присваивание указателей.
Нетипизированные указатели. Неявное и явное приведение типов указателей. Опасность явного приведения типов. Сравнение указателей. Виды указателей (указатель на константу, константный указатель, константный указатель на константу).
Ссылки.
Правило интерпретации списка атрибутов.
Динамическое распределение памяти. Операторы new и delete.
как механизм декомпозиции. Структура функций.
Формальные параметры и аргументы. Прототипы функций. Способы передачи данных в функцию и из неё. Стандартные функции.
Функция в левой части операции присваивания.
Дополнительные возможности функций (встраиваемые функции, параметры по умолчанию, переменное число параметров в функции).
Перегрузка функций. Шаблоны функций.
Элементы оптимизации работы с функциями.
Рекурсия. Рекурсивные алгоритмы и обеспечение рекурсии средствами языка программирования.
Глубина и текущий уровень рекурсии. Структуры рекурсивных процедур: выполнение действий на рекурсивном спуске, на рекурсивном возврате, на спуске и на возврате. Особенности использования рекурсивных подпрограмм.
Указатель на функцию. Обобщенные алгоритмы.
Вычисление интеграла. Вычисление корня нелинейного уравнения.
Базовые структуры данных Объявление и инициализация одномерных массивов. Указатели и одномерные массивы.
Интерпретация имени массива как константного указателя. Ввод-вывод одномерных массивов.
Операция индексирования. Примеры алгоритмов, использующих одномерные массивы.
Передача одномерного массива в функцию.
Способы передачи. Массив указателей.
Динамические одномерные массивы.
Перегрузка функций при работе с массивами.
Перегрузка шаблона.
Строки символов. Строки символов, завершающиеся нулевым байтом: описание, функции для обработки, ограничения на действия.
Операции над строками. Особенности ввода строк:
контроль длины вводимой строки, ввод строки с разделителями.
Стандартные функции работы со строками.
Алгоритмы решения задач с использованием функции strtok. Передача строки в качестве параметра.
Многомерные массивы и их размещение в памяти.
Операции над массивами. Указатели и многомерные массивы. Указатели на указатели, массивы указателей на указатели.
Двумерные массивы. Ввод-вывод двумерных массивов. Эмуляция двумерных массивов.
Передача двумерного массива в качестве параметра. Способы передачи.
Динамические двумерные массивы.
Базовые алгоритмы работы с массивами.
Построчная обработка матриц. Обработка матрицы по столбцам. Обработка всей матрицы и ее части.
Преобразование матрицы (перестановка строк, перестановка столбцов, удаление строк, вставка строк, построение матриц по некоторому закону).
Архитектурно-функциональные принципы построения компьютеров Понятие вычислительной системы (ВС).
Структура и архитектура ВС. Содержание понятия «поколение ЭВМ». Архитектурнофункциональные принципы построения первых ЭВМ (принципы фон Неймана). Структура и принципы работы ЭВМ 1-го, 2-го, 3-го, 4-го и последующих поколений) в контексте повышения производительности. Тенденции развития вычислительной техники. Конвейеризация вычислений. Клиент-серверная архитектура.
Распределенная обработка данных.
Проектирование и тестирование программы Программирование как процесс. Постановка задачи. Проектирование программы Жизненный цикл ПО. Отладка и тестирование программы.
Введение в объектно-ориентированное программирование Структуры. Объявление структурных типов.
Объявление переменных структурного типа, их инициализация и размещение в памяти. Доступ к членам структуры. Вложенные структуры.
Указатели на структуры. Массивы структур.
Поля битов в структурах. Объединения.
Понятие сложной системы. Способы декомпозиции сложных систем. Алгоритмическая и объектноориентированная декомпозиция. Понятия объектно-ориентированного проектирования и объектно-ориентированного программирования.
Принципы построения структурных и объектных иерархий. Классы и объекты. Понятия инкапсуляции, наследования и полиморфизма как основных принципов ООП.
Инкапсуляция Объявление классов. Спецификаторы доступа.
Методы класса: объявление и определение.
Определение экземпляров класса (объектов).
Константные объекты. Указатели на объекты.
Динамическое выделение памяти для объекта.
Доступ к полям и методам. Инкапсуляция как объединение данных и методов. Инкапсуляция как защита объекта от внешнего воздействия путем организации доступа через явные интерфейсы.
Конструкторы. Инициализация переменных-членов класса с помощью конструкторов. Перегрузка конструкторов. Конструктор по умолчанию.
Конструктор с параметрами. Конструктор копирования. Стандартный конструктор копирования и ограниченность возможностей его использования при работе с указателями – членами класса. Деструкторы. Размещение объектов в памяти. Указатель объекта на себя (this).
Основы системы ввода-вывода Потоки. Классы потоков. Файлы. Понятие физического и логического файлов. Общие принципы и средства работы с файлами.
Последовательный и прямой доступ к файлу.
Форматированный ввод-вывод. Принципы организации бесформатного ввода-вывода.
Текстовые и бинарные файлы и их структура.
Чтение из файла и запись в файл.
Декомпозиция и взаимодействие классов Методы иерархической классификации:
классическая категоризация, концептуальная кластеризация, теория прототипов. Отношения между классами: обобщение, агрегация, композиция, зависимость. Способы реализации композиции.
Статические переменные и константы – члены класса. Статические функции – члены класса.
Константные объекты. Константные поля и методы Шаблоны классов Объявление шаблона классов. Основные свойства шаблона классов и его компиляция. Методы шаблона классов. Определение объекта шаблона классов. Примеры шаблонов классов.
Стандартная библиотека шаблонов.
Связанные динамические структуры данных Указатели и ссылки на объекты. Указатели на компоненты классов. Массивы объектов и поляметод.указания массивы в классе. Передача объектов в функцию.
Основные виды связанных динамических структур данных: линейные списки, очереди, стеки, деревья.
Основные приемы работы со связанными динамическими структурами данных.
Абстрактные типы данных Принципы построения абстрактных типов данных.
Конструирование интерфейсов доступа к абстрактным типам данных. Примеры конструирования абстрактных типов данных Перегрузка операторов Операторы как функции. Перегрузка унарных и бинарных операторов. Использование дружественных функций для перегрузки операторов. Особенности перегрузки операторов в шаблонах классов.
Исключения Понятие исключения. Обработка исключений.
Возбуждение и перехват исключений. Вложенные исключения.
Наследование Базовый класс и наследование от базового класса.
Производные классы. Управление доступом при наследовании. Конструкторы и деструкторы в производных классах. Конструктор копирования в производном классе.
Полиморфизм Полиморфизм и позднее связывание. Виртуальные функции. Использование указателей на объекты классов. Чистые виртуальные функции и абстрактные классы. Виртуальные деструкторы.
ИНФОРМАЦИОННАЯ ЧАСТЬ*
Литература основная:1. Лафоре Р. Объектно-ориентированное программирование на С++.
Классика Computer Science/ 4-е изд –СПб.: Питер, 2007. – 928с.
2. Павловская Т.А. С/С++. Программирование на языке высокого уровня – СПб.: Питер, 2005. – 461с.
3. Подбельский В.В. Стандартный С++: учеб.пособие. - М.: Финансы и статистика, 2008. – 688с.
4. Дейтел Харви, Дейтел Пол. Как программировать на С++: Пер. с англ.
– М.: ЗАО «Издательство БИНОМ», 1998г. – 1024с.
5. Стрикелева Л.В. Конспект лекций (в электронном виде).
6. Стрикелева Л.В. Тестовые вопросы (в электронном виде) по материалу лекций и лабораторных работ для подготовки к сдаче тестов.
7. Стрикелева Л.В. Тесты в среде E-University 8. Стрикелева Л.В. Для каждой лабораторной работы (в электронном виде) : задания, методические указания.
Литература дополнительная:
1. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование:
Практикум. – СПб.: Питер, 2007. – 239с.
2. Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. – СПб.: Питер, 2008. – 265с.
3. Шиманович Е.Л. С/С++ в примерах и задачах. Минск, ООО «Новое знание», 2004, –528с.
4. Шилдт Г. Искусство программирования на С++. – СПб.:БХВ – Петербург, 2005. – 496с.
5. Буч Г. Объектно – ориентированный анализ и проектирование. Москва, *Приводится перечень основной и дополнительной литературы. Может быть дополнительно приведен перечень лабораторных, практических занятий, тематика семинарских занятий, реферативных работ, тестовые задания, список компьютерных программ, другая значимая информация.