- •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-таблицы(Таблицы с перемешиванием).
Вывод в файл
int putc(int с, FILE *stream);
Функция выводит символ с в поток stream и возвращает выведенный символ как результат работы. При достижении конца файла или возникновении ошибки в/в возвращает EOF.
int fputs(char *s, FILE *stream);
Функция выводит строку s в поток stream. В случае успеха функция возвращает некоторое неотрицательное число (обычно количество выведенных символов). Значение EOF возвращается, если произошла ошибка в/в.
int fprintf(FILE *stream, <список-форматов> [, <список-данных>]);
Функция осуществляет форматный вывод данных в поток stream, в соответствии с заданным <списком-данных>, преобразуя данные в соответствии с заданным <списком-форматов>. В случае успеха функция возвращает количество введенных байтов. При возникновении ошибки в/в функция возвращает некоторое отрицательное значение.
Особые ситуации
int feof(FILE *stream);
Функция возвращает некоторое ненулевое значение (истину), если при последней попытке чтения из потока stream был достигнут конец файла. Нулевое значение (ложь) возвращается, если конец файла не был достигнут.
int ferror(FILE *stream);
Функция возвращает некоторое ненулевое значение (истину), если при работе с потоком stream произошла ошибка в/в. Нулевое значение (ложь) возвращается, если ошибок в/в при работе с потоком stream зафиксировано не было. Индикатор ошибки в/в сбрасывается после закрытия файла, связанного с данным потоком или после вызова специальной функции clearerr.
int ungetc(int с, FILE *stream);
Функция «заталкивает» символ с в поток stream, открытый для чтения. Последующая операция чтения из потока stream выдаст символ с. В случае успеха функция возвращает символ с. При возникновении ошибки в/в поток stream не изменяется и функция возвращает значение EOF.
Пример: слияние файлов
Имена дисковых файлов заданы в командной строке.
Файлы последовательно открываются и их содержимое копируется в стандартный вывод.
а.ехе <имя-файла-1> <имя-файла-2> … <имя-файла-n>
#include <stdio.h>
void filecopy(FILE *stream) { // копирование одного файла
int с;
while ((с = getc(stream)) != EOF) putc(с, stdout);
}
void main(int argc, char *argv[]) {
FILE *stream;
if (argc == 1) filecopy(stdin); // если файлы не заданы, то stdin >> stdout
else while (--argc) // пока не исчерпан список файлов
if ((stream = fopen(*++argv, “r”)) == NULL) // пытаемся открывать
{ fprintf(stderr, “ореn еrr: %s\n”, *argv); break; } // не открывается
else { filecopy(stream); fclose(stream); } // копируем и закрываем }
2)Объекты классов. Статические, автоматические, динамические. Примеры.
Пусть имеется такое описание:
class Х { // описан класс Х ( это похоже на описание структуры)
public: // доступ извне к элементам класса разрешен
chat *data; // элемент данных класса Х
void f(void); // функция-член класса Х
};
Х а; // описан а - объект класса Х
static X v[10]; // описан v - статический массив объектов класса Х
Х *рх =new Х; // описан рх - указатель на объект класса Х
Доступ извне описания класса к элементам данных и членам класса
осуществляется (если он разрешён) с помощью уточненных имен:
Х::data - уточненное имя элемента данных data класса Х
Х::f() — - уточненное имя функции-члена f() класса Х
Если имеется объект а класса Х и указатель рх на объект класса Х, тогда
доступ извне класса осуществляется (если он разрешён) следующим образом:
а.data или рх->data - доступ к элементу данных извне класса
а.f() или рх->f() - вызов функции-члена извне класса
Доступ изнутри класса к элементам данных и функциям-членам класса
возможен по их простым именам. Кроме того, у любой функции-члена класса
всегда имеется неявный аргумент с именем this.
Неявный аргумент this есть указатель на тот объект класса, для которого эта
функция-член вызывается.
Например, пусть имеется объект а класса Х.
Тогда this <-> &а, и внутри любой функции-члена класса возможны следующие
корректные обращения:
this -> data - доступ к элементу данных из функции-члена класса
this -> f() - вызов функции-члена из другой функции-члена класса
Пример 1. Статические данные и методы классов
class S{
static int a; // статический элемент данных класса
public:
static void h(S* ){} // статический метод класса
};
void main(void) {
S obj , &objref=obj,*pobj=&obj,v[9]; // объект, ссылка, указатель, массив
h (&obj); // это ошибка!
obj.h(pobj); // это правильно
pobj->h(&obj); // это тоже правильно
}