- •1.Принципиальная схема компьютера. Потоки управления и потоки данных.
- •3. Принципы фон Неймана.
- •4. Создание исполняемых программ в машинных кодах, на Ассемблере и на языках высокого уровня.
- •5. Компиляторы и интерпретаторы, их преимущества и недостатки.
- •6. Классификация программных кодов. Схема создания исполняемого кода.
- •8. Определение и свойства алгоритма. Способы записи алгоритмов.
- •9. Блок-схемы. Основные управляющие структуры блок-схем.
- •10. Технологии программирования. Структурное программирование.
- •17. Операторы присваивания, инкремента и декремента. L-value выражения.
- •18. Условный оператор. Оператор запятая.
- •19. Инструкция-выражение. Инструкции выбора if и switch.
- •20. Инструкции передачи управления..
- •22. Алгоритмы обработки числовых данных (алгоритм Евклида, нахождение всех делителей числа, нахождение простых делителей числа, нахождение простых чисел, чисел Фибоначчи).
- •23. Указатели. Типизированные и безтиповые указатели. Операция разыменования и операция получения адреса.
- •25. Арифметические операции над указателями.
- •26. Проблемы и типичные ошибки при работе с указателями.
- •30. Двумерные и многомерные массивы (алгоритмы обработки матриц).
- •31. Многомерные массивы. Реализация многомерных массивов с помощью указателей.
- •32. Динамическое выделение памяти под одномерные и двумерные массивы.
- •34.Передача массивов в качестве параметров.
- •35. Подпрограммы. Определение и объявление подпрограмм. Процедуры и функции.
- •36.Формальные и фактические параметры. Соответствие типов в формальных и фактических параметрах.
- •38. Механизм работы с модифицируемыми параметрами, использующий указатели.
- •40. Использование ссылочного типа при выходе из подпрограмм. Константные ссылки.
- •41. Побочный эффект подпрограмм, его преимущества и недостатки.
- •42. Рекурсия. Формы рекурсивных подпрограмм. Глубина и текущий уровень рекурсии.
- •43. Зацикливание рекурсивных подпрограмм. Примеры неэффективности рекурсии.
- •44. Перегрузка функций. Ошибки, возникающие при перегрузке функций.
- •45.Указатели на функции. Callback-функции.
- •46. Функция main. Передача параметров в функцию main.
- •47. Директивы препроцессора. Директивы #pragma и #include.
- •48. Директивы #define и #undef. Константы времени компиляции.
- •49. Макросы. Преимущества и недостатки использования макросов.
- •50.Директивы условной компиляции. Страж включения.
- •51. Пространства имён. Работа с пространствами имён. Оператор using. Приоритеты и конфликты имён.
- •52. Строки. Операции над строками.
- •54. Строки string. Функции стандартной библиотеки для обработки строк.
- •55. Основные алгоритмы обработки строк (выделение слова, подстроки, разбиение на слова, поиск символа, поиск слова).Ответ в 53.
- •56. Пользовательские типы данных. Перечислимый тип enum.
- •57. Пользовательские типы данных. Тип struct. Массивы структур.
- •58. Объединения (union). Битовые поля.
- •59. Понятие сложности алгоритма. Оценка сложности с использованием о-символики.
- •60. Алгоритмы сортировки и поиска. Обменные сортировки. Сортировки вставками. Сортировки выбором. Сравнительный анализ методов сортировки.
- •61. Последовательный поиск. Бинарный поиск. Сравнительный анализ методов поиска.
- •62. Файлы. Основные принципы работы с файлами. Механизм чтения данных из файла. Определение конца файла. Открытие и закрытие файлов.
- •63. Текстовые файлы. Создание и обработка. Функции ввода/вывода в стиле с. Ввод-вывод нуль-терминированных строк. Посимвольный ввод-вывод. Форматированный ввод-вывод.
- •66. Исключительные ситуации. Системные и пользовательские исключения. Оператор try …catch. Виды блоков catch. Выброс исключений. И их обработка. Оператор throw.
- •70. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием списков.
- •71. Структура данных стек. Реализация стека с использованием массива.
- •72. Структура данных стек. Реализация стека с использованием списков.
- •73. Структуры данных. Списки. Типы списков. Представление этих структур в статической и динамической памяти. Обработка однонаправленных и двунаправленных списков. Сборка мусора.
- •75. Реализация линейного однонаправленного списка с использованием массивов.
- •76. Деревья. Обходы деревьев.
- •77. Бинарные поисковые деревья. Определение, концевой обход бпд.
- •78. Поиск и вставка нового элемента в бпд.
- •79.Удаление элемента из бпд.
- •80. Реализация бпд с использованием динамической памяти.
58. Объединения (union). Битовые поля.
Объединением называется область памяти, использующаяся для хранения данных разных типов. Причем одновременно в объединении могут храниться данные только одного определенного типа. Данные входящие в объединение называются его полями (элементами). Тип описывающий объединение также называется объединением.
С помощью объединения к одной и той же области памяти можно обращаться как к данным различного типа. Объединение можно рассматривать как структуру, все элементы которой имеют одинаковый начальный адрес в памяти. Длина объединения определяется наибольшей из длин полей объединения. Объединения позволяют сэкономить память в том случае, если необходимо хранить только один из элементов объединения, но заранее неизвестно, какой именно. Синтаксис объединений аналогичен синтаксису структур. union [имя_типа_объединения] { тип_1 элемент_1; тип_2 элемент_2; … тип_n элемент_n; } Битовые поля Поля битов – это особый тип полей структуры. Они используются, если нужно запомнить данные, для которых необходима ячейка памяти менее одного байта. Это могут быть, например, флажки, которым достаточно одного бита для представления значений в двоичной логике. Битовыми полями называются элементы структуры или объединения, которые определяются как последовательность битов. Синтаксис описания битового поля следующий: Идентификатор_типа [имя_поля]: ширина_поля;
59. Понятие сложности алгоритма. Оценка сложности с использованием о-символики.
10.1. Оценка алгоритмов Для большинства задач существует много различных алгоритмов. Какой из них выбрать для решения конкретной задачи? Чаще всего интересен порядок роста необходимых для решения задачи времени и емкости памяти при увеличении входных данных. Свяжем с каждой задачей некоторое число , называемое ее размером, которое выражало бы меру количества входных данных. Например, размером задачи умножения матриц, может быть наибольший размер матриц сомножителей. Размером задачи сортировки массива – количество чисел. Пространственная (или емкостная) сложность измеряется количеством памяти, требуемой для выполнения алгоритма . Временная сложность алгоритма определяется временем, необходимым для его выполнения. Лучший способ сравнения эффективностей алгоритмов состоит в сопоставлении их порядков сложности. Этот метод применим как к временной, так и пространственной сложности. Если алгоритм обрабатывает входные данные размера n за время cn2, где c – некоторая константа, то временная сложность этого алгоритма есть О(n2) (читается “порядка n2”). Точнее, говорят, что неотрицательная функция f(n) есть O(g(n)), если существует такая константа с, что для для всех n из некоторой окрестности точки n0 имеет место неравенство f(n)<=c*g(n). Обозначают f(n) = O(g(n)) И функция f(n) есть о(g(n)), если для любого с>0 существует такая окрестность точки n0, что для для всех n из этой окрестности имеет место неравенство f(n)<c*g(n). Обозначают f(n) = о(g(n))