- •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. Реализация бпд с использованием динамической памяти.
63. Текстовые файлы. Создание и обработка. Функции ввода/вывода в стиле с. Ввод-вывод нуль-терминированных строк. Посимвольный ввод-вывод. Форматированный ввод-вывод.
Операции ввода-вывода Ввод-вывод в файл можно осуществлять различными способами, в зависимости от поставленной задачи.Работа со строками int fputs(const char* str, FILE* stream);Пишет строку str в поток stream, не включая завершающий нулевой байт. В случае удачи возвращает 0 (или ASCII-код последнего вводимого символа), иначе возвращает EOF.
Для записи строки в стандартный выходной поток stdout применяется функция
int puts(char* str); При выводе завершающий нулевой байт строки преобразуется в символ новой строки. char* fgets(char* str, int size, FILE* stream);
Читает строку из потока stream в строку str, остановится: прочитан size+1 символ;
встретился символ новой строки;
достигнут конец файла.Символ \n копируется в строку, к концу строки добавляется нулевой байт \0. Возвращает при успехе указатель на str, иначе возвращает NULL. Строка str не изменяется, если ни один символ не прочитан и встретился конец файла.
Для чтения из стандартного потока stdin применяется функция
char* gets(char* str);Нет способа ограничить число символов при вводе, поэтому массив, адресуемый указателем str, может переполниться.7
64. Бинарные файлы. Последовательный метод доступа в стиле С (функции fread, fwrite). Прямой метод доступа.Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то произвольный доступ чаще всего применяется к бинарным файлам. Бинарные файлы могут содержать любую информацию. Чаще всего используются файлы, содержащие структуры. Для чтения и записи в бинарные файлы можно использовать функции fread(), fwrite() или fscanf(),fprintf().
fread –функция для чтения из файла:
int fread(void *ptr, unsigned size, unsigned count, FILE *f);
Из файла f считываются и по адресу ptr записываются count элементов размером size каждый. Функция возвращает число фактически считанных элементов.
fwrite – функция для записи в файл:
int fwrite(void *ptr, unsigned size, unsigned count, FILE *f);
В файл записываются, начиная с адреса ptr, count элементов размером size каждый. Функция возвращает число фактически записанных элементов.
fseek – функция для произвольного доступа к байтам бинарных файлов:
int fseek(FILE *f, long offset, int w);
offset показывает, на сколько байт нужно сместиться относительно точки отсчёта – w.
w должно быть равно одной из трех констант:
SEEK_SET или 0 - начало файла; SEEK_CUR или 1 – текущая позиция в файле;
SEEK_END или 2 – конец файла.ftell - возвращает текущю позицию в файле как длинное целое:long int ftell (FILE *f); Пример обработки бинарного файла
Составить программу, выполняющую следующие функции:Создание нового файла;
Просмотр файла;Добавление информации в конец файла;Поиск по названию товара и изменение цены и количества;Файл создать из структур вида: название товара, его цена и количество.Задание выполнить в отдельных функциях. Использовать меню для выбора функций.
65. Потоковый ввод-вывод (в стиле С++). Описание потоков. Организация форматированного ввода-вывода на основе потоков. Форматирующие методы. Манипуляторы потоков. Неформатированный потоковый ввод-вывод. Особенности работы с файловыми потоками.
Поток представляет собой последовательность примитивов ввода-вывода и реализован с помощью шаблонов, где в качестве параметра шаблона задается тип примитива charT. С помощью оператора typedef описаны потоки для типов char и wchar_t. В рамках настоящей темы будем рассматривать реализацию потоков для типа char и, следовательно, считать, что поток представляет собой последовательность символов.
Ввод-вывод данных с использованием потоков может быть форматированным или неформатированным. В первом случае используются перегруженные операторы >> и <<, которые позволяют помещать в поток и извлекать из потока данные любых типв, в том числе и пользовательских. Во втором случае (неформатированный ввод-вывод) никакого преобразования данных не происходит, и работа с потоками во многом напоминает уже описанную ранее работу с файлами.
ios – базовый класс для всех потоков;
istream, ostream, iostream – классы для стандартных потоков;
ifstream, ofstream, fstream – классы для файловых потоков;
istringstream, ostringstream, stringstream – классы для строковых потоков.
Форматированный ввод-вывод Для форматированного ввода-вывода используются перегруженные операторы >> и <<. Суть работы оператора << состоит в следующем: данные преобразуются в последовательность символов, которая и заносится в выходной файл.
Манипуляторы Работа с манипуляторами во многом похожа на использование форматирующих методов, но зачастую более проста и понятна. Манипуляторы делятся на простые и параметризированные (последние требуют задания в скобках уточняющих значений).
Неформатированный потоковый ввод-вывод В потоковых классах наряду с операциями извлечения из потока и помещения в поток определены методы для неформатированного чтения-записи. Для потока могут быть определены две текущих позиции: одна используется для чтения, другая – для записи в поток.