Файл: Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 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. Стандартные подпрограммы
Арифметические функции
Примеры:
Тригонометрические функции
Примеры:
Заметим, что в состав среды Delphi входит стандартный модуль Math, который содержит высокопроизводительные подпрограммы для тригонометрических, логорифмических, статистических и финансовых вычислений.
Функции выделения целой или дробной части
Примеры:
Функции генерации случайных чисел
Подпрограммы для работы с порядковыми величинами
Примеры:
Подпрограммы для работы с датой и временем
Процедуры передачи управления
Разные процедуры и функции
Примеры:
2.8.3. Процедуры программиста
Очевидно, что встроенных процедур и функций для решения большинства прикладных задач недостаточно, поэтому приходиться придумывать собственные процедуры и функции. По своей структуре они очень напоминают программу и состоят из заголовка и блока.
Среди операторов языка 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. Процедуры программиста
Очевидно, что встроенных процедур и функций для решения большинства прикладных задач недостаточно, поэтому приходиться придумывать собственные процедуры и функции. По своей структуре они очень напоминают программу и состоят из заголовка и блока.