Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Функции пользователя и подпрограммы
Цель работы: изучить операторы 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; Просмотров: 732; Нарушение авторского права страницы