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

Пример алгоритма-процедуры:
алг гипотенуза (вещ a, b, рез вещ c)
дано a>=0 и b>=0 | длины катетов треугольника
надо | c = длинa гипотенузы этого треугольника
нач
• c := sqrt( a**2 + b**2 )
кон

Пример алгоритма-функции:
алг вещ площадь (вещ a, b, c)
дано a>=0 и b>=0 и c>=0 | длины сторон треугольника
надо | значение функции равно площади этого треугольника
нач
• вещ p | полупериметр
• p := (a+b+c)/2
• знач := sqrt(p*(p-a)*(p-b)*(p-c))
кон

    Значение, которое должно стать результатом алгоритма-функции, надо присвоить особой величине с именем знач. Ее описанием служит заголовок алгоритма, но в остальном величина знач используется так же, как и любая другая промежуточная величина. Вызов алгоритма-функции производится путем указания его имени в выражении. Встретив это имя при вычислении выражения, КуМир выполняет алгоритм-функцию и затем подставляет в выражение вместо имени алгоритма значение величины знач.

    Вызов алгоритма-процедуры является отдельной командой алгоритмического языка и имеет вид:
∙ имя_алгоритма-процедуры или
∙ имя_алгоритма-процедуры (список_параметров_вызова)

Пример 1:
алг
нач
• подпр
кон
алг подпр
нач
• вывод ”Мы в подпрограмме”, нс
кон

Пример 2:
нач
• сумма(2.4, 7.6)
кон
алг сумма(вещ а, вещ б)
нач
• вывод ”Сумма = ”, а+б, нс
кон
Последнее изменение: Wednesday, 6 November 2013, 20:47