Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
61
Добавлен:
04.06.2015
Размер:
7.62 Mб
Скачать

Var I, j: Word;

Str: Boolean;

temp: Integer;

Begin

i := bottom;

j := top;

str := False;

While (i < j) Do

Begin

If (vector[i] > vector[j]) Then

Begin

temp := vector[i];

vector[i] := vector[j];

vector[j] := temp;

str := Not(str);

End; {If}

If (str)

Then i := i + 1

Else j := j – 1;

End; {While}

If (i > 1) And ((i – 1) > bottom)

Then Sort_Hoar(m, bottom, i – 1, vector);

If (j < (m – 1)) And ((j + 1) < top)

Then Sort_Hoar(m, j + 1, top, vector);

End;

Begin

ClrScr;

Assign(out_sort,’d:\User\out_sort.txt’);

ReWrite(out_sort); открытие текстового файла для записи

Init(n, m_min, m_max, a); инициализация массива

Writeln(out_sort, ‘Исходный вектор:’);

For i:=1 To n Do

Write(out_sort, a[i]:5);

WriteLn(out_sort);

Sort_Hoar(n, 1, n, a); сортировка элементов массива

Writeln(out_sort, ‘Отсортированный вектор:’);

For i:=1 To n Do

Write(out_sort, a[i]:5);

WriteLn(out_sort);

Close(out_sort); закрытие текстового файла

ReadLn;

End.

Результат работы программы:

Исходный вектор:

-62 18 -48 46 -44 -58 -95 76 4 -65

Отсортированный вектор:

-95 -65 -62 -58 -48 -44 4 18 46 76

Метод К.Хоарасчитается одним из самых быстрых методов сортировок.

Программные модули

Все вышеприведенные подпрограммы имеют универсальный характер, то есть ими может пользоваться любой программист. Как же проще их использовать? Разумеется, можно копировать тексты этих подпрограмм, пользуясь, например, буфером обмена, но это утомительное занятие и неизящное решение. Кроме того, программы, содержащие множество процедур и функций, становятся громоздкими и неудобными в отладке.

В Паскале есть замечательный инструмент для преодоления этих неприятностей – программные модули.

Прежде чем приступить к рассмотрению модульного программирования, разберемся, как происходит обработка исходного текста программы (кода программы) в системе программированияTurbo Pascal (Borland Pascal).

Программа, написанная на любом языке программирования, перед выполнением должна быть приведена к виду, пригодному для исполнения на компьютере, то есть переведена с конкретного языка программирования на машинныйязык компьютера.

Машинный язык – это система команд, которую понимает и может выполнить процессор.

Другими словами, исходный код(текст) программы перед выполнением должен быть преобразован висполняемый код. Это перевод английского словаexecutable, от него же и произошло известное расширение имен исполняемых файлов – .exe. Исходный же текст программы на Паскале имеет расширение имени - .pas. Обратное преобразование невозможно – из исполняемых файлов уже нельзя восстановить исходный текст программы на Паскале, поэтому все исходные тексты должны сохраняться для их последующей доработки.

При работе в Turbo Pascalисполняемый код формируется в оперативной памяти и без записи его на диск сразу выполняется. При работе в средеBorlandPascalисполняемый файл формируется автоматически, поэтому файл с расширением.exeпоявляется в текущем каталоге после первого удачного запуска программы.

Процесс преобразования исходного кода в исполняемый происходит в два этапа:

  1. компиляция,

  2. компоновка (линковка).

На этапе компиляцииисходная программа преобразуется в машинный код, но он пока не пригоден для исполнения, так как в него не включены коды стандартных процедур и функций, которые находятся в отдельном файлеTurbo.tpl (это библиотекаTurbo Pascal). Код программы, полученной после компиляции, называютобъектным кодом. БиблиотекаTurbo Pascalтоже является объектным кодом. На этапекомпоновкик объектному коду программы добавляется объектный код стандартных процедур и функций из библиотекиTurbo Pascal. В результате он превращается в полноценный исполняемый код.

Компиляция и компоновка – это два различных процесса. Первый из них выполняет программа-компилятор(compiler). Ее основное назначение – проверка программы на наличие синтаксических ошибок и, в случае их отсутствия, формирование объектного кода. Процесс же компоновки выполняет программа-компоновщик(редактор связей,linker). Ее назначение – добавить к программе весь недостающий код из других файлов, скомпоновав полноценный исполняемый код.

Отсюда вытекает очень важный вывод: если компилятор имеет возможность обрабатывать не только законченные программы, но и особым образом оформленные совокупности подпрограмм, то отдельные части программы можно компилировать отдельно и хранить на внешнем носителе в откомпилированном виде. Затем компоновщик соберет объектные коды из разных файлов, и в результате будет получен исполняемый код для всей программы.

Компилятор Turbo Pascalобладает возможностью раздельной компиляции. В Паскале для этих целей введено понятиепрограммных модулей. Программный модуль оформляется как отдельно компилируемая программная единица, содержащая различные элементы раздела описаний и, возможно, некоторые операторы. В состав модуля входят описания констант, переменных, типов, процедур и функций. Процедуры и функции, содержащиеся в модуле, подключаются к основной (головной) программе на этапе компоновки. Хранится модуль как в исходном, так и откомпилированном виде на внешних носителях.

В этом и заключается один из наиболее фундаментальных принципов современных технологий программирования – принцип модульности. На практике реализация данного принципа предполагает выполнение двух условий:

  1. при разработке программы необходимо выделять подпрограммы таким образом, чтобы можно было бы воспользоваться уже имеющимися модулями,

  2. разработку новых процедур и функций следует выполнять таким образом, чтобы полученные модули можно было бы использовать в качестве составных частей для решения других задач.

Таким образом, принцип модульности отлично дополняет структурныйподходк разработке программ, позволяя многократно использовать разработанные и отлаженные модули.

Преимущества такого подхода к созданию программ очевидны:

  1. программа получается понятнее, ее легче совершенствовать в дальнейшем,

  2. отдельные модули могут разрабатываться различными программистами, так как это относительно автономные программные единицы,

  3. написанные модули могут быть использованы и в других программах,

  4. модули, включаемые в исходный код программы, хранятся на диске в откомпилированном виде. Поэтому процесс подготовки всей программы к выполнению займет меньше времени – компилироваться будет только основная программа,

  5. при выполнении программы в среде Turbo Pascalисполняемый код модулей размещается в отдельных сегментах памяти, что дает возможность создавать программы большого размера (более64К).

В Паскале используются стандартныеипользовательскиемодули.

Стандартныемодули:SYSTEM, CRT, GRAPH, DOS, PRINTER, OVERLAY образуют системную библиотеку Паскаля Turbo.tpl (Turbo Pascal Library).Модуль SYSTEM подключается к программе пользователя автоматически, остальные модули указываются в оператореUses:

Uses CRT, GRAPH;

Пользовательскиемодули создаются самими программистами.