Список экзаменационных вопросов по курсу "Системы программирования" в бакалавриате (гр. 231), 2009/10 учебный год

Список экзаменационных вопросов по курсу
СИСТЕМЫ ПРОГРАММИРОВАНИЯ Бакалавриат, гр. 231. 2010 год

Лекторы А.В.Столяров, И.Н.Полякова

Программное обеспечение систем программирования

  1. Жизненный цикл и цикл разработки программного продукта
  2. Понятие и состав системы программирования, её роль и место в составе вычислительной системы
  3. Требования к редактору текстов, предназначенному для программирования. Пример: редактор vim.
  4. Понятия интерпретатора и компилятора, схемы их работы. Основные возможности компилятора gcc
  5. Объектный код, объектные модули и редактор связей. Библиотеки.
  6. Программное обеспечение для поддержки отладки программ. Примеры.
  7. Основные возможности отладчика gdb. Три режима запуска gdb.
  8. Назначение и принципы работы систем автоматизированной сборки. Основные возможности программы GNU make.
  9. Автоматическое отслеживание зависимостей от включаемых файлов с помощью GNU make и компилятора gcc
  10. Назначение и принципы функционирования систем контроля версий. Основные возможности системы CVS.

Элементы теории формальных языков и теории трансляции

  1. Основные понятия и определения теории формальных языков. Примеры.
  2. Классификация формальных грамматик и языков по Хомскому. Примеры.
  3. Соотношения между типами грамматик, соотношения между типами языков. Эквивалентные и почти эквивалентные грамматики.
  4. Бесплодные и недостижимые символы. Приведенные грамматики. Алгоритм приведения грамматики.
  5. Вывод. Дерево вывода. Примеры.
  6. Понятие неоднозначности грамматики и языка. Примеры.
  7. Деревья вывода при разборе по регулярным грамматикам.
  8. Регулярные грамматики и конечные автоматы. Алгоритмы построения грамматики по автомату и автомата по леворегулярной грамматике.
  9. Детерминированные и недетерминированные конечные автоматы. Алгоритм преобразования НКА в ДКА.
  10. Синтаксический анализ. Метод рекурсивного спуска.
  11. Модификация метода рекурсивного спуска для грамматик с итерациями и для грамматик, содержащих epsilon-правила. Применимость метода к таким грамматикам.
  12. Пути преобразования грамматик, не удовлетворяющих условиям применимости метода рекурсивного спуска.
  13. Генерация кода и синтаксически управляемый перевод. примеры.
  14. Польская инверсная запись (ПОЛИЗ) арифметических выражений. Интерпретация ПОЛИЗа. Алгоритм Дейкстры для перевода выражений в ПОЛИЗ.
  15. Расширение ПОЛИЗа для представления произвольных программ; ПОЛИЗ как язык внутреннего представления программ.

Язык C++

  1. Объектно-ориентированное программирование (ООП) -- новая технология (парадигма) программирования. ООП-анализ.
  2. Пространства имен в языке Си++.
  3. Основные свойства языка, поддерживающего ООП.
  4. Понятие класса и объекта. Описание класса.
  5. Управление доступом к членам класса -- public, private, protected.
  6. Операции . и ->, символ ::, указатель this.
  7. Объявления и описания функций-членов класса; эффект inline.
  8. Специальные функции -- конструкторы и деструктор.
  9. Конструктор копирования.
  10. Конструктор копирования и операция присваивания: содержательная связь и различие.
  11. Ссылки и указатели в Си++.
  12. Операторы new и delete.
  13. Друзья класса, "законы" дружбы. Сравнение функции-члена и функции-друга: описание, вызов.
  14. Обработка исключений в C++. Преобразование типов в обработчиках исключений.
  15. Перегрузка функций. Перегрузка и неоднозначность.
  16. Функции с параметрами по умолчанию.
  17. Алгоритм поиска оптимально отождествляемой (best-matching) функции (1-3 шаги - стандартные преобразования).
  18. Алгоритм поиска оптимально отождествляемой (best-matching) функции (4-5 шаги - пользовательские преобразования).
  19. Перегрузка операторов. Перегрузка с помощью функции-члена и функции-друга.
  20. Перегрузка бинарных операций в С++.
  21. Перегрузка унарных операций в С++.
  22. Особенности перегрузки операций ++ и --, операции индексации в С++.
  23. Особенности перегрузки операции присваивания.
  24. Статические члены класса.
  25. Константные функции-члены.
  26. Одиночное наследование. Правила наследования. Видимость при наследовании.
  27. Конструкторы и деструкторы при наследовании.
  28. Указатели на базовый и производный классы, преобразование указателей.
  29. Динамический полиморфизм. Виртуальные функции.
  30. Чисто виртуальные функции. Абстрактные классы.