- •Содержание
- •Введение
- •1. Общие сведения
- •2. Основные элементы языка Бейсик
- •2.1. Алфавит.
- •2.2. Типы данных.
- •2.3. Стандартные функции языка Бейсик
- •2.4. Арифметическое выражение
- •3. Управляющие операторы языка Бейсик
- •3.1. Оператор присваивания
- •3.2. Операторы ввода/вывода данных
- •4. Операторы управления
- •4.1. Программирование разветвлений
- •4.1.1. Логические выражения и выражения отношения
- •4.1.2. Оператор if-then-else-условный оператор
- •4.1.3. Оператор select case
- •4.2. Программирование циклов
- •4.2.1. Операторы организации циклов for-next
- •4.2.2. Оператор while-wend-итерационный цикл 1
- •4.2.3. Оператор do-while (until) lоор-итерационный цикл 2
- •4.3. Процедуры и функции
- •5. Описание и обработка массивов
- •5.1. Оператор размерности массива dimension
- •5.2. Сортировка массивов
- •5.2.1. Сортировка методом пузырька
- •5.2.2. Сортировка массива с помощью оператора обмена swap
- •5.2.3. Другие методы сортировки
- •6. Строковые выражения и функции
- •7. Файлы данных
- •8. Работа с графикой
- •Литература
4.3. Процедуры и функции
Процедура- это набор операторов языка Бейсик, существующих в виде блока. Есть два типа процедур SUB (подпрограмма) и FUNCTION (функция). Процедуры помогают организовывать многократное использование блока операторов. Вместо того чтобы заново вводить каждую строку в нескольких местах программы для выполнения одних и тех же задач, можно создать одну процедуру и вызывать ее из нескольких мест программы. Это не только сократит объем вводимого текста, но и гарантирует одинаковую работу процедуры при каждом вызове.
Подпрограмма выполняет заданный блок операторов и не возвращает значения основной программе. Синтаксис простой подпрограммы такой:
SUB имя[(параметры)] [STATIC]
[блок__операторов]
END SUB
где
имя имя процедуры SUB, длиной до 40, без суффикса типа данных.
параметры одна или несколько переменных, указывающих параметры, которые передаются в процедуру SUB при ее вызове в виде:
перемен[()] [AS тип] [, перемен[()] [AS тип]]...
где
перемен имя переменной Basic.
тип тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип данных, определенный пользователем).
STATIC указывает, что значения локальных переменных процедуры SUB сохраняются между вызовами функции.
Следующий фрагмент является примером простой подпрограммы:
SUB PROBA
PRINT "Разработка не завершена"
END SUB
Подпрограмма вызывается с помощью оператора CALL. Использование оператора CALL при вызове подпрограммы необязательно. Вызвать подпрограмму можно, просто указав ее имя. Однако использование ключевого слова CALL сделает программу более удобной для чтения.
CALL PROBA
Пример 1. Вычислить
DECLARE SUB pr (x%, f%)
DIM N AS INTEGER, M AS INTEGER, Y AS INTEGER
INPUT "N=, M="; N, M
CALL pr(N, R%)
CALL pr(M, V%)
Y = R% + V%
PRINT "Y="; Y
SUB pr (x AS INTEGER, f AS INTEGER)
f = 1
FOR i = 1 TO x
f = f * i
NEXT i
END SUB
Функция – это процедура, которая выполняет заданный блок операторов и при завершении работы возвращает управление вызывающей программе и передает ей результат расчета. Функция получает один или несколько объектов данных, называемых параметрами, и выполняет с ними некоторые действия.
Синтаксис функции такой:
FUNCTION имя [(параметры)] [STATIC]
[блок операторов]
имя = выражение
[блок операторов]
END FUNCTION
где
имя имя функции и возвращаемый ею тип данных, указанный суффикс типа данных (%, &, !, # или $).
параметры одна или несколько переменных, указывающих параметры, которые передаются в функцию при ее вызове: в виде:
перемен[()] [AS тип] [, перем[()] [AS тип]]...
где
переменная имя переменной Basic.
тип тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип данных, определенный пользователем).
STATIC указывает, что значения локальных переменных функции сохраняются между вызовами функции.
выражение возвращаемое значение функции.
Ниже приведенный фрагмент является примером функции с именем PROBA, назначение которой – вернуть число, определенное внутри самой функции
kk% = proba%
PRINT kk%
FUNCTION proba%
a% = 7
b% = 12
c% = a% + b%
proba% = c%
END FUNCTION
При сохранении программы Basic автоматически добавляет оператор DECLARE. Оператор DECLARE описывает процедуру FUNCTION или SUB и выполняет проверку аргументов на соответствие типу данных, он также необходим при вызове процедур SUB без использования CALL.
Синтаксис оператора DECLARE:
DECLARE (FUNCTION | SUB) имя [([параметры])]
где
имя имя процедуры.
параметры одна или несколько переменных, указывающих параметры, которые передаются в процедуру при ее вызове в виде:
перемен[()] [AS тип] [, перемен[()] [AS тип]].
где
перемен имя переменной Basic.
тип тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип, определенный пользователем). ANY допускает использование любого типа данных.
Возможности подпрограмм и функций можно расширить, передавая им значения с помощью параметров. Параметры – это переменные, играющие роль замещающих символов для значений, которые будут переданы в подпрограмму или функцию. Параметры помещают в скобки в операторе объявления подпрограммы или функции. Ниже приведен пример объявления функции ААА, которая имеет два аргумента, один типа Integer (целый), второй – типа String (строковый).
Function AAA%(n%, m$)
Очень важно, чтобы передаваемые значения соответствовали типам данных аргументов и их порядку.
Если при вызове процедуры указывается то значение параметра, которое нам нужно, - то оно называется фактическим значением параметра (пример 2), а если вместо числового значения используется буквенный параметр (n), то такие значения параметров называются формальными (пример 3).
Пример 2 |
Пример 3 |
DECLARE FUNCTION gg% (x AS INTEGER) c% = gg%(3) PRINT c%
FUNCTION gg% (x AS INTEGER) gg% = x + 2 END FUNCTION |
DECLARE FUNCTION gg% (x AS INTEGER) INPUT "Введите n"; n% c% = gg%(n%) PRINT c%
FUNCTION gg% (x AS INTEGER) gg% = x + 2 END FUNCTION |
При n=4 Ответ 5 |
При n=4 Ответ 6 |
Передача параметров может осуществляться по ссылке или по значению. Когда переменная передается по ссылке, функция или процедура получает ее адрес в памяти и может изменить фактическое значение переменной. Передача по ссылке позволяет передать или получить несколько результатов при одном вызове функции. В случае передачи по значению Basic передает копию текущего содержимого переменной вместо ее адреса в памяти, и функция или процедура не сможет напрямую модифицировать исходное значение. При вызове функции, если значение аргумента не должно изменяться функцией, то необходимо заключить аргумент в круглые скобки.
Пример 4 |
Пример 5 |
DECLARE FUNCTION proc% (V AS INTEGER) DIM M AS INTEGER, W AS INTEGER INPUT "ВВЕДИТЕ M"; M W% = proc%((M)) PRINT "M="; M PRINT "W="; W
FUNCTION proc% (V AS INTEGER) V = V + 2 proc% = SQR(V ^ 3) END FUNCTION |
DECLARE FUNCTION proc% (V AS INTEGER) DIM M AS INTEGER, W AS INTEGER INPUT "ВВЕДИТЕ M"; M W% = proc%(M) PRINT "M="; M PRINT "W="; W
FUNCTION proc% (V AS INTEGER) V = V + 2 proc% = SQR(V ^ 3) END FUNCTION |
При М=5 Ответ: М=5, W=19 |
При М=5 Ответ: М=7, W=19 |
Пример 6. Составить программу для нахождения функции вычисления кубического корня.
DECLARE FUNCTION cube! (x!)
INPUT "Введите Х"; x!
a! = cube!
PRINT a!
FUNCTION cube!(x!)
IF x = 0 THEN
c! = 0
EXIT FUNCTION
END IF
c! = 10 ^ ((LOG(ABS(x!)) / LOG(10)) / 3)
IF x < 0 THEN
c! = -c!
END IF
cube! = c!
END FUNCTION
Пример 7. Вычислить Y=n!/m!-k!
DECLARE FUNCTION fact& (n%)
INPUT "N=", n%
INPUT "M=", m%
INPUT "K=", k%
y = fact&(n%) / fact&(m%) - fact&(k%)
PRINT n%, m%, k%
PRINT "Y="; y
FUNCTION fact& (x%)
f& = 1
FOR i% = 1 TO x%
f& = f& * i%
NEXT
fact& = f&
END FUNCTION