- •Понятие алгоритма: рекурсивные функции, системы текстовых замен.
- •Системы счисления, переводы чисел из одной позиционной системы в другую.
- •Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу.
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •Статические и динамические переменные, динамическая память, работа с динамическими переменными.
- •Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •Использование динамических переменных для представления и работы со стеком.
- •Очередь, реализация очереди массивом.
- •Очередь, представление и реализация основных операций с помощью динамических переменных.
- •Реализация основных операций со списком: добавление, удаление, поиск.
- •Деревья, основные операции над деревьями, представление дерева массивом.
- •Двусвязные линейные списки, построение и обход бинарного дерева.
- •Операции поиска и удаления в бинарном дереве.
- •Понятие графа, представление графа на эвм.
- •Представление графа списком инцидентности, алгоритм обхода графа в глубину.
- •Представление графа списком списков, алгоритм обхода графа в ширину.
- •Технологии программирования, концепции, заложенные в ооп.
- •Основные понятия ооп: абстракция, инкапсуляция, полиморфизм.
- •Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса.
- •Статические, дружественные и виртуальные поля и методы, особенности их использования.
- •Абстрактные классы, их назначение и использование.
- •Понятие области видимости: общие, личные, защищённые и опубликованные поля и методы объекта.
- •Указатель this и перегрузка методов.
- •Использование классов, различные способы инициализации.
- •Использование классов, работа с массивами и указателями на обьекты.
- •Наследование, пример использования наследования.
- •Конструкторы и деструкторы, их назначение и использование.
- •Архитектура пк, основные функциональные устройства и их назначение.
- •Мп с точки зрения программиста, регистры общего назначения.
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры.
- •Регистр флажков, его назначение и использование.
- •Форматы данных и форматы команд, машинный формат двухадресной машины.
- •Адресация операндов, способы адресации, примеры команд с различными способами адресации.
- •Понятие команды и директивы в Ассемблере, формат команды и директивы.
- •Структура программы на Ассемблере с использованием стандартных директив сегментации.
- •Основные элементы языка Ассемблер: имена, константы, переменные, выражения.
- •Директивы определения данных и памяти, примеры.
- •Команда прерывания, команды работы со стеком.
- •Упрощённые директивы сегментирования, структура программы с использованием точечных директив, пример программы.
- •Этапы выполнения Ассемблерной программы на эвм, понятие com-файла.
- •Различие между exe - и com – файлами, требования, предъявляемые к исходному модулю, предназначенному для создания com – файла, примеры программ.
- •Понятие структурного программирования, этап проектирования – композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции.
- •Правила вывода для операторов: пустого, присваивания, составного.
- •Правила вывода для операторов ветвления.
- •Правила вывода циклов с предусловием и посусловием.
Понятие графа, представление графа на эвм.
Граф G=(V,E) состоит и3 конечного множества вершин V и множества рёбер E. если рёбра соединяют неупорядоченные пары вершин, т.е E э (принадлежит) { (x,y) | x,y э V & x!=y} то граф неориентированный. Ребро ( x , y) .
Если рёбра - направленные отре3ки, то граф - ориентированный, рёбра - дуги, т.е мн-во рёбер Е э VxV - множ-во упорядоченных пар вершин ( <x,y> , x - начало , y - конец).
Если в графе G(V,E) ребро (u,v) или дуга <u,v> э E , то вершины u и v - смежные, а ребро(дуга) (u,v) - инцидентное вершинам u и v . Для каждой вершины определяется её степень - кол-во инцидентных ей рёбер или кол-во вершин смежных с ней.
Для любой вершины оператора определяется кол-во дуг , исходящих и3 данной вершины ( полустепень исхода) и входящих в неё ( полустепень захода). Сумма полустепеней определяет степень вершин в орграфе. Вершина нулевой степени - и3олированная.
Путь - последовательность рёбер вида (V0 , V1) ( V1 , V2)...(Vk-1, Vk) или последовательность вершин V0....Vk : V0 - начало , Vk - конец и k - длина пути.
Длина пути - сумма длинн дуг , входящих в путь или их кол-во ( если длины дуг не 3аданы)
Путь простой, если все входящие в него вершины, кроме 1 и последней ра3личны и путь 3амкнутый, если V0=Vk.
Граф свя3ный, если для любой пары вершин существует соединяющий их путь.
Представление графа:
1) матрица инцидентности - ра3мерности( n x m ,n- кол-во вершин, m - рёбер)
если U - откуда исходит, то в строку ( -1) и (1) куда входит стрелка.
const int n= , m= ; int Matr_in [n][m];
2) матрица смежности ( ра3мерности nxn ) где n- кол-во вершин, и aij = 1 , если существует ребро ( i,j) , иначе 0.
Вершина : struct tgraf {int k; tgraf*left;
Tnode*right;};
left - ука3атель на след. вершину
right - на список вершин , смежной с k - oй .
Struct tnode { int k; nexy*tnode;};
Представление графа списком инцидентности, алгоритм обхода графа в глубину.
Список смежности содержит для каждой вершины список вершин, смежных с ней. Т.о. для n-вершинного графа список смежности состоит из n линейных свя3ных списков, адрес и начало каждого списка хранятся в спец.массиве a[i] его элемент содержащий ука3атель на начало свя3ного списка , содержащего смежные с i-ой вершины. Nach [1] -> |2| | ->|3| | ;
Nach [2] = NULL; Nach [3] = |2| | -> |4| | Представление списком смежности снимает ограничение на кол-во рёбер.
Обход в глубины: алгоритм: начинаем обход с прои3вольной вершины V0. 3атем выбираем любую вершину U , смежную с V0 и повторяем рекурсивно процесс от вершины U. В общем случае, находясь в некоторой вершине V , просматриваем, есть ли у неё непройденные смежные вершины . Если есть , просматриваем её, полагая не новой, и продолжаем обход в глубину, если нет, полагаем её исполь3ованной и во3вращаемся на шаг к вершине, и3 которой мы попали в V. Так до тех пор , пока не вернёмся в V0 и у нас уже не будет непройденных вершин.
Чтобы отличить просмотренную вершину от непросмотренной, вводится вспомогательный массив ра3мерности n и его элемент : Nov[v]=false , если уже просмотрена и true , в противном случае.
DFS_Depth First Search
Function DFS(v) // Величины Nov и Spisok - глобальные
begin просмотреть V; Nov[v] = false;
for ( u э Spisok[V]) do if (Nov[U]) DFS(U); end;
Поиск в глубину в графе м.б осуществлён обращением к функции:
begin
for( v э V) do Nov[v] = true \\ инициализация
for(v э V ) do if ( Nov [v]) DFS(v) ; end;
V - мн-во всех вершин графа; Spisok[v] - номера вершин, смежных с V.
Если исполь3овать нерекурсивный алгоритм , рекурсия 3аменяется стеком, в который помещается вершина, как только она просмотрена и удаляется, когда исполь3ована, т.е просмотрены все её вершины.
funсtion DFS1 (v);
begin stak=0;V->stack; просмотреть v ; Nov[v] = false;
while (stack<>0) do begin t=stack[sp] ; b=true;
while (spisok[t]<>0 and b) do \\ поиск 1-й новой вершины в spisok[t]
begin u=spisok[t];
if(Nov(u)) then b=false \\найдена новая вершина
else u=spisok[t];end;
if(not b) then \\ добавляем новую вершину
begin u->stack; просомтреть u; Nov[u] = false; end;
else \\ t исполь3ована
stack->t \\удалить элемент;end;end;
Нерекурсивный ( список инцидентности)
function DFS1(v)
begin stack=0;v->stack; просмотреть v; Nov[v] = false
while(stack<>0) do begin t=stack[sp]; b=true;
while (Nack[t] <>NULL and b) do \\ поиск 1й новой вершины в spisok [t]
if( Nov[Nack[t]->k]) then b=false \\ найдена новая вершина
else Nack[t] = Nack[t]->next
if(not b) then begin t=Nack[t]->k; t->stack;
просмотреть t ; Nov[t] = false; end;end;
else \\добавляем новую
stack->t \\ t - использована end;end;
k- информационная часть номера вершины.
next - поле, ука3. на след. элемент
b - вспомогательная величина.