- •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-таблицы(Таблицы с перемешиванием).
V билет)
1)Язык Си: строки и указатели. Определения, примеры.
Строка есть массив символов, оканчивающийся символом ‘\0’. Пусть есть такое описание: static char s[] = “abcdef…z”;
char *sp = s;
Имя строки есть синоним адреса её первого элемента
Пример в/в строк:
используем две функции: char* gets (char*) и puts (char*)
{
char buffer[81], *p;
p = gets (buffer);
puts (buffer);
puts (p);
}
Пример: вычисление длины строки
int strlen (char* s) используем первый принцип адресной
арифметики
{
int n;
for (n = 0; *s != ‘/0’; s++) n++; просто подсчитаем
количество символов
return n;
}
или можно так:
int strlen (char* s) используем второй принцип адресной
арифметики
{
char* p = s;
while (*p) p++; признак конца строки ‘\0’
return(p - s); есть арифметический ноль, он же «ложь»
}
Пример: копирование строк
int strcpy (char* to, char* from) указатель to должен
{ адресовать область памяти,
while ( ( *to = *from ) != ‘\0’ ) достаточную для размещения
{ to++; from++; } исходной строки, которая
} адресуется указателем from
или можно проще
int strcpy (char* to, char* from)
{ признак конца строки ‘\0’
while ( *to++ = *from++ ) есть арифметический ноль,
} он же есть «ложь»
Здесь опять использован тот принцип, что в языке Си любое индексное выражение вида
<выражение-1> [<выражение-2>]
интерпретируется как
* (<выражение-1> + <выражение-2> )
2)Язык Си: Низкоуровневый ввод/вывод. Пример.
Потоковый ввод\вывод почти всегда удобен. Однако имеются ситуации, когда требуется полный контроль со стороны приложения за передачей данных. Например; приложения реального времени, программирование модемов, сетей, др.
Иногда необходима передача данных без буферизации. В этих случаях нужно использовать другую группу ввода\вывода. Эти функции описаны в файле <io.h> – небуферизованный ввод\вывод низкого уровня.
Открытие файла:
int open ( char *name, int flag );
В случае успеха данная функция возвращает небольшое положительное целое число, которое называется дескриптором файла. В случае ошибки возвращает -1.
Возможные значения аргумента flag: Стандартные потоки и их дескрипторы:
O_RDONLY |
только чтение |
O_WRONLY |
только запись |
O_RDWR |
чтение и запись |
O_APPEND |
добавление в файл |
O_CREAT |
создание файла |
O_TRUNC |
усечение файла |
O_TEXT |
текстовый файл |
O_BINARY |
двоичный файл |
Закрытие файла:
int close ( int fd );
Здесь fd - дескриптор файла. В случае успеха данная функция возвращает 0, при ошибке возвращает -1.
Ввод данных:
int read ( int fd, char *buf, unsigned count );
Функция пытается прочитать count байтов в буфер buf из файла с дескриптором fd. Возвращает количество действительно прочитанных байтов или -1 при ошибке в/в.
Вывод данных:
int write ( int fd, char *buf, unsigned count );
Функция пытается записать count байтов из буфера buf в файл с дескриптором fd.
Возвращает количество действительно записанных байтов или -1 при ошибке в/в.=
Произвольный доступ к файлу:
long tell ( int fd );
Функция возвращает текущий внутренний указатель (т.е. номер текущего обрабатываемого байта) для файла с дескриптором fd или -1 при ошибке в/в.
long Iseek ( int fd, long offset, int origin );
Функция позиционирует текущий внутренний указатель (т.е. задает номер текущего обрабатываемого байта) для файла с дескриптором fd. Возвращает 0 при успешном позиционировании или величину, отличную от нуля, при ошибке в/в. Аргумент offset задает смещение относительно некоторой позиции. Позиция задается аргументом origin.
Возможные значения origin описаны в <io.h> и <stdio.h>:
SEEK_SET |
начало файла |
|
SEEK_CUR |
текущая позиция |
|
SEEK_END |
конец файла |
|
Особые ситуации:
int eof ( int fd );
Функция возвращает значение 1 при достижении конца файла, значение 0, если конец файла ещё не достигнут, или значение -1 при возникновении ошибки в/в.
void perror ( char *string );
Функция выводит строку string в поток stderr, затем выводит системное сообщение об обнаруженной ошибке в/в. Данная функция должна вызываться сразу за той функций ввода или вывода, которая привела к ошибке в/в.
Пример. Копирование ввода на вывод без промежуточной буферизации.
#include <io.h>
#define BUFSIZE 256 // размер максимального ввода
void main ( void ) { // замечание: драйверы в/в могут использовать
char buf [ BUFSIZE ]; // собственную буферизацию
int n;
while ( ( n = read ( 0, buf, BUFSIZE ) ) > 1 ) // пытаемся читать данные
write ( 1, buf, n ); // выводим прочитанное
}