
- •Основные понятия алгоритма.
- •Алгоритм и его свойства. Понятие алгоритма
- •Свойства алгоритмов
- •Правила построения алгоритма
- •Формы записи алгоритма
- •Словесная форма записи алгоритмов
- •Графическая форма записи алгоритмов
- •Псевдокод
- •Программная форма записи алгоритма
- •Базовые алгоритмические структуры Типы базовых алгоритмических структур
- •Линейная базовая структура ("последовательность")
- •Базовая структура "ветвление".
- •Базовая структура "цикл".
- •Языки программирования и их уровни
- •Языки программирования. Машинный язык
- •Язык ассемблер
- •Языки программирования высокого уровня
- •Компоненты, образующие алгоритмический язык Отличительные особенности алгоритмических языков
- •Компиляторы и интерпретаторы
- •Преобразование алгоритма в программу
- •Три составляющие алгоритмического языка
- •Общая характеристика языка Турбо Паскаль
- •Язык программирования высокого уровня Turbo Pascal 7.0.
- •Основы языка
- •1.1. Алфавит языка
- •1.2. Составные элементы Паскаль-программы
- •Операторы
- •Идентификаторы и имена
- •Описания
- •Переменные
- •Функции и процедуры
- •1.3. Синтаксис языка
- •Структура программы на языке Паскаль
- •Тело программы
- •Классификация типов данных языка.
- •3.1. Простые типы Целые типы
- •Вещественные типы
- •Логический тип
- •Символьный тип
- •Перечисляемый тип
- •3.2. Структурированные типы Массив
- •Множество;
- •Основные конструкции языка Turbo Pascal
- •Константы
- •Переменные
- •Функции
- •Стандартные функции
- •Математические функции
- •Функции преобразования типа:
- •Функции для величин порядкового типа.
- •Функции, создаваемые пользователем
- •Знаки операций
- •Арифметические операции
- •Логические операции
- •Операции с битами информации
- •Операции отношения
- •Круглые скобки.
- •Порядок вычисления выражений
- •Операторы языка Turbo Pascal
- •Простые операторы
- •Оператор безусловного перехода (“Goto”)
- •Обращение к процедуре (функции)
- •Оператор выбора (Case)
- •Оператор цикла (Repeat)
- •Оператор цикла While;
- •Оператор цикла For;
- •Оператор обращения к записям и объектам With.
- •Процедуры и функции, определяемые пользователем
- •Характеристика подпрограмм в Turbo Pascal
- •Порядок создания и использования процедур
- •Порядок создания и использования функций
- •Механизм формальных параметров
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры без типа
- •Массивы и строки открытого типа
- •Параметры-процедуры и параметры-функции
- •Использование модулей в Турбо Паскаль
- •Стандартные модули Турбо Паскаль
- •Модуль System
- •Модуль Strings
- •Модуль Crt
- •Модуль Graph
- •Модуль Dos
- •Модуль WinDos
- •Модуль Overlay
- •Исполнительная часть модуля
- •Секция инициализации
- •Использование модуля в основной программе
- •Использование идентификаторов элементов модуля
Параметры-константы
Часто в качестве параметра в подпрограмму следует передать ту или иную переменную, но изменять ее подпрограмма не должна. В этом случае нежелательно передавать этот параметр как параметр-переменную. Можно его передать как параметр-значение, однако, если эта переменная имеет большой размер (массив, запись и т. д.), то копия такого параметра займет большую часть стека и даже может его переполнить. Это же приводит и к уменьшению быстродействия программы. В этой ситуации параметр лучше передать как параметр-константу. Такой параметр, если он структурированного типа, передается своим адресом, но предусматривается защита от его изменения. Использовать параметр-константу можно только в версии 7.0.
Параметр-константа указывается в заголовке подпрограммы аналогично параметру-значению, но перед именем параметра записывается зарезервированное слово const. Действие слова const распространяется до ближайшей точки с запятой, т. е. в пределах одной группы.
Пример.
function NewString (const S: string): string;
Тип параметра-значения может быть любым за исключением файлового.
При вызове подпрограммы на месте параметра-переменной в качестве фактического параметра можно использовать любое выражение совместимого для присваивания типа, не содержащего файловую компоненту.
Параметр-константу нельзя передавать в другую подпрограмму в качестве фактического параметра.
Пример.
Функция вычисления максимального элемента в массиве. Используем в качестве первого параметра параметр-константу:
function Max(const Mas: tArr; N: Byte): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[1];
for i := 2 to N do
if Ma < Mas[i] then Ma := Mas[i];
Max := Ma
end;
Параметры без типа
В Turbo Pascal можно использовать параметры-переменные и параметры-константы без указания типа. В этом случае фактический параметр может быть переменной любого типа, а ответственность за правильность использования того или иного параметра возлагается на программиста.
Пример.
function Equal(var Paraml, Param2; Len: Word): Boolean;
Здесь Paraml, Param2 - параметры-переменные без типа (вместо них можно использовать, например, любые переменные простого типа, типа-массив, типа-запись и т. д.); Len - параметр-значение.
Следует иметь в виду, что параметр без типа внутри подпрограммы типа не имеет и его перед использованием следует преобразовать к конкретному типу, применяя идентификатор соответствующего типа.
Массивы и строки открытого типа
В версии 7.0 можно в качестве параметров-переменных использовать массивы и строки открытого типа, у которых не задаются размеры. В качестве фактического параметра в этом случае можно использовать массив или строку любого размера, однако массив должен состоять из тех же компонент, что и компоненты открытого массива. Такие параметры введены для того, чтобы подпрограмма могла обрабатывать массив или строку любого размера. Фактический размер массива в этом случае может быть определен с помощью функции High. Открытый массив задается как и обычный массив, но только без указания типа индекса. Следует иметь в виду, что индексация элементов открытого массива всегда начинается с нуля, а максимальный индекс элемента равен значению функции High.
Пример. Функция вычисления максимального элемента в массиве.
Рассмотрим вариант подпрограммы, используя в качестве передаваемого параметра массив открытого типа:
function Max (var Mas: array of Integer): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[0];
for i := 1 to High(Mas) do {цикл до наибольшего индекса}
if Ma < Mast i] then Ma := Mas[i];
Max := Ma
end;
В этом примере в подпрограмму передается только один параметр и она может работать с любым одномерным массивом целых чисел. Однако следует иметь в виду, что при работе подпрограммы для открытого массива в стеке опять-таки создается его копия, что может его переполнить.
Разновидность открытого массива - открытая строка, которая может задаваться либо с помощью стандартного типа OpenString, либо с помощью типа string и использования ключа компилятора {$Р+}, например заголовок процедуры, заполняющей каким-либо символом строку, может иметь вид:
procedure FillChar (var Str: OpenString; Ch: Char); или
{$P+}
procedure FillChar (var Str: string; Ch: Char);