- •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. Реализация бпд с использованием динамической памяти.
23. Указатели. Типизированные и безтиповые указатели. Операция разыменования и операция получения адреса.
Переменные-указателиВ памяти могут находится данные разных типов, переменные и константы. Указатель – это переменная, которая содержит адрес памяти. Этот адрес как правило является адресом некоторой другой переменной. Тип данных переменных, на который указывает указатель называется базовым типом данных. Стандартный вид обьявления указателя: тип * имя Oператоры для работы с указателями Унарные операторы * и & имеют более высокий приоритет, чем арифметические операторы, Oператор & - этот оператор возвращает адрес объекта, так что инструкция ip = &x;присваивает указателю ip адрес переменной x. Унарный оператор * возвращает значение переменной, находящейся по данному адресу. Для получения значение переменной х, адрес которой присвоен ip, нужно записать *iр. Этот оператор называют оператором разыменования или косвенного доступа.
Указатель - это ячейка памяти, хранящая адрес. В PascalABC.NET указатели делятся на типизированные (содержат адрес ячейки памяти данного типа) и бестиповые (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа).
24. Классы памяти в C++. Механизмы выделения и освобождения динамической памяти.
Динамическое выделение памяти Выделение динамической памяти для переменной типа int можно выполнить двумя способами: a) с помощью функции malloc, описанной еще в языке C: int *pi=(int*)malloc(sizeof(int)); (функция malloc возвращает значение типа void *, и необходимо выполнить преобразование типа) b) с помощью появившейся в C++ операции new: int *pi = new int; Освобождение памяти соответственно: free(pi); delete pi;
int **mas; // 1 mas = new int *[M]; // 2 for (int i=0; i<M; i++) // 3 mas[i] = new int [N]; // 4 For (int i=0; i<M; i++) delete [] mas[i]; delete [] mas;
25. Арифметические операции над указателями.
Инициализация указателей, присваивание им новых значений, может быть выполнена несколькими способами:
1. Присваивание указателю адреса уже существующего объекта, например:
char c;
char *pc = &c;
2. Присваивание указателю значения другого указателя, например:
char c;
char *pc1 = &c, *pc2 = pc1;
3. Присваивание указателю адреса памяти в явном виде.
char *pc = (char *)0x000012D4;
В этом примере указана операция преобразования типа в виде, стандартном для C++.
4. Присваивание указателю специального пустого значения NULL:
char *pc = NULL;
Сложение и вычитание числовых значений из указателей
Можно сложить значение n типа int, uint, long или ulong с указателем p, любого типа, кроме void*. В результате p+n получится указатель, являющийся суммой n * sizeof(p) to the address of p. Аналогично, результатом p-n является указатель, полученный вычитанием n * sizeof(p) из адреса p.Вычитание указателей Также можно вычитать указатели одного типа. Тип результата всегда long. Например, если p1 и p2 являются указателями типа pointer-type*, то результат выражения p1-p2 будет следующим:((long)p1 - (long)p2)/sizeof(pointer_type)
При переполнении домена указателя в результате выполнения арифметической операции исключений не генерируется, а результат зависит от конкретной реализации.