- •1.Рекурсия: прямая и косвенная.
- •2. Объект. Способы описания. Инкапсуляция. Полиморфизм. Наследование.
- •1.Процедуры и функции.
- •2. Способы представления графов.
- •1.Структура Unit-a.
- •2.Введение в Delphi. Главное окно: пиктографические кнопки, палитра компонентов. Окна: формы, инспектора объектов, кода программы. Основы визуального программирования.
- •1.Организация библиотек. Стандартные библиотечные модули и модули пользователя.
- •1.Файлы в Паскале: текстовые файлы, типизированные файлы, нетипизированные файлы, их назначение и использование.
- •2. Построение остовного дерева поиском в глубину (нерекурсивный вариант).
- •1.Создание удобного пользовательского интерфейса: системы меню, окна для ввода, корректировки, просмотра информации. Модуль Crt.
- •2.Сортировка подсчетом
- •1.Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •2.Основы визуального программирования. Пустая форма и ее модификация. Компоненты страницы Standard. Размещение нового компонента.
- •1.Сортировка обменом
- •2.Объект. Конструктор и деструктор. Виртуальные функции.
- •1.Переменные действительного типа, их объявление и использование.
- •2. Сортировка выбором
- •1.Статическое и динамическое распределение памяти. Понятие указателя.
- •2.Процедуры и функции модуля graph.
- •1.Доступ к системным ресурсам. Определение переменной как absolute.
- •2.Процедуры и функции модуля crt, их использование.
- •1.Динамические структуры данных и их организация с помощью указателей.
- •2.Файлы без типа, их применение.
- •1.Введение в комбинаторику. Генерация k–элементного подмножества данного множества. Размещения. Сочетания.
- •2. Законы алгебры логики. Таблицы истинности.?????
- •1.Генерация всех перестановок n–элементного множества в антилексикографическом порядке.
- •2. Создание и обработка типизированных файлов.?????
- •1.Алгоритм генерирования перестановок с минимальным числом транспозиций.
- •2. Объявление массивов????
- •1.Введение в теорию графов. Способы представления графов: матрицы смежности и инцидентности, списки инцидентностей.
- •2.Функции библиотеки dos. Прерывания. Обработка прерываний.?????
- •1.Связные компоненты графа. Деревья. Бинарное дерево как связный граф без циклов.????
- •2. Сортировка вставками
- •1.Поиск в глубину в графе
- •2. Итерационные циклы
- •Цикл с предусловием. Оператор while ... Do.
- •Цикл с постусловием. Оператор repeat... Until.
- •Обозначение циклов на блок-схемах согласно госТу.
- •1.Поиск в ширину в графе
- •2. Оператор выбора case
- •1.Эйлеровы пути в графе.
- •2. Ввод-вывод с помощью текстовых файлов.
- •1.Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека. Гамильтоновы циклы.
- •2. Объект. Инициализация и разрушение объекта.
- •1.Кратчайшие пути. Алгоритмы Дейкстры, Флойда.
- •2.Процедурные типы. Передача функций как параметров.
- •1.Передача параметров вызываемым программам.?????
- •2. Объект. Свойства объектов.
- •1.Очереди и операции над ними.
- •2. Сортировка слиянием
- •1.Структурированные типы данных: массивы, символьные переменные и строки, множества.
- •1. Массивы.
- •2. Строковый тип данных.
- •3. Множества.
- •4. Записи.
- •2. Условный оператор.
- •1.Создание и обработка одномерных динамических массивов.
- •2. Операторы цикла.
- •1.Стеки и операции над ними.
- •2. Поразрядная сортировка
- •1.Процедуры и функции.
- •2. Бинарные деревья, их создание. Способы обхода дерева.
- •1.Односвязные линейные списки и операции над ними.
- •2. Записи. Организация, размещение. Записи с вариантами.??????
- •1.Двухсвязные линейные списки и кольца, операции над ними.
- •2. Затем создаём два указателя:
- •1.Обход списка в прямом направлении и его вывод на экран монитора:
- •2.Обход списка в обратном направлении и его вывод на экран монитора:
- •2. Сортировка и поиск информации. Методы внутренней сортировки.
2. Записи. Организация, размещение. Записи с вариантами.??????
Билет № 30
1.Двухсвязные линейные списки и кольца, операции над ними.
Как мы уже говорили, линейные списки могут быть односвязными и двухсвязными.
Каждый элемент односвязного списка кроме собственно данных содержит поле с адресом следующего элемента.
В двухсвязном списке каждый элемент имеет поля с данными и два указателя: один указатель хранит адрес предшествующего элемента списка, второй — адрес последующего элемента. Вполне естественно для работы с двухсвязным списком использовать два указателя, хранящие адреса начала и конца такого списка.
Рассмотрим особенности работы с двухсвязным списком.
1. Как и в случае с односвязным списком, создадим две структуры. Тексты этих структур расположим в начале программы (до main() и других функций). Вот возможная реализация структур:
struct Data
{ int a; // данные };
struct List2
{ Data d;
List2 *prev; // указатель на предшествующий элемент
List2 *next; // указатель на последующий элемент };
2. Затем создаём два указателя:
List2 *Begin = NULL; // Начало списка
List2 *End = NULL; // Конец списка
3. Теперь можно формировать какой-то начальный список. Делаем это по аналогии с тем, как делали при работе с односвязными списками. Начнём формировать список из трёх чисел 3, 5 и 1:
// Создаём первый элемент
List2 *t = new List2;
t->d.a = 3;
t->prev = NULL;
t->next = NULL;
// Настроим на него оба указателя
Begin = t;
End = t;
// Создаём второй элемент
t->next = new List2;
List2 *p = t;
t = t->next;
t->prev = p;
t->d.a = 5;
t->next = NULL;
End = t;
// Создаём третий элемент
t->next = new List2;
p = t;
t = t->next;
t->prev = p;
t->d.a = 1;
t->next = NULL;
End = t;
1.Обход списка в прямом направлении и его вывод на экран монитора:
void print_forward(List2 *Begin)
{List2 *p = Begin;
cout << "Spisok (forward):" << endl;
while(p)
{cout << p->d.a << endl;
p = p->next;}}
Возможный вызов функции:
print_forward(Begin);
Как видим, полученная реализация по сути является копией функции print() для печати односвязного списка.
2.Обход списка в обратном направлении и его вывод на экран монитора:
void print_back(List2 *End)
{List2 *p = End;
cout << "Spisok (back):" << endl;
while(p)
{cout << p->d.a << endl;
p = p->prev;}}
Возможный вызов функции:
print_back(End);
Кольцевой список — это список, у которого последний элемент связан с первым. Кольцевой список можно сделать как односвязным, так и двухсвязным.
Используем те же структуры (Data и List), что применяли для односвязного списка. Точно так же определяем указатель на начало будущего списка:
List *u = NULL;
и так же делаем начальное заполнение списка. Но в конце, после того, как для нашего примера мы занесли число 9 в список, требуется «замкнуть» список на начало:
x->next = u;
В итоге будет получен кольцевой список.
Операции для кольцевого списка можно выполнять те же, что и для обычного списка, но здесь будет присутствовать одна особенность: список замкнут, поэтому проверка того факта, что достигнут конец цикла, выполняется по другому. Покажем это на примере распечатки кольцевого цикла:
void printC(List *u)
{if(u != NULL)
{List *p = u;
cout << "Kolcevoj Spisok:" << endl;
cout << p->d.a << endl;
p = p->next;
while(p != u)
{cout << p->d.a << endl;
p = p->next;}}
else
cout << "Spisok pust." << endl;}
Возможный вызов функции:
printC(u);