- •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. Реализация бпд с использованием динамической памяти.
66. Исключительные ситуации. Системные и пользовательские исключения. Оператор try …catch. Виды блоков catch. Выброс исключений. И их обработка. Оператор throw.
При работе программ возникают т.н. исключительные ситуации, когда дальнейшее нормальное выполнение приложения становится невозможным. Причиной исключительных ситуаций могут быть как ошибки в программе, так и неправильные действия пользователя, неверные данные и т.д. Программист должен иметь в своем распоряжении средства для обнаружения и обработки таких ситуаций. Простейший формат защищенного блока имеет вид
try {операторы_защищенного_блока} catch(...) {обработчик_ошибочной_ситуации}
Многоточие является частью синтаксиса языка! Работа инструкции try … catch выполняется следующим образом. Выполняются инструкции, входящие в состав блока try (защищенный блок). Если при их выполнении исключение не возбуждается (в C++ чаще используется термин «выброс исключения»), то блок catch пропускается. При выбросе исключения выполнение защищенного блока прекращается, и начинают работать инструкции, записанные в блоке catch. Основной смысл этих инструкций – корректная обработка исключительной ситуации. Кроме того, в блок catch имеет смысл поместить код, который освобождает ресурсы, захваченные выполнившимися инструкциями из блока try. После окончания работы блока catch исключение считается обработанным, и управление передается на первую инструкцию, следующую за конструкцией try …catch. Инициализация исключений и их обработка
Гораздо более интересным является механизм создания собственных исключений. Для их возбуждения используется оператор throw выражение
Тип выражения, указанного в операторе throw, определяет тип исключительной ситуации, а значение может быть передано обработчику прерываний. Этот механизм, заявленный как стандартный, представляется весьма экзотическим без использования механизма классов. И только использование стандартных классов-исключений или разработка собственных классов позволяют в полной мере оценить все возможности такого подхода.
Соответственно, полный формат защищенного блока имеет вид
try {операторы_защищенного_блока} {catch-блоки}…
67. Структура данных очередь. Линейная очередь. Реализация очереди с использованием массива. Это структура данных, представляющая собой совокупность однотипных элементов, над которой определены две основных операции:
Вставка в очередь;Извлечение из очереди. При этом извлекается тот элемент, который был первым вставлен в очередь. В соответствии с правилами этой операции очередь еще называют структурой типа FIFO (“first in – first out”).
Никакие другие операции над классической очередью недопустимы.
Из механизма FIFO следует, что в очереди доступны два элемента – первый и последний.
Первый способ представляет очередь в виде массива и двух целочисленных переменных start и end.
Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдёт новый элемент. При добавлении элемента в очередь в q[end] записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n. Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов.
68. Структура данных очередь. Линейная очередь. Реализация очереди с использованием списков. Связный список Второй способ основан на работе с динамической памятью. Очередь представляется в качестве линейного списка, в котором добавление/удаление элементов идет строго с соответствующих его концов.Преимущества данного метода: размер очереди ограничен лишь объёмом памяти.Недостатки: сложнее в разработке; требуется больше памяти; при работе с такой очередью память сильнее фрагментируется; работа с очередью несколько медленнее.
69. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием массива.В общем случае, очередь – это линейный список, доступ к элементам которого происходит по принципу F I F O (First In and First Out – первым пришел и первым ушел).
Для очереди характерны две операции – занесение элемента в очередь и извлечение (считывание) элемента из очереди. В простой очереди для работы с данными доступны две позиции – начало (из этой позиции происходит извлечение) и конец (в эту позицию заносится входящий элемент) или "голова" и "хвост". Произвольный доступ к элементам, в отличии от массивов, формально не допускается. Операция извлечения (считывания) формально является разрушающей. Это означает, что считанные данные становятся недоступными. Возможно, явного разрушения (уничтожения) данных и не происходит, но к ним нет доступа, используя стандартные операции работы с очередью.Области применения очередей могут быть разделены на две группы – системное применение и прикладное. К применению очередей в системных целях относятся: диспетчеризация задач операционной системой;
буферизация ввода/вывода;Прикладное применение: моделирование процессов (например, систем массового обслуживания);использование очередей как вспомогательных структур данных в каких-либо алгоритмах (например, при поиске в графах).Одним из примеров очереди является машина Тьюринга. Более простым механическим примером является труба с текущей только в одном направлении жидкостью.Классификация очередей. По архитектуре очереди делятся на линейные и кольцевые (циклические). По количеству позиций записи и считывания – на простые и приоритетные. Кроме того существует специальный вид очереди – двухвходовая очередь или дек (DEQue – Double Ended Queue; queue – очередь).
На практике очереди могут реализовываться при помощи одномерных массивов или свЯзных списков, что хорошо иллюстрирует различие между логическим и физическим уровнями структур данных (массив на физическом уровне является очередью на логическом).
Ниже приведёны примеры процедур занесения и извлечения для линейной очереди на языках Паскаль и Си++.Работа с линейной очередью, построенной на основе массива, становится невозможной (как запись, так и считывание), когда будет достигнут предельный размер массива, используемого для хранения очереди.Кольцевая очередь
От указанного выше недостатка свободна кольцевая (или циклическая) очередь. В такой очереди массив, в котором храняться элементы очереди, используется как кольцевой список, а не как линейный.Чтобы избежать ситуации перемещения элементов используют так называемую кольцевую или циклическую очередь: после того, как заполнены элементы массива с бо’льшими номерами, заполнение очереди продолжается с области меньших номеров.