Практически во всех серьезных программах используют подпрограммы. В Бейсике существуют подпрограммы двух типов:
FUNCTION и SUB.
Подпрограммы взаимодействуют с вызывающими их программными единицами (которые могут быть основными программами или, в свою очередь, являться подпрограммами) посредством обмена параметрами (аргументами). Подпрограммы-функции
(FUNCTION), в отличие от подпрограмм типа
SUB, возвращают также в своем имени некоторое значение.
Объявляется подпрограмма
FUNCTION так:
FUNCTION <имя функции>(<список аргументов с указанием их типов>)
<тело подпрограммы- функции>
<имя функции> =<возвращаемое значение>
END FUNCTION
А в начале основной программы после ключевого слова
DECLARE пишется имя подпрограммы с указанием ее типа и, в скобках - имена и типы параметров. В MS QBasic'е это происходит автоматически, причем типы функции и ее параметров обозначаются знаками, стоящими после имен функции и параметров, например строка:
DECLARE FUNCTION fu! (n!)
сообщает о том, что будет использоваться функция
fu, имеющая параметр(аргумент)
n, а стоящие за ними восклицательные знаки означают, что
fu и n - вещественного типа.
Приведем пример подпрограммы-функции, вычисляющей
n-факториал(n!):
DECLARE FUNCTION fu! (n!) ' Эта строка "написана" самим QBasic'ом, не нами!
INPUT " n="; n
' считываем вводимое пользователем значение n
PRINT n; "!="; fu(n)
' пишем возвращаемое функцией fu(n) значение n-факториала
FUNCTION fu (n)
' начало функции "fu", а в скобках - имя параметра "n"
f = 1
FOR i = 1 TO n
' в цикле вычисляем факториал, f
f = f * i
NEXT i
fu = f
' функция возвращает значение факториала
END FUNCTION
' конец функции
Подпрограмма SUB определяется следующим образом:
SUB <имя подпрограммы>(<список аргументов с указанием их типов>)
<тело подпрограммы>
END SUB
В начале основной программы после ключевого слова
DECLARE, как и при использовании
FUNCTION, пишется имя подпрограммы.
Приведем пример подпрограммы
SUB, вычисляющей n-факториал(n!):
DECLARE SUB fu (n!, f!) ' Эта строка "написана" самим QBasic'ом, не нами!
INPUT " n="; n
'считываем вводимое пользователем значение n
CALL fu(n, f)
' !!! обращение к процедуре fu !!!
PRINT n; "!="; f
' пишем результат
SUB fu (n, f)
' начало SUB fu, а в скобках - имена параметров (n,f)
f = 1
FOR i = 1 TO n
f = f * i
NEXT i
END SUB
' конец подпрограммы
В Бейсике разрешена
рекурсия- прием программирования, когда в подпрограмме встречается вызов этой же подпрограммы. Приведем пример вычисления факториала в подпрограмме, использующей рекурсивный вызов:
DECLARE FUNCTION fu! (n!)
INPUT " n="; n
PRINT n; "!="; fu(n)
FUNCTION fu (n)
' рекурсивная функция fu
IF n = 1 THEN fu = 1
IF n > 1 THEN fu = n * fu(n - 1)
END FUNCTION
то же на Fortran то же на C то же на Pascal
аналог на JavaScript