Понятие подпрограмм


<Подпрограмма> (англ. subprogram) – поименованная часть программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти – они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение – структуризация программы с целью удобства её понимания и сопровождения.

Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.

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

Подпрограммы пишутся на том же языке, что и программы обработки технологических команд, они вызываются из программ с помощью оператора <CALL>. Каждая подпрограмма начинается с заголовка, состоящего из слова <SUB> и имени программы, а заканчивается словом <SUBEND>. Имя подпрограммы может быть любым, не совпадающим с именами программ и уже имеющимися подпрограммами. Внутрь подпрограмм можно передавать параметры. Список формальных параметров задается в строке определения подпрограммы сразу после ее имени.

Синтаксис определения подпрограмм:

 

SUB <ИмяПодпрограммы>{(<Параметр1, Параметр2,...>)}

{

< Код подпрограммы >

}

SUBEND

 

Подпрограммы так же, как и программы, могут содержать математические выражения и функции, операторы ввода/вывода, условные операторы, циклы, операторы перехода, вызовы подпрограмм, операторы формирования кадров управляющей программы.

Ниже приведен пример подпрограммы, которая выполняет пересчет линейных координат на плоскости X и Y в линейную и поворотную координаты на цилиндре X и C.

 

Пример:

sub ConvertXYtoXC(XIn, YIn, COut: Real)

  HalfX: Real

 

  HalfX = XIn * 0.5 ! Radial value of X

  if abs(YIn)>0.000001 then begin

    if YIn>0 then begin

      COut = atn(-HalfX/YIn) + 180

    end else begin

      if XIn>=0 then COut = atn(-HalfX/YIn)

                else COut = atn(-HalfX/YIn) + 360

    end

  end else begin

    if HalfX>=0 then COut = 90

                else COut = 270

  end

subend