
Использование подпрограмм. Процедуры и функции.
ПЛАН
- объявления массива
- Операции с массивами Вывод массива Введение массива
- Поиск минимального (максимального) элемента массива поиск заданного элемента массива
- Сортировка массива
- Сортировка методом прямого выбора сортировки методом обмена
Еще одним важным компонентом программы на Lazarus есть процедуры и функции. Главный файл проекта просто запускает на выполнение форму со всеми ее событиями, поэтому тела программы, как такового (как это было в предыдущих версиях языка Pascal) уже нет.
Все события и алгоритмическая реализация программы описываются в процедурах и функциях, как стандартных, так и написанных автором программы.
подпрограмма
Подпрограмма — это поименована (т.е. каждая подпрограмма имеет свое уникальное для данной программы или модуля имя) последовательность операторов, определенных и записаны только в одном месте программы (модуля) так, что их можно использовать при выполнении одного или нескольких фрагментов программы (модуля ). Это делается в двух случаях:
- Одинаковая последовательность операторов используется во многих моментах реализации алгоритма. Тогда для экономии места и объема программы эту последовательность операторов «выносят» к подпрограмме, а затем просто вызывают эту подпрограмму в соответствующих моментах.
- Для выделения фрагмента алгоритма в отдельный блок. Этим достигается лучшая визуализация выполнения алгоритма.
В Lazarus существует два типа подпрограмм: процедуры и функции.
При использовании процедур и функции в Lazarus соответствующий модуль должен содержать в себе текст процедуры или функции и обращения (сам вызов) к ней.
Подпрограмма может содержать такие же блоки описания модулей, констант, типов, переменных и др., И сам модуль.
Переменные, константы, и другие описательные блоки подпрограммы «работают» только в этом подпрограмме (локальные переменные, локальные типы и др.) Кроме того подпрограмма может использовать все переменные, типы и др., Описаны в самом модуле (перед текстом подпрограммы).
Локальные и глобальные переменные
Переменные, описанные в программе (модули) можно использовать во всех функциях и процедурах, содержащиеся в ней. Эти переменные называют глобальными переменными.
Переменные, которые описываются в подпрограмме распространяют свое действие только на эту подпрограмму и называются локальными.
Глобальные переменные, имена которых совпадают с локальными подпрограмм и функций, не «действуют» в этих подпрограммах и функциях. Все же локальные переменные там можно использовать.
процедуры
Результатом выполнения процедуры является не какое-то значение, а изменение существующих значений, запуск других процедур, функций и процессов.
Рассмотрим общий вид процедуры: procedure имья_процедуры (описание параметров) блок описания локальных констант, переменных, типов; begin
последовательность операторов;
end;
В отличие от функции, в ее заголовке нет имени типа для значений, порождаемых в результате вызова, так как никакие значения не порождаются. По этой же причине в теле процедуры не может быть операторов присваивания с ее именем в левой части. Вызов процедуры состоит из имени и аргументов в скобках и записывается как отдельный оператор.
Например
Reset (Input)
Процедуры целесообразно использовать в тех случаях, когда в разных местах программы необходимо выполнить одинаковую последовательность операций с различными параметрами.
var в описании процедуры носит такое же нагрузки, как и в описании функции.Пример.Найти площадь четырехугольника по известным 4 сторонами и 1 диагональю. var
Form1: TForm1; a, b, c, d, e: integer; s1, s2, s: real;
implementation
procedure geron (x, y, z: integer; var st: real) var p: real;
begin p = (x + y + z) / 2;
st = sqrt (p * (px) * (py) * (pz)) end;
procedure TForm1.Button1Click (Sender: TObject); begin
a = strtoint (edit1.text) b = strtoint (edit2.text) c = strtoint (edit3.text) d = strtoint (edit4.text) e = strtoint (edit5.text) geron (a, b, e, s1)
geron (c, d, e, s2) s = s1 + s2; Edit6.text = floattostr (s) end;
функции
Главным результатом действия функции является значение. В отличие он процедуры, каждая функция обязательно имеет фиксированный тип результата.
Например, если обратиться к стандартным функциям, то функция sin имеет действительное значение, strtoint — целое, floattostr — строчное.
Рассмотрим общий вид функции:
function имя_функции (описание параметров): тип; блок описания локальных констант, переменных, типов; begin
последовательность операторов;
имя_функции = остаточне_значення_функции; end;
Отметим, что остаточне_значення_функции должно быть того же типа, что и сама функция. Пример.Найти площадь четырехугольника по известным 4 сторонами и 1 диагональю. var
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Form1: TForm1; a, b, c, d, e: integer; s1, s2, s: real; implementation function geron (x, y, z: integer): real; var p: real; begin p = (x + y + z) / 2; geron = sqrt (p * (px) * (py) * (pz)) end; procedure TForm1.Button1Click (Sender: TObject); begin a = strtoint (edit1.text) b = strtoint (edit2.text) c = strtoint (edit3.text) d = strtoint (edit4.text) e = strtoint (edit5.text) s = geron (a, b, e) + geron (c, d, e) {2-й способ: s1 = geron (a, b, e) s2 = geron (c, d, e) s = s1 + s2;} Edit6.text = floattostr (s) end; |
Пример.По условиям предыдущей задачи проверять правильность введенных цифр, проверяя неравенство каждого треугольника.
Создадим функцию TRIK для проверки неравенства треугольника.
Function trik (x, y, z: integer): Boolean; Begin
If (x + y> z) and (x + z> y) and (y + z> x) then trik = true else trik = false; End;
Тогда процедура решения задачи с помощью функции geron иметь вид:
1 2 3 4 5 6 7 8 9 10 11 |
procedure TForm1.Button1Click (Sender: TObject); begin a = strtoint (edit1.text) b = strtoint (edit2.text) c = strtoint (edit3.text) d = strtoint (edit4.text) e = strtoint (edit5.text) if trik (a, b, e) and trik (c, d, e) then s = geron (a, b, e) + geron (c, d, e) else Showmessage ( 'Некорректные данные! "); Edit6.text = floattostr (s) end; |