Файл: Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.05.2024

Просмотров: 135

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
2.7.12. Оператор безусловного перехода

Среди операторов языка Delphi существует один редкий оператор, о котором авторы сперва хотели умолчать, но так и не решились. Это оператор безусловного перехода goto ("перейти к"). Он задумывался для того случая, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой, оператор.

Метка — это именованная точка в программе, в которую можно передать управление. Перед употреблением метка должна быть описана. Раздел описания меток начинается зарезервированным словом label, за которым следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой. Типичный пример описания меток:

label

Label1, Label2;

В разделе операторов метка записывается с двоеточием. Переход на метку выполняется с помощью зарезервированного слова goto, за которым следует имя метки:

program Console;
{$APPTYPE CONSOLE}
uses

SysUtils;
label

M1, M2;
begin

M1:

Write('Желаем успеха ');

goto M2;

Write('А этого сообщения вы никогда не увидите!');

M2:

goto M1;

Writeln('в освоении среды Delphi!');

Writeln('Press Enter to exit...');

Readln;

end.

Эта программа будет выполняться бесконечно, причем второй оператор Write не выполнится ни разу!

Внимание! В соответствии с правилами структурного программирования следует избегать применения оператора goto, поскольку он усложняет понимание логики программы. Оператор goto использовался на заре программирования, когда выразительные возможности языков были скудными. В языке Delphi без него можно успешно обойтись, применяя условные операторы, операторы повтора, процедуры Break и Continue, операторы обработки исключений (последние описаны в главе 4).

2.8. Подпрограммы

2.8.1. Общие положения

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

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


Процедура — это подпрограмма, имя которой не может использоваться в выражениях в качестве операнда. Процедура состоит из заголовка и тела. По структуре ее можно рассматривать как программу в миниатюре. Когда процедура описана, ее можно вызвать по имени из любой точки программы (в том числе из нее самой!). Когда процедура выполнит свою задачу, программа продолжится с оператора, следующего непосредственно за оператором вызова процедуры. Использование имени процедуры в программе называется оператором вызова процедуры.

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

Все процедуры и функции языка Delphi подразделяются на две группы: встроенные и определенные программистом.

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

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

2.8.2. Стандартные подпрограммы

Арифметические функции

Abs(X)

Возвращает абсолютное значение аргумента X.

Exp(X)

Возвращает значение ex.

Ln(X)

Возвращает натуральный логарифм аргумента X.

Pi

Возвращает значение числа π.

Sqr(X)

Возвращает квадрат аргумента X.

Sqrt(X)

Возвращает квадратный корень аргумента X.

Примеры:

Выражение

Результат

Abs(–4)

4

Exp(1)

2.71828182845905

Ln(Exp(1))

1

Pi

3.14159265358979

Sqr(5)

25

Sqrt(25)

5


Тригонометрические функции

ArcTan(X)

Возвращает угол, тангенс которого равен X.

Cos(X)

Возвращает косинус аргумента X (X задается в радианах).

Sin(X)

Возвращает синус аргумента X (X задается в радианах).

Примеры:

Выражение

Результат

ArcTan(Sqrt(3))

1.04719755119660

Cos(Pi/3)

0.5

Sin(Pi/6)

0.5

Заметим, что в состав среды Delphi входит стандартный модуль Math, который содержит высокопроизводительные подпрограммы для тригонометрических, логорифмических, статистических и финансовых вычислений.

Функции выделения целой или дробной части

Frac(X)

Возвращает дробную часть аргумента X.

Int(X)

Возвращает целую часть вещественного числа X. Результат принадлежит вещественному типу.

Trunc(X)

Возвращает целую часть вещественного числа X. Результат принадлежит целому типу.

Round(X)

Округляет вещественное число X до ближайшего целого. Если число X находится строго посередине между целыми числами, то округление выполняется до ближайшего четного целого числа (см. примеры ниже). Такое округление называется "округлением банкира", оно применяется в банках и бухгалтериях при работе с деньгами. Для других расчетных задач это округление может не подойти.

Примеры:

Выражение

Результат

Frac(1.5)

0.5

Int(1.5)

1.0

Trunc(1.5)

1

Round(1.5)

2

Round(2.5)

2

Функции генерации случайных чисел

Random

Возвращает случайное вещественное число в диапазоне 0 <= X < 1.

Random(I)

Возвращает случайное целое число в диапазоне 0 <= X < I.

Randomize

Заново инициализирует встроенный генератор случайных чисел новым значением, полученным от системного таймера.


Подпрограммы для работы с порядковыми величинами

Chr(X)

Возвращает символ, порядковый номер которого равен X.

Dec(X, [N])

Уменьшает целую переменную X на 1 или на заданное число N.

Inc(X, [N])

Увеличивает целую переменную X на 1 или на заданное число N.

Odd(X)

Возвращает True, если аргумент X является нечетным числом.

Ord(X)

Возвращает порядковый номер аргумента X в своем диапазоне значений.

Pred(X)

Возвращает значение, предшествующее значению аргумента X в своем диапазоне.

Succ(X)

Возвращает значение, следующее за значением аргумента X в своем диапазоне.

Примеры:

Выражение

Результат

Chr(65)

'A'

Odd(3)

True

Ord('A')

65

Pred('B')

'A'

Succ('A')

'B'

Подпрограммы для работы с датой и временем

Date

Возвращает текущую дату в формате TDateTime.

Time

Возвращает текущее время в формате TDateTime.

Now

Возвращает текущие дату и время в формате TDateTime.

DayOfWeek(D)

Возвращает день недели по дате в формате TDateTime.

DecodeDate(...)

Разбивает значение даты на год, месяц и день.

DecodeTime(...)

Разбивает значение времени на час, минуты, секунды и милисекунды.

EncodeDate(...)

Формирует значение даты по году, месяцу и дню.

EncodeTime(...)

Формирует значение времени по часу, минутам, секундам и милисекундам.

Процедуры передачи управления

Break

Прерывает выполнение цикла.

Continue

Начинает новое повторение цикла.

Exit

Прерывает выполнение текущего блока.

Halt

Останавливает выполнение программы и возвращает управление операционной системе.

RunError

Останавливает выполнение программы, генерируя ошибку времени выполнения.


Разные процедуры и функции

FillChar(...)

Заполняет непрерывную область символьным или байтовым значением.

Hi(X)

Возвращает старший байт аргумента X.

High(X)

Возвращает самое старшее значение в диапазоне аргумента X.

Lo(X)

Возвращает младший байт аргумента X.

Low(X)

Возвращает самое младшее значение в диапазоне аргумента X.

Move(...)

Копирует заданное количество байт из одной переменной в другую.

ParamCount

Возвращает количество параметров, переданных программе в командной строке.

ParamStr(X)

Возвращает параметр командной строки по его номеру.

SizeOf(X)

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

Swap(X)

Меняет местами значения старшего и младшего байтов аргумента.

UpCase(C)

Возвращает символ C, преобразованный к верхнему регистру.

Примеры:

Выражение

Результат

Hi($F00F)

$F0

Lo($F00F)

$0F

High(Integer)

32767

Low(Integer)

–32768

SizeOf(Integer)

2

Swap($F00F)

$0FF0

UpCase('a')

'A'

2.8.3. Процедуры программиста

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