![](/user_photo/2706_HbeT2.jpg)
- •Раздел 2 Программирование на языке
- •Лабораторная работа № 1
- •1 Порядок решения задач на компьютере
- •2 Разработка линейных программ
- •Input "Ввести d, k,n"; d, k,n
- •3 Операторы read, datа, restore
- •3 Запуск qbasic, ввод и редактирование программ
- •Лабораторная работа № 2
- •2 Программы ветвления
- •Input X
- •Лабораторная работа № 3
- •1 Операторы цикла qb
- •2 Примеры программ с циклами
- •3 Контрольные вопросы
- •4 Задание
- •Лабораторная работа № 4
- •1 Программа вычисления арифметического ряда
- •2 Программы вычисления факториалов
- •3 Алгоритм итерационного цикла
- •4 Контрольные вопросы
- •5 Задания
- •Лабораторная работа № 5
- •1 Программа "цикл в цикле"
- •2 Программа "цикл и ветвление"
- •3 Программа "цикл в цикле и ветвление"
- •4 Контрольные вопросы
- •5 Задания
- •Лабораторная работа № 6
- •1 Одномерные массивы - векторы
- •2 Двумерные массивы – матрицы. Обработка массивов
- •3 Контрольные вопросы
- •4 Задания
- •Лабораторная работа № 7
- •1 Функции пользователя
- •3 Процедуры. Операторы sub и end sub
- •Лабораторная работа № 8
- •1 Графические операторы qbasic
- •2 Программа рисования графических объектов
- •3 Построение графиков функций
- •4 Контрольные вопросы
- •5 Задание
3 Процедуры. Операторы sub и end sub
Процедура – это несколько повторяющихся операторов, имеющих имя и список формальных параметров. Процедура и подпрограмма в принципе похожи, взаимозаменяемы, т.к. обе являются последовательностью операторов, т.е. фрагментом программы. Однако подпрограмма составляется для вычисления часто повторяющихся в основной программе
107
выражений - перевод градусной меры углов в радианную, чисел из одной системы счисления в другую, вычисление факториала и т.д. Процедура предназначена для выполнения какой-либо служебной последовательности операторов - рисование рамки таблицы, вызов программы на Ассемблере и др,, хотя своими операторами также может вычислять функции, как и подпрограмма или функция пользователя.
Формат процедуры:
[метка] SUB имя (список формальных параметров)
операторы
[метка] END SUB
или
SUB имя (список формальных параметров)
(LOCAL список переменных)
(STATIC список переменных)
(SHARED список переменных)
операторы
(EXIT SUB)
END SUB
Для описания локальных переменных в процедуре применяется оператор LOCAL, например оператор LOCAL A%,B# формирует 2 локальные переменные: А% - целочисленная и B# - двойной точности.
Статистические и общие переменные. По умолчанию переменные, появляющиеся в описании процедур, содержат локальный атрибут. Но так как в процессе выполнения программ значения переменных могут изменяться, то в процедуре необходимо описывать переменные.
Глобальные переменные описываются с помощью оператора SHARED. Они могут применяться в основной программе. Статистические переменные, описанные оператором STATIC, не теряют свое значение при выходе из процедуры, но не могут применяться в программе.
Оператор EXIT SUB аналогичен END SUB, но может применяться в любом месте процедуры. Оператор END SUB должен быть последним оператором процедуры.
Если в процедуру нужно включить программу на Ассемблере, то
используется оператор: SUB progname INLINE.
Для вызова такой процедуры используется оператор:
CALL progname INLINE
108
Внутри процедуры нельзя применять операторы GOTO, GOSUB, RETURN, передающие управление за ее пределы. Описания процедур и функций не могут быть вложенными. Но внутри процедуры можно обращаться к другим процедурам и функциям.
Для вызова процедуры служит оператор CALL.
Формат оператора:
CALL имя (список фактических параметров)
Оператор CALL пересылает фактические параметры в процедуру
по ссылке или по значению. Возврат в основную программу выполняется автоматически в место вызова процедуры (специального оператора, как RETURN в подпрограмме пользователя не требуется).
Пример 5:
SUB WW(A,M,N,MAX)
IF A>M THEN MAX=A ELSE MAX=M
IF MAX>N THEN MAX=N
END SUB
……………………………………………..
CALL WW(18,3,6,MAX)
PRINT"MAX="MAX:END
В процедуре будет вычислено значение MAX=18.
Задача 2 Составить программу вычисления функции из задачи 1, используя процедуру пользователя.
Процедура вызывается оператором CALL, возврат в основную программу производится автоматически после выполнения процедуры.
Программа
CLS
REM программа с процедурой
INPUT "a=";a, "b=";b, "x=";x
IF a=b THEN m1
IF a>b THEN m2
REM Вычисление при b>a
n=b
CALL F(i)
Z=x*SIN(x)/F : GOTO m3
m1:REM Вычисление при a=b
n=a*x+2
109
CALL F(i)
Z=F : GOTO m3
m2: REM Вычисление при a>b
n=a
CALL F(i)
Z=F*b*x^2/(a^2+b^2)
m3: PRINT"Z="Z,"F="F
STOP
REM Процедура вычисления факториала
SUB F(i)
F=1
FOR i=2 TO n
F=F*i
NEXT i
END SUB
END
Контрольные вопросы
1 В каких случаях целесообразно вводить функции, подпрограммы и процедуры пользователя ?
2 Что такое формальные и фактические параметры ?
3 Что такое подпрограмма ?
4 Какие операторы используются при обращении к подпрограмме
5 Что называется процедурой?
6 Какие операторы образуют формат процедуры?
7 Как выполняется возврат из подпрограммы и из процедуры в основную программу?
8 Что означают опции LOCAL, STATIC, SHARED в формате процедуры?
Задание
Составить три программы вычисления функции с использованием:
функции пользователя;
подпрограммы пользователя;
процедуры пользователя
при х = 0, 45
В первой программе вся функция задания или её элементы должна быть представлена как функция пользователя, во второй – как подпрограмма пользователя и в третьей – как процедура
110
-
№ вар
Функция
1
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
111
-
1
2
16
17
18
19
20
Содержание отчета
1 Название, цель, содержание работы
2 Задание для своего варианта.
3 Три программа расчёта – с функцией, подпрограммой и процедурой.
4 Результаты расчётов в среде QB.
5 Письменные ответы на контрольные вопросы.
6 Выводы по работе