- •Билет 1
- •Билет 2
- •Способы представления графов
- •Билет 3
- •Билет 4
- •Билет 5
- •Билет 6
- •Билет 7
- •Основы визуального программирования
- •Билет 8
- •Обменная сортировка.
- •Конструкторы и деструкторы
- •Билет 9
- •Билет 10
- •Статическое и динамическое распределение памяти. Понятие указателя.
- •Процедуры и функции модуля graph.
- •Билет 11
- •Доступ к системным ресурсам в операционной системе pc-dos
- •Билет 12
- •Билет 13
- •Билет 14
- •Билет 15
- •Алгоритм генерирования перестановок с минимальным числом транспозиций
- •1. Введение в теорию графов. Способы представления графов: матрицы смежности и инцидентности, списки инцидентностей, списки ребер.
- •2. Функции библиотеки dos. Прерывания. Обработка прерываний.
- •Связные компоненты графа. Деревья. Бинарное дерево как связный граф без циклов
- •2.Сортировка вставками
- •2)Итерационные циклы
- •1.Эйлеровы пути в графе.
- •2.Ввод-вывод с помощью текстовых файлов.
- •Алгоритм Дейкстры (Dijkstra)
- •Вопрос 1.
- •Вопрос 2.
- •Создание и обработка одномерных динамических массивов.
- •Операторы цикла.
- •2.Сортировка распределением
- •1)Односвязные линейные списки
- •2) Записи. Организация, размещение. Записи с вариантами.
- •1.Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека. Гамильтоновы циклы.
Билет 15
Алгоритм генерирования перестановок с минимальным числом транспозиций
Сейчас опишем метод генерирования последовательности всех n! перестановок n-элементного множества. Будем предполагать, что элементы нашего множества запоминаются в виде элементов массива Р[1],..., Р[n]. В данном методе элементарной операцией, которая применяется к массиву Р, является поэлементная транспозиция, т.е. обмен значениями переменных P[i] и P[j], где 1 < i,j < n. Эту операцию будем обозначать через Р[i] :=: P[j]. Очевидно, что она эквивалентна последовательности команд
роm := Р[i]; Р[i] := P[j]; P[j] := роm,
где роm есть некоторая вспомогательная переменная.
Алгоритм. (Генерирование всех перестановок за минимальное число транспозиций.)
Данные: n.
Результат: Последовательность перестановок множества {1,...,n}, в котором каждая последующая перестановка образуется из предыдущей путем выполнения одной транспозиции.
procedure В(m, i);
begin
if (m mod 2=0) and (m > 2) then
if i < m — 1 then В := i
else В := m — 2
else В := m — 1
end; (*B*)
procedure PERM(m);
(* массив P — глобальный*)
begin
if m = 1 then
(*P[1],... ,P[m] — новая перестановка*)
write (P[l],...,P[n])
else
for i := 1 to m do
begin PERM(m - 1);
if i < m then P[B(m,i)] :=: P[m]
end
end;
(*PERM*)
begin
(* главная программа*)
for i := 1 to n do Р[i] := i;
PERM(n)
end
2) Массивы -- формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое.
При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:
var
а: array [1..10] of real;
b: array [0..50] of Char;
с: array [-3..4] of Boolean;
Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квaдрaтныx скобкax указывается тип-диапазон, с помощью которого компилятор oпеределяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива так что массив А состоит из 10 элементов, массив В - из 31, а массив C - из 8 элементов. За словом OF указывается тип элементов, образующих массив.
Доступ к каждому элементу массива в программе осуществляется с помощью индекса - целого числа (точнее, выражения порядкового типа), служащего своеобразным именем элемента в массиве (если левая граница типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:
var
a: array [1..10] of Integer;
b: array [0..40] of Char;
c: array [-2..2] of Boolean;
k: Integer;
begin
b[17] := 'F';
c[-2] := a[1] > [2];
for k := 1 to 10 do
a[k] := 0;
. . . . .
end.
Билет 16