Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Функции пользователя и подпрограммы



Цель работы: изучить операторы DEF, GOSUB, RETURN, SUB,

CALL, разработка программ с использованием функций пользова-

теля и подпрограмм

Содержание работы:

1 Функции пользователя

2 Подпрограммы пользователя. Операторы GOSUB, RETURN

3 Процедуры. Операторы SUB и END SUB

Функции пользователя

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

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

Такие функции могут определяться в любом месте программы с помощью оператора DEF (define – определить).

Формат оператора:

DEF FN Имя [% $] (аргументы, до 5) = выражение

где

FN Имя – обозначение функции или указатель функции;

Имя - любая латинская буква;

% - для целочисленных функций;

$ - для символьных функций.

(данные в квадратных скобках могут отсутствовать)

Если значение выражения вещественного типа, а функция целого

(или наоборот), то значение выражения приводится к типу функции.

Аргументы, употребляемые в описании функции (в операторе

DEF), называются формальными параметрами функции. Параметры обозначаются так же, как и переменные, и разделяются запятыми.

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

Пример 1: DEF FNL (X, Y)=(X-C)^3+SIN(A+B/X)

В функции пользователя L аргументами являются X и Y, а в выражении используются также величины С, А, В, определённые в программе ранее.

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

Пример 2: DEF FNC(X)=SQR(X^7+SIN(X)) – ABS(LOG(2*X)

.........................

M=FNC(1)+2*FNC(4.5)

.........................

Z=X+4

L=FNC(Z)

Функция С(Х), определённая в операторе DEF FNC(X) будет вычисляться в строке с выражением М=… для Х=1 и Х=4.5 и в строке с выражением L=…, где вместо Х используется новая переменная Z=X+4.

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

Пример 3: DEF FNZ(X)=(5*X+2)*X+1

A=1: B=4

? FNZ(A+B/2)

Здесь фактический параметр Х вычисляется как А+В/2, а потом его значение подставляется в FNZ(X) и функция Z(X) вычисляется по выражению в правой части.

Тип и количество используемых переменных должны соответствовать переменным из списка аргументов в операторе DEF. Нельзя употреблять числовые аргументы вместо символьных и наоборот. При определении функции или в указателе функции ее можно писать или с пустыми скобками (…) или без них, если функция не зависит от аргументов.

DEF - неисполняемый оператор, его рекомендуют помещать с другими неисполняемыми операторами либо в конце, либо в начале программы.

 

Задача 1 Написать программу для вычисления значения функции:

при заданных значениях R, A, B

и функции

при заданных значениях S, Q, M, X.

 

В правой части обеих формул можно выделить арифметическое

выражение

Определим это выражение как функцию пользователя с формаль-

ными аргументами X, Y, Z:

DEF FNC(X, Y, Z)=(X*(SIN(Z)^3+Y*(COS(X+Z)))/SQR(X^2+Y^2+Z^2).

Тогда значение функции Т можно определить так:

 

T=FNC(R+A, 7, B^2),

 

где (R+A), 7, B^2 - фактические значения формальных аргументов X, Y, Z.

а значение функции U можно определить по формуле:

 

U = S^2+FNC(Q, M, X)*FNC(3, M+S, X) при фактических параметрах Х=Q, Y=M, Z=X и Х=3, Y=M+S, Z=X.

 

Программа

REM Программа с функций пользователя

DEF FNC(X, Y, Z)=(X*(SIN(Z)^3+Y*COS(X+Z)))/SQR(X^2+Y^2+Z^2)

? " ВВЕДИТЕ ЗНАЧЕНИЯ R, A, B"

INPUT R, A, B

T=FNC(R+A, 7, B^2): ? " T=" T

? " ВВЕДИТЕ ЗНАЧЕНИЯ S, Q, M, X"

INPUT S, Q, M, X

U=S^2+FNC(Q, M, X)*FNC(3, M+S, X)

? " U=" U

END

 

 

Подпрограммы пользователя.

Операторы GOSUB, RETURN

Последовательность повторяющихся в программе операторов может быть оформлена в виде подпрограммы.

Подпрограмма - это фрагмент программы, которая реализует операции, часто повторяющиеся в нескольких точках программы. Подпрограммы обычно размещаются в конце программы перед операторами DATA (если они имеются), и всегда перед оператором END.

Для обращения к подпрограмме используется оператор GOSUB.

Формат оператора

[метка] GOSUB [метка1],

где [метка1] метка некоторой строки, с которой начинается подпрограмма - точка входа в подпрограмму.

При выполнении GOSUB управление передается строке подпрограммы, метка которой указана в операторе GOSUB (напр., оператор GOSUB N010 передает управление подпрограмме, которая начинает выполняться со строки с меткой N010).

Подпрограмма может содержать любые операторы языка QB, но последним выполняемым оператором подпрограммы должен быть оператор RETURN, формат которого должен быть [метка] RETURN.

Оператор RETURN обеспечивает возврат управления на оператор, следующий за оператором GOSUB, осуществившим переход на подпрограмму.

Пример 4:

........................

GOSUB 1000

PRINT 'A='A, 'B='B

........................

REM Подпрограмма 4

........................

RETURN

Оператор RETURN передает управление строке PRINT 'A='A, 'B='B. QBASIC допускает использование в одной программе нескольких подпро-

грамм. Они могут помещаться одна после другой в конце программы в порядке возрастания номеров строк.

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

Для работы операторов RETURN среда программирования QBASIC организует таблицу адресов возврата. Каждый раз, когда в программе выполняется оператор GOSUB, QB помещает в таблицу адрес строки, следующей за оператором GOSUB. Таблица вмещает не более 20 адресов строк.

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

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

Формат оператора:

[метка] ON [арифм.выражение] GOSUB [список],

где [список] - список меток или номеров строк, являющихся точками входов в подпрограмму.

Результат вычисления выражения может принимать значения от 0 до 255, в противном случае печатается сообщение об ошибке. В результате выполнения этого оператора происходит передача управления в зависимости от значения арифметического выражения. Если его значение равно единице, передается управление строке, номер которой в списке стоит первым Если значение арифметического выражения равно двум то строке, номер которой в списке стоит вторым, и т.д.

 

Задача 2

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

 

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

n! =1 2 3...(n-1) n.

В задаче 2 вычисляется три факториала:

(ax+2)! = 1 2...(ax)(ax+1)(ax+2);

a! =1 2 3...(a-1)a;

b! =1 2 3...(b-1)b,

т.е. сначала при введённых a, b, x вычисляется значение n, а потом вычисляется его факториал.

В программе для каждой ветви нужно подставлять формулу своего факториала ((аx+2)!, a! или b! ). Предусмотрим в основном алгоритме настройку на формулу прежде, чем осуществить переход к процедуре. Эта настройка заключается в задании величины n:

n = ax+2, если a=b;

n = a, если a> b;

n = b, если b> a

Для вычисления факториала разработаем подпрограмму пользователя вычисления факториала F = n! в виде последовательности операторов:

SUB F(i)

F=1 ' начальное значение факториала

FOR i=2 TO n ' увеличение на 1 управляющей переменной I

F=F*i ' накопление факториала

NEXT i ' переход к следующему значению I

END SUB

 

Программа

Основной алгоритм и алгоритм вычисления значения факториала представим в виде основной программы и подпрограммы. Вызов подпро-

граммы из основной программы осуществляется с помощью оператора GOSUB. Возвращение из подпрограммы в основную программу осуществляется оператором RETURN. Перед каждым обращением к подпрограмме пользователя параметр факториала n (его конечное значение) вычисляется по формуле, которая используется в данной ветви вычислений.

CLS

REM Программа с подпрограммой пользователя

INPUT " a="; a, " b="; b, " x="; x

IF a=b THEN m1

IF a> b THEN m2

REM Вычисление при b> a

n=b

GOSUB m3

Z=X*SIN(X)/F: GOTO m4

m1: REM Вычисление при a=b

n=a*x+2

GOSUB m3

Z=F: GOTO m4

m2: REM Вычисление при a> b

n=a

GOSUB m3

Z=F*b*x^2/(a^2+b^2)

m4: PRINT" Z=" Z, " F=" F

STOP

m3: REM Подпрограмма вычисления факториала

F=1

FOR i=2 TO n

F=F*i

NEXT i

RETURN

END

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 683; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.032 с.)
Главная | Случайная страница | Обратная связь