- •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. Реализация бпд с использованием динамической памяти.
30. Двумерные и многомерные массивы (алгоритмы обработки матриц).
Алгоритмы обработки матриц Матрица– это двумерный массив, каждый элемент которого имеет два индекса: номер строки – i; номер столбца – j. Поэтому для работы с элементами матрицы необходимо использовать два цикла. Если значениями параметра первого цикла
будут номера строк матрицы, то значениями параметра второго – столбцы (или
наоборот). Обработка матрицы заключается в том, что вначале поочередно
рассматриваются элементы первой строки (столбца), затем второй и т.д. до
последней. Рассмотрим основные операции, выполняемые над матрицами при
решении задач.. Алгоритм ввода-вывода матрицМатрицы, как и массивы, нужно вводить (выводить) поэлементно. Блок-схема ввода элементов матрицы изображена на рис. 7.1. Вывод матрицы организуется аналогично вводу.
Рассмотрим несколько задач обработки матриц. Для их решения напомним
читателю некоторые свойства матриц (рис. 7.2):• если номер строки элемента совпадает с номером столбца (i=j), это означает что элемент лежит на главной диагонали матрицы;
• если номер строки превышает номер столбца (i>j), то элемент находится
ниже главной диагонали;• если номер столбца больше номера строки (i<j), то элемент находится выше главной диагонали.• элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i+j–1=n; • неравенство i+j–1<n характерно для элемента находящегося выше побочной диагонали;• соответственно, элементу лежащему ниже побочной диагонали соответствует выражение i+j–1>n. 1. Найти сумму элементов матрицы, лежащих выше главной диагонали (рис 7.3).Алгоритм решения данной задачи (рис. 7.4) построен следующим образом: обнуляется ячейка для накапливания суммы (переменная S). Затем с помощью двух циклов (первый по строкам, второй по столбцам) просматривается каждый элемент матрицы, но суммирование происходит только в том случае если, этот элемент находится выше главной диагонали, то есть выполняется свойство i<j.
На рисунке 7.5 изображен еще один вариант решения данной задачи. В нем
проверка условия i<j не выполняется, но, тем не менее, в нем так же
суммируются элементы матрицы, находящиеся выше главной диагонали. Для
того чтобы понять, как работает этот алгоритм, вернемся к рисунку 7.3. В первой
строке заданной матрицы необходимо сложить все элементы, начиная со второго.
Во второй – все, начиная с третьего, в i–й строке процесс начнется с (i+1)–го
элемента и так далее. Таким образом, первый цикл работает от 1 до N, а второй от
i+1 до M. Предлагаем читателю самостоятельно составить программу,
соответствующую описанному алгоритму.
31. Многомерные массивы. Реализация многомерных массивов с помощью указателей.
Двумерные динамические массивы реализуются через указатели на указатели. Описание int a[10][10]; соответствует описанию int (*a)[10]; int **a; Для динамического массива типа int указатель a содержит адрес одномерного массива указателей типа int *, хранящих адреса строк массива (т.е. элементов массива с одинаковым значением первой размерности).