
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
5 4 3 1 2
5 4 3 2 1 Метод быстрой сортировки с разделением
Оба выше рассмотренных метода достаточно просты и наглядны, но не очень эффективны. Значительно быстрее работает алгоритм сортировки К. Хоора, который называют сортировкой с разделением или «быстрой сортировкой». В основу алгоритма положен метод последовательного дробления массива на части.
Исходный массив:
1 2 3 4 5 6 7 8 9
6 1 10 15 7 17 2 18 5
В начале определяется середина массива М и переменной X присваивается значение М[середина]. X := M[5]; X=7. После этого массив делится на две части:
1 2 3 4 5 6 7 8 9
6 1 10 15 7 17 2 18 5
X
Далее выполняется обмен элементами по следующему правилу:
при просмотре левой части массива слева направо выполняется поиск такого элемента массива, что М[I]<=Х, затем при просмотре правой части справа налево отыскивается такой элемент, что М[J]>=Х. Выполняется обмен местами данных элементов, пока все элементы слева от середины, удовлетворяющие условию М[I]>Х, не будут обменены с элементами, расположенными справа от середины и удовлетворяющими условию М[J]<Х. В результате этого получим массив из двух частей. Далее каждая часть также сортируется. Т.е. происходит рекурсивный вызов функции сортировки.
Program Quck_Sort;
uses Crt;
const Count=9;
M: array[1..Count] of byte =(6,1,10,15,7,17,2,18,5);
var
I : integer;
procedure Q(First, Last : integer);
var I, J, X, W, L, k : integer;
begin
i:=first; j:=last;
k:= (first+last) div 2;
x:=m[k]; {Определение серединного элемента}
repeat
while m[i] > x do i:= i+1; { Определение i–го элемента, удовлетворяющего условию М[I]<=Х }
while x > m[j] do j:= j-1; { Определение j–го элемента, удовлетворяющего условию М[J]>=Х }
if i<=j
then {Обмен элементами}
begin
w:=m[i];
m[i]:=m[j]; m[j]:=w;
i:=i+1; j:=j-1;
end;
until i>j;
if first<j then Q(first,j);
if i<last then Q(i,last);
end;
BEGIN
clrscr; writeln('Исходный массив:');
for i:=1 to count do write(' ',m[i]); writeln;
Q(1,count); writeln('Результирующий массив:');
for i:=1 to count do write(' ',m[i]); writeln;
END.
Множества
Множества — это структурированные переменные, содержащие перечни целочисленных или символьных значений, либо значений перечислимого типа. Множество похоже на массив в том отношении, что оно также содержит набор простых элементов. Но в отличие от массива, элементы множества не упорядочены.
С множествами вы сталкивались при изучении математики.
Объявление множеств
Тип-множество или переменную-множество вы можете объявить так же, к объявляются прочие структурированные типы и принадлежащие им переменные. Сначала объявляется тип-множество, а затем переменная этого типа.
Синтаксическая диаграмма:
СИНТАКСИС:
type
тип-множество = set of базовый тип;
Пример: LetterSet = set of 'A'..'Z';
Интерпретация: Идентификатор тип-множество определен на основе значений базового типа. Значение переменной, объявленной как принадлежащей типу-множеству, представляет собой набор значений базового типа. При этом базовый тип должен быть порядковым типом: byte, char, boolean, тип-диапазон и перечисление.
Примечание: Большинство реализаций Pascal ограничивают число значений базового типа, на основе которого можно объявлять множества. Turbo Pascal ограничивает это число количеством значений типа данных Char (256), позволяя объявить множественный тип set of Char. Из-за этого ограничения вы не сможете использовать тип Integer в качестве базового типа, однако ничто не мешает использовать диапазон значений типа Integer с 256 значениями.
Объявить тип множество можно и в разделе описания переменных:
var
S : set of 1..3;
S - переменная типа множества (или множественная переменная).
Пустое множество содержит нуль элементов и обозначается парой пустых квадратных скобок: [].
Универсальное множество содержит все значения своего базового типа: [1, 2, 3].
Объявление переменной множественного типа не вызывает автоматического присваивания ей значения. Под нее только выделяется память.
Для работы с множеством вам необходимо определить значение этого множества. Это можно сделать с помощью оператора присваивания.
Таким образом множество представляет собой перечень элементов, заключенных в квадратные скобки: [перечень элементов]. Эта конструкция также называется конструктором множеств. Элементы множества должны относиться к одному порядковому типу или к совместимым порядковым типам. Элементы в перечне отделяются один от другого запятыми. Непрерывная последовательность элементов в перечне может быть представлена в виде диапазона (например, min_значение .. mах_значение, где min_значение и mах_значение — это совместимые по типу выражения, причем min_значение должно быть меньше или равно mах_значение).
Примечание: В Turbo Pascal должны соблюдаться следующие условия: Ord(min_значение) 0 и Ord(max_значение) ≤ 256.