Алгоритмы-процедуры и алгоритмы-функции в КУМИР

Хирьянов Тимофей Федорович

Алгоритм на языке КуМир записывается так:
алг тип_алгоритма имя_алгоритма (описание аргументов и результатов)
  дано условие_применимости_алгоритма
  надо цель_выполнения_алгоритма
нач
  последовательность команд
кон
Описание алгоритма состоит из:
  • заголовка (часть до служебного слова нач),
  • тела алгоритма (часть между словами нач и кон).
Части "дано", "надо", а также "тип алгоритма" и "описание аргументов и результатов" могут отсутствовать.

Простейшие алгоритмы

Рассмотрим следующий вспомогательный алгоритм для исполнителя Чертежник.

Пример алгоритма

алг квадрат
нач
  опустить перо
  сместиться на вектор(0,2)
  сместиться на вектор(2,0)
  сместиться на вектор(0,-2)
  сместиться на вектор(-2,0)
  поднять перо
кон
Он позволяет нарисовать квадрат 2х2 (начиная с левого нижнего угла). Для этого нужно использовать в основной программе команду вызова вспомогательного алгоритма, которая будет иметь вид:
квадрат

Алгоритмы с аргументами

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

Пример алгоритма

алг квадрат (арг вещ а)
нач
  опустить перо
  сместиться на вектор(0, а)
  сместиться на вектор(а, 0)
  сместиться на вектор(0, -а)
  сместиться на вектор(-а, 0)
  поднять перо
кон
Слово арг означает, что у алгоритма есть аргумент (а), а вещ — то, что этот аргумент имеет вещественный тип. Команда вызова такого алгоритма может иметь вид
квадрат(2)
(в этом случае будет нарисован квадрат 2x2) или, например,
квадрат(5)
(в этом случае будет нарисован квадрат 5x5).

Алгоритмы с результатами

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

Пример алгоритма с результатами

алг гипотенуза (вещ a, b, рез вещ c)
  дано a >= 0 и b >= 0 | длины катетов треугольника
  надо | c = длинa гипотенузы этого треугольника
нач
  c := sqrt(a ** 2 + b ** 2)
кон
Здесь служебное слово рез указывает на то, что величина c является результатом и ее значение будет меняться в процессе работы алгоритма. Например, после вызова
гипотенуза(3, 4, c)
величина c примет значение 5.

Алгоритмы-процедуры и алгоритмы-функции

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

Пример алгоритма-функции

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

5 комментариев:

  1. Привет одноклассникам! Ирочка, случайно забрел на эту страничку и был приятно удивлен, увидев твой профиль тут! Никогда не слышал про КуМир. Почитаю на досуге! Успехов тебе в деле информатизации и алгоритмизации подрастающего поколения!

    ОтветитьУдалить
  2. АНИМЕ НА АВЕ- ЗДОРОВЬЯ МАМЕ!

    ОтветитьУдалить