и принимает в себя результат. Мало того, если результату не присвоить значение, он останется неопределенным, и это будет ошибкой!
Созданная нами функция может вызываться так:
A:= Max( 20, 10 ); { A = 20 }
Writeln( Max( A, B ) ); { печатается большее из A и B }
Вызов функции можно использовать даже как фактический параметр в её собственном вызове, то есть организовать вложенные вызовы, например:
A:= Max (
A:= Max (
В первом случае сначала вызывается функция Max(20,10), вставленная как первый фактический параметр, а затем Max(20,40), – то есть результат первого вызова подставляется параметром во второй. Похоже работает и другой пример, только функция вызывается трижды. Полезно понаблюдать за такими вызовами через отладчик. Напишите главную программу для исследования функции Max и прогоните её в отладчике.
В прошлой главе я предложил вам написать процедуру для подсчета заданного символа в строке. Если вы справились с той задачей, то для возврата результата наверняка воспользовались ссылкой на переменную. Теперь рассмотрим решение с применением функции.
Начнем, разумеется, с заголовка функции, дадим ей имя Count (подсчет).
function Count(const Str : string; Ch : char): integer;
Функция принимает два параметра: ссылку на строку и символ, который надо подсчитать. Напомню, что ключевое слово CONST в объявлении параметра позволяет ссылаться и на константу, и на переменную. Тело функции строим на базе цикла со счетчиком.
function Count(const str : string; ch: char): integer;
var N, i: integer;
begin
N:=0; { обнуляем счетчик }
for i:=1 to Length(str) do
if str[i]=ch then N:= N+1;
Count:= N; { определяем результат функции }
end;
Подсчет символов в массиве ведется в локальной переменной N, и лишь по завершении цикла результат копируется в имя функции. Грубой ошибкой было бы накапливать счетчик прямо в имени функции:
if str[i]=ch then
Запомните: в теле функции её имя применяется только слева от оператора присваивания! Есть исключения из этого правила, но мы пока не будем их касаться.
И, наконец, напишем программу «P_22_1» для проверки функции Count. В главной программе функция вызывается сначала для переменной S, а затем для константы «BANAN». Причем во втором случае она вызывается дважды, а результат суммируется. Испытайте эту программу.
{ P_23_1 – подсчет заданных символов в строке }
function Count(const str : string; ch: char): integer;
var N, i: integer;
begin