- •1)Стандартные операции языка Си.
- •2)Линейные списки, операции с линейными списками.
- •3)Модели жизненного цикла по
- •Итерационная модель
- •Спиральная модель жизненного цикла по
- •II билет)
- •1)Обработка нештатных ситуаций. Объекты исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •2) Основные понятия ооп: абстракция, инкапсуляция, наследование, полифморфизм
- •3)Диаграммы классов. Нотация, отношения.
- •III билет)
- •1)Язык Си: указатели и массивы. Определения, примеры.
- •2)Абстрактные классы. Их назначение, пример.
- •3)Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •IV билет)
- •1)Язык Си: объявление функций, передача аргументов. Примеры.
- •2)Язык Си: Работа с файловой системой. Примеры.
- •3)Сценарий выполнения прецедентов(пример).
- •V билет)
- •1)Язык Си: строки и указатели. Определения, примеры.
- •2)Язык Си: Низкоуровневый ввод/вывод. Пример.
- •3) Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •VI билет)
- •1)Язык Си: аргументы командной строки. Перегруженные функции. Примеры.
- •2)Альтернативное определение ооп.
- •3)Операции на диаграммах классов. Нотация и семантика. Примеры.
- •VII билет)
- •1)Язык Си: организация ввода/вывода. Пример: слияние файлов.
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •2)Объекты классов. Статические, автоматические, динамические. Примеры.
- •3)Полиморфный контейнер(пример).
- •VIII билет)
- •1)Язык Си: структуры. Пример.
- •2)Управление доступом к элементам классов. Пример.
- •3)Двоичные деревья. Алгоритмы обхода, поиска, вставки, сортировки.
- •IX билет)
- •1)Язык Си: Произвольный доступ к файлам. Пример.
- •2) Конструкторы и деструкторы. Их виды. Вызов конструктора при наследовании Примеры.
- •3)Проектирование по и uml. Основные понятия.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •X билет)
- •1)Язык Си: оператор определения типа. Примеры.
- •2)Наследование классов. Пример с Абстрактными фигурами.
- •XI билет)
- •1)Язык Си: Препроцессор. Директивы препоцессора. Примеры.
- •2)Множественное наследование. Виртуальная схема наследования. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •3)Шаблоны Функций и шаблоны классов. Примеры.
- •XII билет)
- •1)Язык Си: программный стек. Пример работы стека.
- •2)Виртуальные функции. Раннее и позднее связывание.
- •3)Hash-таблицы(Таблицы с перемешиванием).
IV билет)
1)Язык Си: объявление функций, передача аргументов. Примеры.
Сигнатура функции:
[ <класс памяти> ] [<тип результата> ] <имя-функции> ([<список-аргументов>]) [throw(<список-объектов-исключений>)];
Сигнатуру ещё называют прототипом, или описанием функции. Если вместе с прототипом функции также задано тело функции (её исполняемый код), то говорят, что функция определена полностью (дано определение функции). Список аргументов в прототипе функции является формальным. Важно лишь количество формальных аргументов и их типы. Имена формальных аргументов в прототипе функции могут быть опущены. При вызове функции формальные аргументы запрещаются фактическими аргументами.
Пример
double f1 (float, char); это прототип функции f1
int main () {
int n; char c;
……………………..
f1 ( (float) n, c ); это вызов функции f1
…………………….. }
double f1 ( float x, char y ) это определение функции f1
{……………………..}
здесь x и y формальные аргументы, n и c - фактические аргументы
При вызове функции в специальной области памяти - программном стеке создаются временные копии фактических аргументов. Вызванная функция работает с копиями фактических аргументов. Оригиналы аргументов остаются неизменными. Этот механизм называется передача аргументов «по значению».
Если требуется работать с оригиналами аргументов, имеется механизм передачи аргументов «по ссылке».
Пример
interchange (char*, char*); прототип функции
main() {
char a = ‘a’;
char b = ‘b’
……………………..
interchange (&a, &b); вызов функции
……………………..
}
interchange (char* p1, char* p2) определение функции
{
char z;
z = *p1; *p1=*p2; *p2 = z;
}
Ещё примеры функций:
char* f2 (void); функция не имеет аргументов и в качестве
результата работы возвращает значение
типа char* (указатель на символ)
void f3 (char**, unsigned); функция имеет два аргумента типа
char** и unsigned, никаких значений не
возвращает
void* f4 (void*, …); функция имеет произвольное количество
аргументов, но не менее одного. Тип
первого аргумента - указатель на любой
объект. Тип результата - указатель на
любой объект.
void f5 (int x, int& y) пример явного задания механизма передачи
аргумента “по ссылке” изменяется значение
копии аргумента “x” изменяется значение
самого аргумента “y”
2)Язык Си: Работа с файловой системой. Примеры.
Прототипы функций описаны в заголовочных файлах <io.h> и <direct.h>.
Получить имя текущей папки (директории) можно так:
char* _getcwd ( char *buf, int maxlen );
Полный путь для текущей рабочей директории будет записан в buf. Если вместо buf был указан NULL, функция самостоятельно получит буфер длиной maxlen символов.
Возвращает указатель на буфер с именем текущей рабочей директории или NULL, если произошла ошибка в/в.
изменить текущую папку (директорию):
int _chdir ( char *pathname);
Возвращает 0 в случае успеха или -1 при возникновении ошибки в/в.
создать папку (директорию):
int _mkdir ( char *pathname);
Возвращает 0 в случае успеха или -1 при возникновении ошибки в/в.
удалить папку (директорию):
int _rmdir ( char *pathname);
Возвращает 0 в случае успеха или -1 при возникновении ошибки в/в.
Для выборки файлов из текущей рабочей папки (директории)
применяется следующая структура (уточнять её для конкретных IDE):
struct_finddata_t{
unsignded; // атрибуты выбираемых файлов
long time_create; // дата и время создания файла
long time_access; // дата и время последнего доступа к файлу
long time_write; // дата и время последней записи в файл
unsigned long size; // длина файла в байтах
char name[260]; // полный путь к файлу, включая его имя
};
Значения поля attrib могут быть комбинацией следующих констант:
_А_Normal // обычный файл
_А_RDONLY // файл, доступный только для чтения
_А_HIDDEN // скрытый файл
_А_SYSTEM // системный файл
_А_SUBDIR // подпапка (поддиректория)
_А_АRCH // архивный файл
выборка первого файла из текущей рабочей папки:
long_findfirst ( char *filespec,struct_finddata_t *fileinfo );
В аргументе filespec (спецификация имени файла) задается шаблон имени
выбираемого файла, в шаблоне имени могут использоваться метасимволы '*' и '?'.
Возвращает ненулевой дескриптор поиска (handle) в случае успеха (т.е. был найден файл, который удовлетворяет атрибутам attrib, заданным в _finddata_t ) или -1 при возникновении ошибки в/в.
выборка следующего (очередного) файла из текущей рабочей папки:
int_findnext ( long handle, struct_finddata_t *fileinfo );
В аргументе handle задается ненулевой дескриптор поиска, который ранее был получен как результат работы функции _findfirst,
Возвращает 0 в случае успеха (т.е. был найден очередной файл, который удовлетворяет атрибутам attrib, заданным в _finddata_t ) или -1 при возникновении ошибки в/в.
Пример вывода списка файлов текущей папки (шаблон "*.*"):
#include <io.h>
#include <stdio.h>
void main(void) {
struct _finddata_32_t finddata; // структура для выборки файлов
long handle; int flag= 0;
finddata.attrib=_A_NORMAL; // выбираем только обычные файлы
handle= _findfirst("*.*",&finddata); // поищем первый файл
if (handle) // если файлы есть, выведем
while (!flag) { // их имена и размеры
printf("%s %lu\n",finddata.name ,finddata.size );
flag = _findnext(handle, &finddata ); // ищем следующий файл
}
else printf("%s\n","Файлов не найдено" ); // нужных файлов не найдено
}
Перед практическим использованием данного примера уточните имена структур и функций (finddata,findfirst,findnext) для конкретного релиза Visual Studio.